1e41f4b71Sopenharmony_ci# Signing and Signature Verification (ArkTS)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThis topic provides signing and signature verification development cases with the following algorithms:
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci- [Key algorithm ECC256 and digest algorithm SHA-256](#ecc256sha256)
7e41f4b71Sopenharmony_ci- [Key algorithm SM2 and digest algorithm SM3](#sm2sm3)
8e41f4b71Sopenharmony_ci- [Key algorithm RSA, digest algorithm SHA-256, and padding mode PSS](#rsasha256pss)
9e41f4b71Sopenharmony_ci- [Key algorithm RSA, digest algorithm SHA-256, and padding mode PKCS #1 v1.5](#rsasha256pkcs1_v1_5)
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ciFor details about the scenarios and supported algorithms, see [Supported Algorithms](huks-signing-signature-verification-overview.md#supported-algorithms).
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci## How to Develop
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_ci**Key Generation**
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci1. Set the key alias.
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci2. Initialize the key property set.
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ci3. Use [generateKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksgeneratekeyitem9) to generate a key. For details, see [Key Generation](huks-key-generation-overview.md).
23e41f4b71Sopenharmony_ci
24e41f4b71Sopenharmony_ciAlternatively, you can [import a key](huks-key-import-overview.md).
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci**Signing**
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci1. Obtain the key alias.
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ci2. Obtain the plaintext to be signed.
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci3. Obtain **HuksOptions**, which include the **properties** and **inData** fields.
33e41f4b71Sopenharmony_ci   Pass in the plaintext to be signed in **inData**, and [algorithm parameters](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksparam) in **properties**.
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci4. Use [initSession](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksinitsession9) to initialize a key session. The session handle is returned after the initialization.
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci5. Use [finishSession](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksfinishsession9) to generate a signature.
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci**Signature Verification**
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci1. Obtain the key alias.
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci2. Obtain the signature to be verified.
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci3. Obtain **HuksOptions**, which include the **properties** and **inData** fields.
46e41f4b71Sopenharmony_ci   Pass in the signature in **inData**, and [algorithm parameters](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksparam) in **properties**.
47e41f4b71Sopenharmony_ci
48e41f4b71Sopenharmony_ci4. Use [initSession](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksinitsession9) to initialize a key session. The session handle is returned after the initialization.
49e41f4b71Sopenharmony_ci
50e41f4b71Sopenharmony_ci5. Use [updateSession](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksupdatesession9) to process data.
51e41f4b71Sopenharmony_ci
52e41f4b71Sopenharmony_ci6. Use [finishSession](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksfinishsession9) to finish signature verification.
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci**Key Deletion**
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ciUse [deleteKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksdeletekeyitem9) to delete the key that is not required. For details, see [Deleting a Key](huks-delete-key-arkts.md).
57e41f4b71Sopenharmony_ci## Development Cases
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci### ECC256/SHA256
60e41f4b71Sopenharmony_ci```ts
61e41f4b71Sopenharmony_ci/*
62e41f4b71Sopenharmony_ci * Key algorithm ECC256 and digest algorithm SHA-256 are used.
63e41f4b71Sopenharmony_ci */
64e41f4b71Sopenharmony_ciimport { huks } from '@kit.UniversalKeystoreKit';
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_cilet keyAlias = 'test_eccKeyAlias';
67e41f4b71Sopenharmony_cilet handle: number;
68e41f4b71Sopenharmony_cilet plaintext = '123456';
69e41f4b71Sopenharmony_cilet signature: Uint8Array;
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_cifunction StringToUint8Array(str: String) {
72e41f4b71Sopenharmony_ci  let arr: number[] = new Array();
73e41f4b71Sopenharmony_ci  for (let i = 0, j = str.length; i < j; ++i) {
74e41f4b71Sopenharmony_ci    arr.push(str.charCodeAt(i));
75e41f4b71Sopenharmony_ci  }
76e41f4b71Sopenharmony_ci  return new Uint8Array(arr);
77e41f4b71Sopenharmony_ci}
78e41f4b71Sopenharmony_ci
79e41f4b71Sopenharmony_cifunction Uint8ArrayToString(fileData: Uint8Array) {
80e41f4b71Sopenharmony_ci  let dataString = '';
81e41f4b71Sopenharmony_ci  for (let i = 0; i < fileData.length; i++) {
82e41f4b71Sopenharmony_ci    dataString += String.fromCharCode(fileData[i]);
83e41f4b71Sopenharmony_ci  }
84e41f4b71Sopenharmony_ci  return dataString;
85e41f4b71Sopenharmony_ci}
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_cifunction GetEccGenerateProperties() {
88e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
89e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
90e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_ECC
91e41f4b71Sopenharmony_ci  }, {
92e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
93e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
94e41f4b71Sopenharmony_ci  }, {
95e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
96e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
97e41f4b71Sopenharmony_ci    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
98e41f4b71Sopenharmony_ci  }, {
99e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
100e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
101e41f4b71Sopenharmony_ci  }];
102e41f4b71Sopenharmony_ci  return properties;
103e41f4b71Sopenharmony_ci}
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_cifunction GetEccSignProperties() {
106e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
107e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
108e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_ECC
109e41f4b71Sopenharmony_ci  }, {
110e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
111e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
112e41f4b71Sopenharmony_ci  }, {
113e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
114e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN
115e41f4b71Sopenharmony_ci  }, {
116e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
117e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
118e41f4b71Sopenharmony_ci  }];
119e41f4b71Sopenharmony_ci  return properties;
120e41f4b71Sopenharmony_ci}
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_cifunction GetEccVerifyProperties() {
123e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
124e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
125e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_ECC
126e41f4b71Sopenharmony_ci  }, {
127e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
128e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
129e41f4b71Sopenharmony_ci  }, {
130e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
131e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
132e41f4b71Sopenharmony_ci  }, {
133e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
134e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
135e41f4b71Sopenharmony_ci  }];
136e41f4b71Sopenharmony_ci  return properties;
137e41f4b71Sopenharmony_ci}
138e41f4b71Sopenharmony_ci
139e41f4b71Sopenharmony_ciasync function GenerateEccKey(keyAlias: string) {
140e41f4b71Sopenharmony_ci  let genProperties = GetEccGenerateProperties();
141e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
142e41f4b71Sopenharmony_ci    properties: genProperties
143e41f4b71Sopenharmony_ci  }
144e41f4b71Sopenharmony_ci  await huks.generateKeyItem(keyAlias, options)
145e41f4b71Sopenharmony_ci    .then((data) => {
146e41f4b71Sopenharmony_ci      console.info(`promise: generate ECC Key success, data = ${JSON.stringify(data)}`);
147e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
148e41f4b71Sopenharmony_ci      console.error(`promise: generate ECC Key failed, error: ` + JSON.stringify(err));
149e41f4b71Sopenharmony_ci    })
150e41f4b71Sopenharmony_ci}
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ciasync function Sign(keyAlias: string, plaintext: string) {
153e41f4b71Sopenharmony_ci  let signProperties = GetEccSignProperties();
154e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
155e41f4b71Sopenharmony_ci    properties: signProperties,
156e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
157e41f4b71Sopenharmony_ci  }
158e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
159e41f4b71Sopenharmony_ci    .then((data) => {
160e41f4b71Sopenharmony_ci      handle = data.handle;
161e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
162e41f4b71Sopenharmony_ci      console.error(`promise: init sign failed, error: ` + JSON.stringify(err));
163e41f4b71Sopenharmony_ci    })
164e41f4b71Sopenharmony_ci  await huks.finishSession(handle, options)
165e41f4b71Sopenharmony_ci    .then((data) => {
166e41f4b71Sopenharmony_ci      console.info(`promise: sign success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
167e41f4b71Sopenharmony_ci      signature = data.outData as Uint8Array;
168e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
169e41f4b71Sopenharmony_ci      console.error(`promise: sign failed, error: ` + JSON.stringify(err));
170e41f4b71Sopenharmony_ci    })
171e41f4b71Sopenharmony_ci}
172e41f4b71Sopenharmony_ci
173e41f4b71Sopenharmony_ciasync function Verify(keyAlias: string, plaintext: string, signature: Uint8Array) {
174e41f4b71Sopenharmony_ci  let verifyProperties = GetEccVerifyProperties()
175e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
176e41f4b71Sopenharmony_ci    properties: verifyProperties,
177e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
178e41f4b71Sopenharmony_ci  }
179e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
180e41f4b71Sopenharmony_ci    .then((data) => {
181e41f4b71Sopenharmony_ci      handle = data.handle;
182e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
183e41f4b71Sopenharmony_ci      console.error(`promise: init verify failed, error: ` + JSON.stringify(err));
184e41f4b71Sopenharmony_ci    })
185e41f4b71Sopenharmony_ci  await huks.updateSession(handle, options)
186e41f4b71Sopenharmony_ci    .then((data) => {
187e41f4b71Sopenharmony_ci      console.info(`promise: update verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
188e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
189e41f4b71Sopenharmony_ci      console.error(`promise: update verify failed, error: ` + JSON.stringify(err));
190e41f4b71Sopenharmony_ci    })
191e41f4b71Sopenharmony_ci  options.inData = signature;
192e41f4b71Sopenharmony_ci  await huks.finishSession(handle, options)
193e41f4b71Sopenharmony_ci    .then((data) => {
194e41f4b71Sopenharmony_ci      console.info(`promise: verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
195e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
196e41f4b71Sopenharmony_ci      console.error(`promise: verify failed, error: ` + JSON.stringify(err));
197e41f4b71Sopenharmony_ci    })
198e41f4b71Sopenharmony_ci}
199e41f4b71Sopenharmony_ci
200e41f4b71Sopenharmony_ciasync function DeleteEccKey(keyAlias: string) {
201e41f4b71Sopenharmony_ci  let emptyOptions: huks.HuksOptions = {
202e41f4b71Sopenharmony_ci    properties: []
203e41f4b71Sopenharmony_ci  }
204e41f4b71Sopenharmony_ci  await huks.deleteKeyItem(keyAlias, emptyOptions)
205e41f4b71Sopenharmony_ci    .then((data) => {
206e41f4b71Sopenharmony_ci      console.info(`promise: delete data success`);
207e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
208e41f4b71Sopenharmony_ci      console.error(`promise: delete data failed`);
209e41f4b71Sopenharmony_ci    })
210e41f4b71Sopenharmony_ci}
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ciasync function testSignVerify() {
213e41f4b71Sopenharmony_ci  await GenerateEccKey(keyAlias);
214e41f4b71Sopenharmony_ci  await Sign(keyAlias, plaintext);
215e41f4b71Sopenharmony_ci  await Verify(keyAlias, plaintext, signature);
216e41f4b71Sopenharmony_ci  await DeleteEccKey(keyAlias);
217e41f4b71Sopenharmony_ci}
218e41f4b71Sopenharmony_ci```
219e41f4b71Sopenharmony_ci### SM2/SM3
220e41f4b71Sopenharmony_ci```ts
221e41f4b71Sopenharmony_ci/*
222e41f4b71Sopenharmony_ci * The key algorithm SM2 and digest algorithm SM3 are used.
223e41f4b71Sopenharmony_ci */
224e41f4b71Sopenharmony_ciimport { huks } from '@kit.UniversalKeystoreKit';
225e41f4b71Sopenharmony_ci
226e41f4b71Sopenharmony_cilet keyAlias = 'test_sm2KeyAlias';
227e41f4b71Sopenharmony_cilet handle: number;
228e41f4b71Sopenharmony_cilet plaintext = '123456';
229e41f4b71Sopenharmony_cilet signature: Uint8Array;
230e41f4b71Sopenharmony_ci
231e41f4b71Sopenharmony_ci
232e41f4b71Sopenharmony_cifunction StringToUint8Array(str: String) {
233e41f4b71Sopenharmony_ci  let arr: number[] = new Array();
234e41f4b71Sopenharmony_ci  for (let i = 0, j = str.length; i < j; ++i) {
235e41f4b71Sopenharmony_ci    arr.push(str.charCodeAt(i));
236e41f4b71Sopenharmony_ci  }
237e41f4b71Sopenharmony_ci  return new Uint8Array(arr);
238e41f4b71Sopenharmony_ci}
239e41f4b71Sopenharmony_ci
240e41f4b71Sopenharmony_ci
241e41f4b71Sopenharmony_cifunction Uint8ArrayToString(fileData: Uint8Array) {
242e41f4b71Sopenharmony_ci  let dataString = '';
243e41f4b71Sopenharmony_ci  for (let i = 0; i < fileData.length; i++) {
244e41f4b71Sopenharmony_ci    dataString += String.fromCharCode(fileData[i]);
245e41f4b71Sopenharmony_ci  }
246e41f4b71Sopenharmony_ci  return dataString;
247e41f4b71Sopenharmony_ci}
248e41f4b71Sopenharmony_ci
249e41f4b71Sopenharmony_ci
250e41f4b71Sopenharmony_cifunction GetSm2GenerateProperties() {
251e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
252e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
253e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_SM2
254e41f4b71Sopenharmony_ci  }, {
255e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
256e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
257e41f4b71Sopenharmony_ci  }, {
258e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
259e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
260e41f4b71Sopenharmony_ci    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
261e41f4b71Sopenharmony_ci  }, {
262e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
263e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SM3
264e41f4b71Sopenharmony_ci  }];
265e41f4b71Sopenharmony_ci  return properties;
266e41f4b71Sopenharmony_ci}
267e41f4b71Sopenharmony_ci
268e41f4b71Sopenharmony_cifunction GetSm2SignProperties() {
269e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
270e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
271e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_SM2
272e41f4b71Sopenharmony_ci  }, {
273e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
274e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
275e41f4b71Sopenharmony_ci  }, {
276e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
277e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN
278e41f4b71Sopenharmony_ci  }, {
279e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
280e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SM3
281e41f4b71Sopenharmony_ci  }];
282e41f4b71Sopenharmony_ci  return properties;
283e41f4b71Sopenharmony_ci}
284e41f4b71Sopenharmony_ci
285e41f4b71Sopenharmony_cifunction GetSm2VerifyProperties() {
286e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
287e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
288e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_SM2
289e41f4b71Sopenharmony_ci  }, {
290e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
291e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
292e41f4b71Sopenharmony_ci  }, {
293e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
294e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
295e41f4b71Sopenharmony_ci  }, {
296e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
297e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SM3
298e41f4b71Sopenharmony_ci  }];
299e41f4b71Sopenharmony_ci  return properties;
300e41f4b71Sopenharmony_ci}
301e41f4b71Sopenharmony_ci
302e41f4b71Sopenharmony_ciasync function GenerateSm2Key(keyAlias: string) {
303e41f4b71Sopenharmony_ci  let genProperties = GetSm2GenerateProperties();
304e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
305e41f4b71Sopenharmony_ci    properties: genProperties
306e41f4b71Sopenharmony_ci  }
307e41f4b71Sopenharmony_ci  await huks.generateKeyItem(keyAlias, options)
308e41f4b71Sopenharmony_ci    .then((data) => {
309e41f4b71Sopenharmony_ci      console.info(`promise: generate Sm2 Key success, data = ${JSON.stringify(data)}`);
310e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
311e41f4b71Sopenharmony_ci      console.error(`promise: generate Sm2 Key failed, error: ` + JSON.stringify(err));
312e41f4b71Sopenharmony_ci    })
313e41f4b71Sopenharmony_ci}
314e41f4b71Sopenharmony_ci
315e41f4b71Sopenharmony_ciasync function Sign(keyAlias: string, plaintext: string) {
316e41f4b71Sopenharmony_ci  let signProperties = GetSm2SignProperties();
317e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
318e41f4b71Sopenharmony_ci    properties: signProperties,
319e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
320e41f4b71Sopenharmony_ci  }
321e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
322e41f4b71Sopenharmony_ci    .then((data) => {
323e41f4b71Sopenharmony_ci      handle = data.handle;
324e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
325e41f4b71Sopenharmony_ci      console.error(`promise: init sign failed, error: ` + JSON.stringify(err));
326e41f4b71Sopenharmony_ci    })
327e41f4b71Sopenharmony_ci  await huks.finishSession(handle, options)
328e41f4b71Sopenharmony_ci    .then((data) => {
329e41f4b71Sopenharmony_ci      console.info(`promise: sign success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
330e41f4b71Sopenharmony_ci      signature = data.outData as Uint8Array;
331e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
332e41f4b71Sopenharmony_ci      console.error(`promise: sign failed, error: ` + JSON.stringify(err));
333e41f4b71Sopenharmony_ci    })
334e41f4b71Sopenharmony_ci}
335e41f4b71Sopenharmony_ci
336e41f4b71Sopenharmony_ciasync function Verify(keyAlias: string, plaintext: string, signature: Uint8Array) {
337e41f4b71Sopenharmony_ci  let verifyProperties = GetSm2VerifyProperties()
338e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
339e41f4b71Sopenharmony_ci    properties: verifyProperties,
340e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
341e41f4b71Sopenharmony_ci  }
342e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
343e41f4b71Sopenharmony_ci    .then((data) => {
344e41f4b71Sopenharmony_ci      handle = data.handle;
345e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
346e41f4b71Sopenharmony_ci      console.error(`promise: init verify failed, error: ` + JSON.stringify(err));
347e41f4b71Sopenharmony_ci    })
348e41f4b71Sopenharmony_ci  await huks.updateSession(handle, options)
349e41f4b71Sopenharmony_ci    .then((data) => {
350e41f4b71Sopenharmony_ci      console.info(`promise: update verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
351e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
352e41f4b71Sopenharmony_ci      console.error(`promise: update verify failed, error: ` + JSON.stringify(err));
353e41f4b71Sopenharmony_ci    })
354e41f4b71Sopenharmony_ci  options.inData = signature;
355e41f4b71Sopenharmony_ci  await huks.finishSession(handle, options)
356e41f4b71Sopenharmony_ci    .then((data) => {
357e41f4b71Sopenharmony_ci      console.info(`promise: verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
358e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
359e41f4b71Sopenharmony_ci      console.error(`promise: verify failed, error: ` + JSON.stringify(err));
360e41f4b71Sopenharmony_ci    })
361e41f4b71Sopenharmony_ci}
362e41f4b71Sopenharmony_ci
363e41f4b71Sopenharmony_ciasync function DeleteSm2Key(keyAlias: string) {
364e41f4b71Sopenharmony_ci  let emptyOptions: huks.HuksOptions = {
365e41f4b71Sopenharmony_ci    properties: []
366e41f4b71Sopenharmony_ci  }
367e41f4b71Sopenharmony_ci  await huks.deleteKeyItem(keyAlias, emptyOptions)
368e41f4b71Sopenharmony_ci    .then((data) => {
369e41f4b71Sopenharmony_ci      console.info(`promise: delete data success`);
370e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
371e41f4b71Sopenharmony_ci      console.error(`promise: delete data failed`);
372e41f4b71Sopenharmony_ci    })
373e41f4b71Sopenharmony_ci}
374e41f4b71Sopenharmony_ci
375e41f4b71Sopenharmony_ciexport async function testSignVerify() {
376e41f4b71Sopenharmony_ci  await GenerateSm2Key(keyAlias);
377e41f4b71Sopenharmony_ci  await Sign(keyAlias, plaintext);
378e41f4b71Sopenharmony_ci  await Verify(keyAlias, plaintext, signature);
379e41f4b71Sopenharmony_ci  await DeleteSm2Key(keyAlias);
380e41f4b71Sopenharmony_ci}
381e41f4b71Sopenharmony_ci```
382e41f4b71Sopenharmony_ci### RSA/SHA256/PSS
383e41f4b71Sopenharmony_ci```ts
384e41f4b71Sopenharmony_ci/*
385e41f4b71Sopenharmony_ci * The key algorithm RSA, digest algorithm SHA-256, and padding mode PSS are used.
386e41f4b71Sopenharmony_ci */
387e41f4b71Sopenharmony_ciimport { huks } from '@kit.UniversalKeystoreKit';
388e41f4b71Sopenharmony_ci
389e41f4b71Sopenharmony_cilet keyAlias = 'test_rsaKeyAlias';
390e41f4b71Sopenharmony_cilet handle: number;
391e41f4b71Sopenharmony_cilet plaintext = '123456';
392e41f4b71Sopenharmony_cilet signature: Uint8Array;
393e41f4b71Sopenharmony_ci
394e41f4b71Sopenharmony_cifunction StringToUint8Array(str: string) {
395e41f4b71Sopenharmony_ci  let arr: number[] = [];
396e41f4b71Sopenharmony_ci  for (let i = 0, j = str.length; i < j; ++i) {
397e41f4b71Sopenharmony_ci    arr.push(str.charCodeAt(i));
398e41f4b71Sopenharmony_ci  }
399e41f4b71Sopenharmony_ci  return new Uint8Array(arr);
400e41f4b71Sopenharmony_ci}
401e41f4b71Sopenharmony_ci
402e41f4b71Sopenharmony_cifunction Uint8ArrayToString(fileData: Uint8Array) {
403e41f4b71Sopenharmony_ci  let dataString = '';
404e41f4b71Sopenharmony_ci  for (let i = 0; i < fileData.length; i++) {
405e41f4b71Sopenharmony_ci    dataString += String.fromCharCode(fileData[i]);
406e41f4b71Sopenharmony_ci  }
407e41f4b71Sopenharmony_ci  return dataString;
408e41f4b71Sopenharmony_ci}
409e41f4b71Sopenharmony_ci
410e41f4b71Sopenharmony_cifunction GetRsaGenerateProperties() {
411e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
412e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
413e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_RSA
414e41f4b71Sopenharmony_ci  }, {
415e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
416e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
417e41f4b71Sopenharmony_ci  }, {
418e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
419e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
420e41f4b71Sopenharmony_ci    huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
421e41f4b71Sopenharmony_ci  }, {
422e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PADDING,
423e41f4b71Sopenharmony_ci    value: huks.HuksKeyPadding.HUKS_PADDING_PSS
424e41f4b71Sopenharmony_ci  }, {
425e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
426e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
427e41f4b71Sopenharmony_ci  }];
428e41f4b71Sopenharmony_ci  return properties;
429e41f4b71Sopenharmony_ci}
430e41f4b71Sopenharmony_ci
431e41f4b71Sopenharmony_cifunction GetRsaSignProperties() {
432e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
433e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
434e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_RSA
435e41f4b71Sopenharmony_ci  }, {
436e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PADDING,
437e41f4b71Sopenharmony_ci    value: huks.HuksKeyPadding.HUKS_PADDING_PSS
438e41f4b71Sopenharmony_ci  }, {
439e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
440e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
441e41f4b71Sopenharmony_ci  }, {
442e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
443e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN
444e41f4b71Sopenharmony_ci  }];
445e41f4b71Sopenharmony_ci  return properties;
446e41f4b71Sopenharmony_ci}
447e41f4b71Sopenharmony_ci
448e41f4b71Sopenharmony_cifunction GetRsaVerifyProperties() {
449e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
450e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
451e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_RSA
452e41f4b71Sopenharmony_ci  }, {
453e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PADDING,
454e41f4b71Sopenharmony_ci    value: huks.HuksKeyPadding.HUKS_PADDING_PSS
455e41f4b71Sopenharmony_ci  }, {
456e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
457e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
458e41f4b71Sopenharmony_ci  }, {
459e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
460e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
461e41f4b71Sopenharmony_ci  }];
462e41f4b71Sopenharmony_ci  return properties;
463e41f4b71Sopenharmony_ci}
464e41f4b71Sopenharmony_ci
465e41f4b71Sopenharmony_ciasync function GenerateRsaKey(keyAlias: string) {
466e41f4b71Sopenharmony_ci  let genProperties = GetRsaGenerateProperties();
467e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
468e41f4b71Sopenharmony_ci    properties: genProperties
469e41f4b71Sopenharmony_ci  };
470e41f4b71Sopenharmony_ci  await huks.generateKeyItem(keyAlias, options)
471e41f4b71Sopenharmony_ci    .then((data) => {
472e41f4b71Sopenharmony_ci      console.info(`promise: generate RSA Key success, data = ${JSON.stringify(data)}`);
473e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
474e41f4b71Sopenharmony_ci      console.error(`promise: generate RSA Key failed, error: ` + JSON.stringify(err));
475e41f4b71Sopenharmony_ci    });
476e41f4b71Sopenharmony_ci}
477e41f4b71Sopenharmony_ci
478e41f4b71Sopenharmony_ciasync function Sign(keyAlias: string, plaintext: string) {
479e41f4b71Sopenharmony_ci  let signProperties = GetRsaSignProperties();
480e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
481e41f4b71Sopenharmony_ci    properties: signProperties,
482e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
483e41f4b71Sopenharmony_ci  }
484e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
485e41f4b71Sopenharmony_ci    .then((data) => {
486e41f4b71Sopenharmony_ci      handle = data.handle;
487e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
488e41f4b71Sopenharmony_ci      console.error(`promise: init sign failed, error: ` + JSON.stringify(err));
489e41f4b71Sopenharmony_ci      return;
490e41f4b71Sopenharmony_ci    });
491e41f4b71Sopenharmony_ci
492e41f4b71Sopenharmony_ci  if (handle !== undefined) {
493e41f4b71Sopenharmony_ci    await huks.finishSession(handle, options)
494e41f4b71Sopenharmony_ci      .then((data) => {
495e41f4b71Sopenharmony_ci        console.info(`promise: sign success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
496e41f4b71Sopenharmony_ci        signature = data.outData as Uint8Array;
497e41f4b71Sopenharmony_ci      }).catch((err: Error) => {
498e41f4b71Sopenharmony_ci        console.error(`promise: sign failed, error: ` + JSON.stringify(err));
499e41f4b71Sopenharmony_ci      });
500e41f4b71Sopenharmony_ci  }
501e41f4b71Sopenharmony_ci}
502e41f4b71Sopenharmony_ci
503e41f4b71Sopenharmony_ciasync function Verify(keyAlias: string, plaintext: string, signature: Uint8Array) {
504e41f4b71Sopenharmony_ci  let verifyProperties = GetRsaVerifyProperties();
505e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
506e41f4b71Sopenharmony_ci    properties: verifyProperties,
507e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
508e41f4b71Sopenharmony_ci  }
509e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
510e41f4b71Sopenharmony_ci    .then((data) => {
511e41f4b71Sopenharmony_ci      handle = data.handle;
512e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
513e41f4b71Sopenharmony_ci      console.error(`promise: init verify failed, error: ` + JSON.stringify(err));
514e41f4b71Sopenharmony_ci      return;
515e41f4b71Sopenharmony_ci    });
516e41f4b71Sopenharmony_ci
517e41f4b71Sopenharmony_ci  if (handle !== undefined) {
518e41f4b71Sopenharmony_ci    await huks.updateSession(handle, options)
519e41f4b71Sopenharmony_ci      .then((data) => {
520e41f4b71Sopenharmony_ci        console.info(`promise: update verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
521e41f4b71Sopenharmony_ci      }).catch((err: Error) => {
522e41f4b71Sopenharmony_ci        console.error(`promise: update verify failed, error: ` + JSON.stringify(err));
523e41f4b71Sopenharmony_ci      });
524e41f4b71Sopenharmony_ci
525e41f4b71Sopenharmony_ci    options.inData = signature;
526e41f4b71Sopenharmony_ci    await huks.finishSession(handle, options)
527e41f4b71Sopenharmony_ci      .then((data) => {
528e41f4b71Sopenharmony_ci        console.info(`promise: verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
529e41f4b71Sopenharmony_ci      }).catch((err: Error) => {
530e41f4b71Sopenharmony_ci        console.error(`promise: verify failed, error: ` + JSON.stringify(err));
531e41f4b71Sopenharmony_ci      });
532e41f4b71Sopenharmony_ci  }
533e41f4b71Sopenharmony_ci}
534e41f4b71Sopenharmony_ci
535e41f4b71Sopenharmony_ciasync function DeleteRsaKey(keyAlias: string) {
536e41f4b71Sopenharmony_ci  let emptyOptions: huks.HuksOptions = {
537e41f4b71Sopenharmony_ci    properties: []
538e41f4b71Sopenharmony_ci  }
539e41f4b71Sopenharmony_ci  await huks.deleteKeyItem(keyAlias, emptyOptions)
540e41f4b71Sopenharmony_ci    .then((data) => {
541e41f4b71Sopenharmony_ci      console.info(`promise: delete data success`);
542e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
543e41f4b71Sopenharmony_ci      console.error(`promise: delete data failed`);
544e41f4b71Sopenharmony_ci    });
545e41f4b71Sopenharmony_ci}
546e41f4b71Sopenharmony_ci
547e41f4b71Sopenharmony_ciexport async function testSignVerify() {
548e41f4b71Sopenharmony_ci  await GenerateRsaKey(keyAlias);
549e41f4b71Sopenharmony_ci  await Sign(keyAlias, plaintext);
550e41f4b71Sopenharmony_ci  await Verify(keyAlias, plaintext, signature);
551e41f4b71Sopenharmony_ci  await DeleteRsaKey(keyAlias);
552e41f4b71Sopenharmony_ci}
553e41f4b71Sopenharmony_ci```
554e41f4b71Sopenharmony_ci### RSA/SHA256/PKCS1_V1_5
555e41f4b71Sopenharmony_ci```ts
556e41f4b71Sopenharmony_ci/*
557e41f4b71Sopenharmony_ci * The key algorithm RSA, digest algorithm SHA-256, and padding mode PKCS #1 v1.5 are used.
558e41f4b71Sopenharmony_ci */
559e41f4b71Sopenharmony_ciimport { huks } from '@kit.UniversalKeystoreKit';
560e41f4b71Sopenharmony_ci
561e41f4b71Sopenharmony_cilet keyAlias = 'test_rsaKeyAlias';
562e41f4b71Sopenharmony_cilet handle: number;
563e41f4b71Sopenharmony_cilet plaintext = '123456';
564e41f4b71Sopenharmony_cilet signature: Uint8Array;
565e41f4b71Sopenharmony_ci
566e41f4b71Sopenharmony_cifunction StringToUint8Array(str: String) {
567e41f4b71Sopenharmony_ci  let arr: number[] = new Array();
568e41f4b71Sopenharmony_ci  for (let i = 0, j = str.length; i < j; ++i) {
569e41f4b71Sopenharmony_ci    arr.push(str.charCodeAt(i));
570e41f4b71Sopenharmony_ci  }
571e41f4b71Sopenharmony_ci  return new Uint8Array(arr);
572e41f4b71Sopenharmony_ci}
573e41f4b71Sopenharmony_ci
574e41f4b71Sopenharmony_cifunction Uint8ArrayToString(fileData: Uint8Array) {
575e41f4b71Sopenharmony_ci  let dataString = '';
576e41f4b71Sopenharmony_ci  for (let i = 0; i < fileData.length; i++) {
577e41f4b71Sopenharmony_ci    dataString += String.fromCharCode(fileData[i]);
578e41f4b71Sopenharmony_ci  }
579e41f4b71Sopenharmony_ci  return dataString;
580e41f4b71Sopenharmony_ci}
581e41f4b71Sopenharmony_ci
582e41f4b71Sopenharmony_cifunction GetRsaGenerateProperties() {
583e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [
584e41f4b71Sopenharmony_ci    { tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_RSA },
585e41f4b71Sopenharmony_ci    { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048 },
586e41f4b71Sopenharmony_ci    {
587e41f4b71Sopenharmony_ci      tag: huks.HuksTag.HUKS_TAG_PURPOSE,
588e41f4b71Sopenharmony_ci      value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
589e41f4b71Sopenharmony_ci    },
590e41f4b71Sopenharmony_ci    { tag: huks.HuksTag.HUKS_TAG_PADDING, value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5 },
591e41f4b71Sopenharmony_ci    { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }
592e41f4b71Sopenharmony_ci  ];
593e41f4b71Sopenharmony_ci  return properties;
594e41f4b71Sopenharmony_ci}
595e41f4b71Sopenharmony_ci
596e41f4b71Sopenharmony_cifunction GetRsaSignProperties() {
597e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
598e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
599e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_RSA
600e41f4b71Sopenharmony_ci  }, {
601e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
602e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
603e41f4b71Sopenharmony_ci  }, {
604e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
605e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN
606e41f4b71Sopenharmony_ci  }, {
607e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PADDING,
608e41f4b71Sopenharmony_ci    value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5
609e41f4b71Sopenharmony_ci  }, {
610e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
611e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
612e41f4b71Sopenharmony_ci  }];
613e41f4b71Sopenharmony_ci  return properties;
614e41f4b71Sopenharmony_ci}
615e41f4b71Sopenharmony_ci
616e41f4b71Sopenharmony_cifunction GetRsaVerifyProperties() {
617e41f4b71Sopenharmony_ci  let properties: Array<huks.HuksParam> = [{
618e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
619e41f4b71Sopenharmony_ci    value: huks.HuksKeyAlg.HUKS_ALG_RSA
620e41f4b71Sopenharmony_ci  }, {
621e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
622e41f4b71Sopenharmony_ci    value: huks.HuksKeySize.HUKS_RSA_KEY_SIZE_2048
623e41f4b71Sopenharmony_ci  }, {
624e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PURPOSE,
625e41f4b71Sopenharmony_ci    value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
626e41f4b71Sopenharmony_ci  }, {
627e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_PADDING,
628e41f4b71Sopenharmony_ci    value: huks.HuksKeyPadding.HUKS_PADDING_PKCS1_V1_5
629e41f4b71Sopenharmony_ci  }, {
630e41f4b71Sopenharmony_ci    tag: huks.HuksTag.HUKS_TAG_DIGEST,
631e41f4b71Sopenharmony_ci    value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
632e41f4b71Sopenharmony_ci  }];
633e41f4b71Sopenharmony_ci  return properties;
634e41f4b71Sopenharmony_ci}
635e41f4b71Sopenharmony_ci
636e41f4b71Sopenharmony_ciasync function GenerateRsaKey(keyAlias: string) {
637e41f4b71Sopenharmony_ci  let genProperties = GetRsaGenerateProperties();
638e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
639e41f4b71Sopenharmony_ci    properties: genProperties
640e41f4b71Sopenharmony_ci  }
641e41f4b71Sopenharmony_ci  await huks.generateKeyItem(keyAlias, options)
642e41f4b71Sopenharmony_ci    .then((data) => {
643e41f4b71Sopenharmony_ci      console.info(`promise: generate RSA Key success, data = ${JSON.stringify(data)}`);
644e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
645e41f4b71Sopenharmony_ci      console.error(`promise: generate RSA Key failed, error: ` + JSON.stringify(err));
646e41f4b71Sopenharmony_ci    })
647e41f4b71Sopenharmony_ci}
648e41f4b71Sopenharmony_ci
649e41f4b71Sopenharmony_ciasync function Sign(keyAlias: string, plaintext: string) {
650e41f4b71Sopenharmony_ci  let signProperties = GetRsaSignProperties();
651e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
652e41f4b71Sopenharmony_ci    properties: signProperties,
653e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
654e41f4b71Sopenharmony_ci  }
655e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
656e41f4b71Sopenharmony_ci    .then((data) => {
657e41f4b71Sopenharmony_ci      handle = data.handle;
658e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
659e41f4b71Sopenharmony_ci      console.error(`promise: init sign failed, error: ` + JSON.stringify(err));
660e41f4b71Sopenharmony_ci    })
661e41f4b71Sopenharmony_ci  await huks.finishSession(handle, options)
662e41f4b71Sopenharmony_ci    .then((data) => {
663e41f4b71Sopenharmony_ci      console.info(`promise: sign success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
664e41f4b71Sopenharmony_ci      signature = data.outData as Uint8Array;
665e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
666e41f4b71Sopenharmony_ci      console.error(`promise: sign failed, error: ` + JSON.stringify(err));
667e41f4b71Sopenharmony_ci    })
668e41f4b71Sopenharmony_ci}
669e41f4b71Sopenharmony_ci
670e41f4b71Sopenharmony_ciasync function Verify(keyAlias: string, plaintext: string, signature: Uint8Array) {
671e41f4b71Sopenharmony_ci  let verifyProperties = GetRsaVerifyProperties()
672e41f4b71Sopenharmony_ci  let options: huks.HuksOptions = {
673e41f4b71Sopenharmony_ci    properties: verifyProperties,
674e41f4b71Sopenharmony_ci    inData: StringToUint8Array(plaintext)
675e41f4b71Sopenharmony_ci  }
676e41f4b71Sopenharmony_ci  await huks.initSession(keyAlias, options)
677e41f4b71Sopenharmony_ci    .then((data) => {
678e41f4b71Sopenharmony_ci      handle = data.handle;
679e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
680e41f4b71Sopenharmony_ci      console.error(`promise: init verify failed, error: ` + JSON.stringify(err));
681e41f4b71Sopenharmony_ci    })
682e41f4b71Sopenharmony_ci  await huks.updateSession(handle, options)
683e41f4b71Sopenharmony_ci    .then((data) => {
684e41f4b71Sopenharmony_ci      console.info(`promise: update verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
685e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
686e41f4b71Sopenharmony_ci      console.error(`promise: update verify failed, error: ` + JSON.stringify(err));
687e41f4b71Sopenharmony_ci    })
688e41f4b71Sopenharmony_ci  options.inData = signature;
689e41f4b71Sopenharmony_ci  await huks.finishSession(handle, options)
690e41f4b71Sopenharmony_ci    .then((data) => {
691e41f4b71Sopenharmony_ci      console.info(`promise: verify success, data is ` + Uint8ArrayToString(data.outData as Uint8Array));
692e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
693e41f4b71Sopenharmony_ci      console.error(`promise: verify failed, error: ` + JSON.stringify(err));
694e41f4b71Sopenharmony_ci    })
695e41f4b71Sopenharmony_ci}
696e41f4b71Sopenharmony_ci
697e41f4b71Sopenharmony_ciasync function DeleteRsaKey(keyAlias: string) {
698e41f4b71Sopenharmony_ci  let emptyOptions: huks.HuksOptions = {
699e41f4b71Sopenharmony_ci    properties: []
700e41f4b71Sopenharmony_ci  }
701e41f4b71Sopenharmony_ci  await huks.deleteKeyItem(keyAlias, emptyOptions)
702e41f4b71Sopenharmony_ci    .then((data) => {
703e41f4b71Sopenharmony_ci      console.info(`promise: delete data success`);
704e41f4b71Sopenharmony_ci    }).catch((err: Error) => {
705e41f4b71Sopenharmony_ci      console.error(`promise: delete data failed`);
706e41f4b71Sopenharmony_ci    })
707e41f4b71Sopenharmony_ci}
708e41f4b71Sopenharmony_ci
709e41f4b71Sopenharmony_ciexport async function testSignVerify() {
710e41f4b71Sopenharmony_ci  await GenerateRsaKey(keyAlias);
711e41f4b71Sopenharmony_ci  await Sign(keyAlias, plaintext);
712e41f4b71Sopenharmony_ci  await Verify(keyAlias, plaintext, signature);
713e41f4b71Sopenharmony_ci  await DeleteRsaKey(keyAlias);
714e41f4b71Sopenharmony_ci}
715e41f4b71Sopenharmony_ci```
716