1526fd984Sopenharmony_ci/*
2526fd984Sopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3526fd984Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4526fd984Sopenharmony_ci * you may not use this file except in compliance with the License.
5526fd984Sopenharmony_ci * You may obtain a copy of the License at
6526fd984Sopenharmony_ci *
7526fd984Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8526fd984Sopenharmony_ci *
9526fd984Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10526fd984Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11526fd984Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12526fd984Sopenharmony_ci * See the License for the specific language governing permissions and
13526fd984Sopenharmony_ci * limitations under the License.
14526fd984Sopenharmony_ci */
15526fd984Sopenharmony_ci
16526fd984Sopenharmony_ci#include "huks_napi.h"
17526fd984Sopenharmony_ci
18526fd984Sopenharmony_ci#include "napi/native_api.h"
19526fd984Sopenharmony_ci#include "napi/native_node_api.h"
20526fd984Sopenharmony_ci
21526fd984Sopenharmony_ci#include "hks_type.h"
22526fd984Sopenharmony_ci#include "huks_napi_abort.h"
23526fd984Sopenharmony_ci#include "huks_napi_abort_session.h"
24526fd984Sopenharmony_ci#include "huks_napi_attest_key_item_as_user.h"
25526fd984Sopenharmony_ci#include "huks_napi_attest_key_item.h"
26526fd984Sopenharmony_ci#include "huks_napi_delete_key.h"
27526fd984Sopenharmony_ci#include "huks_napi_delete_key_item_as_user.h"
28526fd984Sopenharmony_ci#include "huks_napi_delete_key_item.h"
29526fd984Sopenharmony_ci#include "huks_napi_export_key.h"
30526fd984Sopenharmony_ci#include "huks_napi_export_key_item_as_user.h"
31526fd984Sopenharmony_ci#include "huks_napi_export_key_item.h"
32526fd984Sopenharmony_ci#include "huks_napi_generate_key.h"
33526fd984Sopenharmony_ci#include "huks_napi_generate_key_item_as_user.h"
34526fd984Sopenharmony_ci#include "huks_napi_generate_key_item.h"
35526fd984Sopenharmony_ci#include "huks_napi_get_key_item_properties_as_user.h"
36526fd984Sopenharmony_ci#include "huks_napi_get_key_item_properties.h"
37526fd984Sopenharmony_ci#include "huks_napi_get_key_properties.h"
38526fd984Sopenharmony_ci#include "huks_napi_get_sdk_version.h"
39526fd984Sopenharmony_ci#include "huks_napi_has_key_item_as_user.h"
40526fd984Sopenharmony_ci#include "huks_napi_has_key_item.h"
41526fd984Sopenharmony_ci#include "huks_napi_import_key.h"
42526fd984Sopenharmony_ci#include "huks_napi_import_key_item_as_user.h"
43526fd984Sopenharmony_ci#include "huks_napi_import_key_item.h"
44526fd984Sopenharmony_ci#include "huks_napi_import_wrapped_key_item_as_user.h"
45526fd984Sopenharmony_ci#include "huks_napi_import_wrapped_key_item.h"
46526fd984Sopenharmony_ci#include "huks_napi_init.h"
47526fd984Sopenharmony_ci#include "huks_napi_init_session_as_user.h"
48526fd984Sopenharmony_ci#include "huks_napi_init_session.h"
49526fd984Sopenharmony_ci#include "huks_napi_is_key_exist.h"
50526fd984Sopenharmony_ci#include "huks_napi_is_key_item_exist.h"
51526fd984Sopenharmony_ci#include "huks_napi_list_aliases.h"
52526fd984Sopenharmony_ci#include "huks_napi_update_finish.h"
53526fd984Sopenharmony_ci#include "huks_napi_update_finish_session.h"
54526fd984Sopenharmony_ci
55526fd984Sopenharmony_cinamespace HuksNapi {
56526fd984Sopenharmony_ciinline void AddInt32Property(napi_env env, napi_value object, const char *name, int32_t value)
57526fd984Sopenharmony_ci{
58526fd984Sopenharmony_ci    napi_value property = nullptr;
59526fd984Sopenharmony_ci    NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, value, &property));
60526fd984Sopenharmony_ci    NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, object, name, property));
61526fd984Sopenharmony_ci}
62526fd984Sopenharmony_ci
63526fd984Sopenharmony_cistatic void AddHuksTagPart1(napi_env env, napi_value tag)
64526fd984Sopenharmony_ci{
65526fd984Sopenharmony_ci    /* Invalid TAG */
66526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_INVALID", HKS_TAG_INVALID);
67526fd984Sopenharmony_ci
68526fd984Sopenharmony_ci    /* Base algrithom TAG: 1 - 200 */
69526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ALGORITHM", HKS_TAG_ALGORITHM);
70526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_PURPOSE", HKS_TAG_PURPOSE);
71526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_SIZE", HKS_TAG_KEY_SIZE);
72526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_DIGEST", HKS_TAG_DIGEST);
73526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_PADDING", HKS_TAG_PADDING);
74526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_BLOCK_MODE", HKS_TAG_BLOCK_MODE);
75526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_TYPE", HKS_TAG_KEY_TYPE);
76526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ASSOCIATED_DATA", HKS_TAG_ASSOCIATED_DATA);
77526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_NONCE", HKS_TAG_NONCE);
78526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IV", HKS_TAG_IV);
79526fd984Sopenharmony_ci
80526fd984Sopenharmony_ci    /* Key derivation TAG */
81526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_INFO", HKS_TAG_INFO);
82526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_SALT", HKS_TAG_SALT);
83526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_PWD", HKS_TAG_PWD);
84526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ITERATION", HKS_TAG_ITERATION);
85526fd984Sopenharmony_ci
86526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_GENERATE_TYPE", HKS_TAG_KEY_GENERATE_TYPE);
87526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_DERIVE_MAIN_KEY", HKS_TAG_DERIVE_MAIN_KEY);
88526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_DERIVE_FACTOR", HKS_TAG_DERIVE_FACTOR);
89526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_DERIVE_ALG", HKS_TAG_DERIVE_ALG);
90526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AGREE_ALG", HKS_TAG_AGREE_ALG);
91526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS", HKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS);
92526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS", HKS_TAG_AGREE_PRIVATE_KEY_ALIAS);
93526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AGREE_PUBLIC_KEY", HKS_TAG_AGREE_PUBLIC_KEY);
94526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_ALIAS", HKS_TAG_KEY_ALIAS);
95526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_DERIVE_KEY_SIZE", HKS_TAG_DERIVE_KEY_SIZE);
96526fd984Sopenharmony_ci
97526fd984Sopenharmony_ci    /*
98526fd984Sopenharmony_ci     * Key authentication related TAG: 201 - 300
99526fd984Sopenharmony_ci     *
100526fd984Sopenharmony_ci     * Start of validity
101526fd984Sopenharmony_ci     */
102526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ACTIVE_DATETIME", HKS_TAG_ACTIVE_DATETIME);
103526fd984Sopenharmony_ci
104526fd984Sopenharmony_ci    /* Date when new "messages" should not be created. */
105526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ORIGINATION_EXPIRE_DATETIME", HKS_TAG_ORIGINATION_EXPIRE_DATETIME);
106526fd984Sopenharmony_ci
107526fd984Sopenharmony_ci    /* Date when existing "messages" should not be used. */
108526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_USAGE_EXPIRE_DATETIME", HKS_TAG_USAGE_EXPIRE_DATETIME);
109526fd984Sopenharmony_ci
110526fd984Sopenharmony_ci    /* Key creation time */
111526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_CREATION_DATETIME", HKS_TAG_CREATION_DATETIME);
112526fd984Sopenharmony_ci
113526fd984Sopenharmony_ci    /* Other authentication related TAG: 301 - 500 */
114526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ALL_USERS", HKS_TAG_ALL_USERS);
115526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_USER_ID", HKS_TAG_USER_ID);
116526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_NO_AUTH_REQUIRED", HKS_TAG_NO_AUTH_REQUIRED);
117526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_USER_AUTH_TYPE", HKS_TAG_USER_AUTH_TYPE);
118526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AUTH_TIMEOUT", HKS_TAG_AUTH_TIMEOUT);
119526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AUTH_TOKEN", HKS_TAG_AUTH_TOKEN);
120526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AUTH_STORAGE_LEVEL", HKS_TAG_AUTH_STORAGE_LEVEL);
121526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_USER_AUTH_MODE", HKS_TAG_USER_AUTH_MODE);
122526fd984Sopenharmony_ci}
123526fd984Sopenharmony_ci
124526fd984Sopenharmony_cistatic void AddHuksTagPart2(napi_env env, napi_value tag)
125526fd984Sopenharmony_ci{
126526fd984Sopenharmony_ci    /* Attestation related TAG: 501 - 600 */
127526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_CHALLENGE", HKS_TAG_ATTESTATION_CHALLENGE);
128526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_APPLICATION_ID", HKS_TAG_ATTESTATION_APPLICATION_ID);
129526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_BRAND", HKS_TAG_ATTESTATION_ID_BRAND);
130526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_DEVICE", HKS_TAG_ATTESTATION_ID_DEVICE);
131526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_PRODUCT", HKS_TAG_ATTESTATION_ID_PRODUCT);
132526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_SERIAL", HKS_TAG_ATTESTATION_ID_SERIAL);
133526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_IMEI", HKS_TAG_ATTESTATION_ID_IMEI);
134526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_MEID", HKS_TAG_ATTESTATION_ID_MEID);
135526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_MANUFACTURER", HKS_TAG_ATTESTATION_ID_MANUFACTURER);
136526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_MODEL", HKS_TAG_ATTESTATION_ID_MODEL);
137526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_ALIAS", HKS_TAG_ATTESTATION_ID_ALIAS);
138526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_SOCID", HKS_TAG_ATTESTATION_ID_SOCID);
139526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_UDID", HKS_TAG_ATTESTATION_ID_UDID);
140526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO", HKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO);
141526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ATTESTATION_ID_VERSION_INFO", HKS_TAG_ATTESTATION_ID_VERSION_INFO);
142526fd984Sopenharmony_ci
143526fd984Sopenharmony_ci    /*
144526fd984Sopenharmony_ci     * Other reserved TAG: 601 - 1000
145526fd984Sopenharmony_ci     *
146526fd984Sopenharmony_ci     * Extention TAG: 1001 - 9999
147526fd984Sopenharmony_ci     */
148526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IS_KEY_ALIAS", HKS_TAG_IS_KEY_ALIAS);
149526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_STORAGE_FLAG", HKS_TAG_KEY_STORAGE_FLAG);
150526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IS_ALLOWED_WRAP", HKS_TAG_IS_ALLOWED_WRAP);
151526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_WRAP_TYPE", HKS_TAG_KEY_WRAP_TYPE);
152526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_AUTH_ID", HKS_TAG_KEY_AUTH_ID);
153526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_ROLE", HKS_TAG_KEY_ROLE);
154526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_FLAG", HKS_TAG_KEY_FLAG);
155526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IS_ASYNCHRONIZED", HKS_TAG_IS_ASYNCHRONIZED);
156526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_SECURE_KEY_ALIAS", HKS_TAG_SECURE_KEY_ALIAS);
157526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_SECURE_KEY_UUID", HKS_TAG_SECURE_KEY_UUID);
158526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_DOMAIN", HKS_TAG_KEY_DOMAIN);
159526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IS_DEVICE_PASSWORD_SET", HKS_TAG_IS_DEVICE_PASSWORD_SET);
160526fd984Sopenharmony_ci
161526fd984Sopenharmony_ci    /* Inner-use TAG: 10001 - 10999 */
162526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_PROCESS_NAME", HKS_TAG_PROCESS_NAME);
163526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_PACKAGE_NAME", HKS_TAG_PACKAGE_NAME);
164526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ACCESS_TIME", HKS_TAG_ACCESS_TIME);
165526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_USES_TIME", HKS_TAG_USES_TIME);
166526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_CRYPTO_CTX", HKS_TAG_CRYPTO_CTX);
167526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY", HKS_TAG_KEY);
168526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_VERSION", HKS_TAG_KEY_VERSION);
169526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_PAYLOAD_LEN", HKS_TAG_PAYLOAD_LEN);
170526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_AE_TAG", HKS_TAG_AE_TAG);
171526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IS_KEY_HANDLE", HKS_TAG_IS_KEY_HANDLE);
172526fd984Sopenharmony_ci}
173526fd984Sopenharmony_ci
174526fd984Sopenharmony_cistatic void AddHuksTagPart3(napi_env env, napi_value tag)
175526fd984Sopenharmony_ci{
176526fd984Sopenharmony_ci    /* Os version related TAG */
177526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_OS_VERSION", HKS_TAG_OS_VERSION);
178526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_OS_PATCHLEVEL", HKS_TAG_OS_PATCHLEVEL);
179526fd984Sopenharmony_ci
180526fd984Sopenharmony_ci    /*
181526fd984Sopenharmony_ci     * Reversed TAGs for SOTER: 11000 - 12000
182526fd984Sopenharmony_ci     *
183526fd984Sopenharmony_ci     * Other TAGs: 20001 - N
184526fd984Sopenharmony_ci     * TAGs used for paramSetOut
185526fd984Sopenharmony_ci     */
186526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_SYMMETRIC_KEY_DATA", HKS_TAG_SYMMETRIC_KEY_DATA);
187526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA", HKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA);
188526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA", HKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA);
189526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_IMPORT_KEY_TYPE", HKS_TAG_IMPORT_KEY_TYPE);
190526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_UNWRAP_ALGORITHM_SUITE", HKS_TAG_UNWRAP_ALGORITHM_SUITE);
191526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_DERIVED_AGREED_KEY_STORAGE_FLAG", HKS_TAG_DERIVE_AGREE_KEY_STORAGE_FLAG);
192526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_RSA_PSS_SALT_LEN_TYPE", HKS_TAG_RSA_PSS_SALT_LEN_TYPE);
193526fd984Sopenharmony_ci
194526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_AUTH_ACCESS_TYPE", HKS_TAG_KEY_AUTH_ACCESS_TYPE);
195526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_SECURE_SIGN_TYPE", HKS_TAG_KEY_SECURE_SIGN_TYPE);
196526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_CHALLENGE_TYPE", HKS_TAG_CHALLENGE_TYPE);
197526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_CHALLENGE_POS", HKS_TAG_CHALLENGE_POS);
198526fd984Sopenharmony_ci    AddInt32Property(env, tag, "HUKS_TAG_KEY_AUTH_PURPOSE", HKS_TAG_KEY_AUTH_PURPOSE);
199526fd984Sopenharmony_ci}
200526fd984Sopenharmony_ci
201526fd984Sopenharmony_cistatic napi_value CreateHuksTag(napi_env env)
202526fd984Sopenharmony_ci{
203526fd984Sopenharmony_ci    napi_value tag = nullptr;
204526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &tag));
205526fd984Sopenharmony_ci
206526fd984Sopenharmony_ci    AddHuksTagPart1(env, tag);
207526fd984Sopenharmony_ci    AddHuksTagPart2(env, tag);
208526fd984Sopenharmony_ci    AddHuksTagPart3(env, tag);
209526fd984Sopenharmony_ci
210526fd984Sopenharmony_ci    return tag;
211526fd984Sopenharmony_ci}
212526fd984Sopenharmony_ci
213526fd984Sopenharmony_cistatic napi_value CreateHuksKeySize(napi_env env)
214526fd984Sopenharmony_ci{
215526fd984Sopenharmony_ci    napi_value keySize = nullptr;
216526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keySize));
217526fd984Sopenharmony_ci
218526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_RSA_KEY_SIZE_512", HKS_RSA_KEY_SIZE_512);
219526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_RSA_KEY_SIZE_768", HKS_RSA_KEY_SIZE_768);
220526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_RSA_KEY_SIZE_1024", HKS_RSA_KEY_SIZE_1024);
221526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_RSA_KEY_SIZE_2048", HKS_RSA_KEY_SIZE_2048);
222526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_RSA_KEY_SIZE_3072", HKS_RSA_KEY_SIZE_3072);
223526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_RSA_KEY_SIZE_4096", HKS_RSA_KEY_SIZE_4096);
224526fd984Sopenharmony_ci
225526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_ECC_KEY_SIZE_224", HKS_ECC_KEY_SIZE_224);
226526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_ECC_KEY_SIZE_256", HKS_ECC_KEY_SIZE_256);
227526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_ECC_KEY_SIZE_384", HKS_ECC_KEY_SIZE_384);
228526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_ECC_KEY_SIZE_521", HKS_ECC_KEY_SIZE_521);
229526fd984Sopenharmony_ci
230526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_AES_KEY_SIZE_128", HKS_AES_KEY_SIZE_128);
231526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_AES_KEY_SIZE_192", HKS_AES_KEY_SIZE_192);
232526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_AES_KEY_SIZE_256", HKS_AES_KEY_SIZE_256);
233526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_AES_KEY_SIZE_512", HKS_AES_KEY_SIZE_512);
234526fd984Sopenharmony_ci
235526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_CURVE25519_KEY_SIZE_256", HKS_CURVE25519_KEY_SIZE_256);
236526fd984Sopenharmony_ci
237526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_DH_KEY_SIZE_2048", HKS_DH_KEY_SIZE_2048);
238526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_DH_KEY_SIZE_3072", HKS_DH_KEY_SIZE_3072);
239526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_DH_KEY_SIZE_4096", HKS_DH_KEY_SIZE_4096);
240526fd984Sopenharmony_ci
241526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_SM2_KEY_SIZE_256", HKS_SM2_KEY_SIZE_256);
242526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_SM4_KEY_SIZE_128", HKS_SM4_KEY_SIZE_128);
243526fd984Sopenharmony_ci
244526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_DES_KEY_SIZE_64", HKS_DES_KEY_SIZE_64);
245526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_3DES_KEY_SIZE_128", HKS_3DES_KEY_SIZE_128);
246526fd984Sopenharmony_ci    AddInt32Property(env, keySize, "HUKS_3DES_KEY_SIZE_192", HKS_3DES_KEY_SIZE_192);
247526fd984Sopenharmony_ci
248526fd984Sopenharmony_ci    return keySize;
249526fd984Sopenharmony_ci}
250526fd984Sopenharmony_ci
251526fd984Sopenharmony_cistatic napi_value CreateHuksKeyAlg(napi_env env)
252526fd984Sopenharmony_ci{
253526fd984Sopenharmony_ci    napi_value keyAlg = nullptr;
254526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyAlg));
255526fd984Sopenharmony_ci
256526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_RSA", HKS_ALG_RSA);
257526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_ECC", HKS_ALG_ECC);
258526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_DSA", HKS_ALG_DSA);
259526fd984Sopenharmony_ci
260526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_AES", HKS_ALG_AES);
261526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_HMAC", HKS_ALG_HMAC);
262526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_HKDF", HKS_ALG_HKDF);
263526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_PBKDF2", HKS_ALG_PBKDF2);
264526fd984Sopenharmony_ci
265526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_ECDH", HKS_ALG_ECDH);
266526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_X25519", HKS_ALG_X25519);
267526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_ED25519", HKS_ALG_ED25519);
268526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_DH", HKS_ALG_DH);
269526fd984Sopenharmony_ci
270526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_SM2", HKS_ALG_SM2);
271526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_SM3", HKS_ALG_SM3);
272526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_SM4", HKS_ALG_SM4);
273526fd984Sopenharmony_ci
274526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_DES", HKS_ALG_DES);
275526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_3DES", HKS_ALG_3DES);
276526fd984Sopenharmony_ci    AddInt32Property(env, keyAlg, "HUKS_ALG_CMAC", HKS_ALG_CMAC);
277526fd984Sopenharmony_ci
278526fd984Sopenharmony_ci    return keyAlg;
279526fd984Sopenharmony_ci}
280526fd984Sopenharmony_ci
281526fd984Sopenharmony_cistatic napi_value CreateHuksKeyPurpose(napi_env env)
282526fd984Sopenharmony_ci{
283526fd984Sopenharmony_ci    napi_value keyPurpose = nullptr;
284526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyPurpose));
285526fd984Sopenharmony_ci
286526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_ENCRYPT", HKS_KEY_PURPOSE_ENCRYPT);
287526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_DECRYPT", HKS_KEY_PURPOSE_DECRYPT);
288526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_SIGN", HKS_KEY_PURPOSE_SIGN);
289526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_VERIFY", HKS_KEY_PURPOSE_VERIFY);
290526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_DERIVE", HKS_KEY_PURPOSE_DERIVE);
291526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_WRAP", HKS_KEY_PURPOSE_WRAP);
292526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_UNWRAP", HKS_KEY_PURPOSE_UNWRAP);
293526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_MAC", HKS_KEY_PURPOSE_MAC);
294526fd984Sopenharmony_ci    AddInt32Property(env, keyPurpose, "HUKS_KEY_PURPOSE_AGREE", HKS_KEY_PURPOSE_AGREE);
295526fd984Sopenharmony_ci
296526fd984Sopenharmony_ci    return keyPurpose;
297526fd984Sopenharmony_ci}
298526fd984Sopenharmony_ci
299526fd984Sopenharmony_cistatic napi_value CreateHuksKeyPadding(napi_env env)
300526fd984Sopenharmony_ci{
301526fd984Sopenharmony_ci    napi_value keyPadding = nullptr;
302526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyPadding));
303526fd984Sopenharmony_ci
304526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_NONE", HKS_PADDING_NONE);
305526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_OAEP", HKS_PADDING_OAEP);
306526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_PSS", HKS_PADDING_PSS);
307526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_PKCS1_V1_5", HKS_PADDING_PKCS1_V1_5);
308526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_PKCS5", HKS_PADDING_PKCS5);
309526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_PKCS7", HKS_PADDING_PKCS7);
310526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_ISO_IEC_9796_2", HKS_PADDING_ISO_IEC_9796_2);
311526fd984Sopenharmony_ci    AddInt32Property(env, keyPadding, "HUKS_PADDING_ISO_IEC_9797_1", HKS_PADDING_ISO_IEC_9797_1);
312526fd984Sopenharmony_ci
313526fd984Sopenharmony_ci    return keyPadding;
314526fd984Sopenharmony_ci}
315526fd984Sopenharmony_ci
316526fd984Sopenharmony_cistatic napi_value CreateHuksCipherMode(napi_env env)
317526fd984Sopenharmony_ci{
318526fd984Sopenharmony_ci    napi_value keyCipherMode = nullptr;
319526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyCipherMode));
320526fd984Sopenharmony_ci
321526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_ECB", HKS_MODE_ECB);
322526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_CBC", HKS_MODE_CBC);
323526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_CTR", HKS_MODE_CTR);
324526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_OFB", HKS_MODE_OFB);
325526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_CFB", HKS_MODE_CFB);
326526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_CCM", HKS_MODE_CCM);
327526fd984Sopenharmony_ci    AddInt32Property(env, keyCipherMode, "HUKS_MODE_GCM", HKS_MODE_GCM);
328526fd984Sopenharmony_ci
329526fd984Sopenharmony_ci    return keyCipherMode;
330526fd984Sopenharmony_ci}
331526fd984Sopenharmony_ci
332526fd984Sopenharmony_cistatic napi_value CreateHuksKeyStorageType(napi_env env)
333526fd984Sopenharmony_ci{
334526fd984Sopenharmony_ci    napi_value keyStorageType = nullptr;
335526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyStorageType));
336526fd984Sopenharmony_ci
337526fd984Sopenharmony_ci    AddInt32Property(env, keyStorageType, "HUKS_STORAGE_TEMP", HKS_STORAGE_TEMP);
338526fd984Sopenharmony_ci    AddInt32Property(env, keyStorageType, "HUKS_STORAGE_PERSISTENT", HKS_STORAGE_PERSISTENT);
339526fd984Sopenharmony_ci    AddInt32Property(env, keyStorageType, "HUKS_STORAGE_ONLY_USED_IN_HUKS", HKS_STORAGE_ONLY_USED_IN_HUKS);
340526fd984Sopenharmony_ci    AddInt32Property(env, keyStorageType, "HUKS_STORAGE_KEY_EXPORT_ALLOWED", HKS_STORAGE_ALLOW_KEY_EXPORTED);
341526fd984Sopenharmony_ci
342526fd984Sopenharmony_ci    return keyStorageType;
343526fd984Sopenharmony_ci}
344526fd984Sopenharmony_ci
345526fd984Sopenharmony_cistatic napi_value CreateHuksUnwrapSuite(napi_env env)
346526fd984Sopenharmony_ci{
347526fd984Sopenharmony_ci    napi_value huksUnwrapSuite = nullptr;
348526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &huksUnwrapSuite));
349526fd984Sopenharmony_ci
350526fd984Sopenharmony_ci    AddInt32Property(env, huksUnwrapSuite, "HUKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING",
351526fd984Sopenharmony_ci                     HKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING);
352526fd984Sopenharmony_ci    AddInt32Property(env, huksUnwrapSuite, "HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING",
353526fd984Sopenharmony_ci                     HKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING);
354526fd984Sopenharmony_ci    return huksUnwrapSuite;
355526fd984Sopenharmony_ci}
356526fd984Sopenharmony_ci
357526fd984Sopenharmony_cistatic void AddHuksErrorCodePart1(napi_env env, napi_value errorCode)
358526fd984Sopenharmony_ci{
359526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_SUCCESS", HKS_SUCCESS);
360526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_FAILURE", HKS_FAILURE);
361526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_BAD_STATE", HKS_ERROR_BAD_STATE);
362526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_ARGUMENT", HKS_ERROR_INVALID_ARGUMENT);
363526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_NOT_SUPPORTED", HKS_ERROR_NOT_SUPPORTED);
364526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_NO_PERMISSION", HKS_ERROR_NO_PERMISSION);
365526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INSUFFICIENT_DATA", HKS_ERROR_INSUFFICIENT_DATA);
366526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_BUFFER_TOO_SMALL", HKS_ERROR_BUFFER_TOO_SMALL);
367526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INSUFFICIENT_MEMORY", HKS_ERROR_INSUFFICIENT_MEMORY);
368526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_COMMUNICATION_FAILURE", HKS_ERROR_COMMUNICATION_FAILURE);
369526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_STORAGE_FAILURE", HKS_ERROR_STORAGE_FAILURE);
370526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_HARDWARE_FAILURE", HKS_ERROR_HARDWARE_FAILURE);
371526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_ALREADY_EXISTS", HKS_ERROR_ALREADY_EXISTS);
372526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_NOT_EXIST", HKS_ERROR_NOT_EXIST);
373526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_NULL_POINTER", HKS_ERROR_NULL_POINTER);
374526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_FILE_SIZE_FAIL", HKS_ERROR_FILE_SIZE_FAIL);
375526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_READ_FILE_FAIL", HKS_ERROR_READ_FILE_FAIL);
376526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_PUBLIC_KEY", HKS_ERROR_INVALID_PUBLIC_KEY);
377526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_PRIVATE_KEY", HKS_ERROR_INVALID_PRIVATE_KEY);
378526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_KEY_INFO", HKS_ERROR_INVALID_KEY_INFO);
379526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_HASH_NOT_EQUAL", HKS_ERROR_HASH_NOT_EQUAL);
380526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_MALLOC_FAIL", HKS_ERROR_MALLOC_FAIL);
381526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_WRITE_FILE_FAIL", HKS_ERROR_WRITE_FILE_FAIL);
382526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_REMOVE_FILE_FAIL", HKS_ERROR_REMOVE_FILE_FAIL);
383526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_OPEN_FILE_FAIL", HKS_ERROR_OPEN_FILE_FAIL);
384526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CLOSE_FILE_FAIL", HKS_ERROR_CLOSE_FILE_FAIL);
385526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_MAKE_DIR_FAIL", HKS_ERROR_MAKE_DIR_FAIL);
386526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_KEY_FILE", HKS_ERROR_INVALID_KEY_FILE);
387526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_IPC_MSG_FAIL", HKS_ERROR_IPC_MSG_FAIL);
388526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_REQUEST_OVERFLOWS", HKS_ERROR_REQUEST_OVERFLOWS);
389526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_PARAM_NOT_EXIST", HKS_ERROR_PARAM_NOT_EXIST);
390526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CRYPTO_ENGINE_ERROR", HKS_ERROR_CRYPTO_ENGINE_ERROR);
391526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_COMMUNICATION_TIMEOUT", HKS_ERROR_COMMUNICATION_TIMEOUT);
392526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_IPC_INIT_FAIL", HKS_ERROR_IPC_INIT_FAIL);
393526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_IPC_DLOPEN_FAIL", HKS_ERROR_IPC_DLOPEN_FAIL);
394526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_EFUSE_READ_FAIL", HKS_ERROR_EFUSE_READ_FAIL);
395526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST", HKS_ERROR_NEW_ROOT_KEY_MATERIAL_EXIST);
396526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL",
397526fd984Sopenharmony_ci        HKS_ERROR_UPDATE_ROOT_KEY_MATERIAL_FAIL);
398526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_VERIFICATION_FAILED", HKS_ERROR_VERIFICATION_FAILED);
399526fd984Sopenharmony_ci}
400526fd984Sopenharmony_ci
401526fd984Sopenharmony_cistatic void AddHuksErrorCodePart2(napi_env env, napi_value errorCode)
402526fd984Sopenharmony_ci{
403526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_GET_USERIAM_SECINFO_FAILED", HKS_ERROR_GET_USERIAM_SECINFO_FAILED);
404526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_GET_USERIAM_AUTHINFO_FAILED", HKS_ERROR_GET_USERIAM_AUTHINFO_FAILED);
405526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_USER_AUTH_TYPE_NOT_SUPPORT", HKS_ERROR_USER_AUTH_TYPE_NOT_SUPPORT);
406526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_KEY_AUTH_FAILED", HKS_ERROR_KEY_AUTH_FAILED);
407526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_DEVICE_NO_CREDENTIAL", HKS_ERROR_DEVICE_NO_CREDENTIAL);
408526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_API_NOT_SUPPORTED", HKS_ERROR_API_NOT_SUPPORTED);
409526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_KEY_AUTH_PERMANENTLY_INVALIDATED",
410526fd984Sopenharmony_ci        HKS_ERROR_KEY_AUTH_PERMANENTLY_INVALIDATED);
411526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_KEY_AUTH_VERIFY_FAILED", HKS_ERROR_KEY_AUTH_VERIFY_FAILED);
412526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_KEY_AUTH_TIME_OUT", HKS_ERROR_KEY_AUTH_TIME_OUT);
413526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST", HKS_ERROR_CREDENTIAL_NOT_EXIST);
414526fd984Sopenharmony_ci
415526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_ALG_FAIL", HKS_ERROR_CHECK_GET_ALG_FAIL);
416526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_KEY_SIZE_FAIL", HKS_ERROR_CHECK_GET_KEY_SIZE_FAIL);
417526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_PADDING_FAIL", HKS_ERROR_CHECK_GET_PADDING_FAIL);
418526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_PURPOSE_FAIL", HKS_ERROR_CHECK_GET_PURPOSE_FAIL);
419526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_DIGEST_FAIL", HKS_ERROR_CHECK_GET_DIGEST_FAIL);
420526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_MODE_FAIL", HKS_ERROR_CHECK_GET_MODE_FAIL);
421526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_NONCE_FAIL", HKS_ERROR_CHECK_GET_NONCE_FAIL);
422526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_AAD_FAIL", HKS_ERROR_CHECK_GET_AAD_FAIL);
423526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_IV_FAIL", HKS_ERROR_CHECK_GET_IV_FAIL);
424526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_AE_TAG_FAIL", HKS_ERROR_CHECK_GET_AE_TAG_FAIL);
425526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_SALT_FAIL", HKS_ERROR_CHECK_GET_SALT_FAIL);
426526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_ITERATION_FAIL", HKS_ERROR_CHECK_GET_ITERATION_FAIL);
427526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_ALGORITHM", HKS_ERROR_INVALID_ALGORITHM);
428526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_KEY_SIZE", HKS_ERROR_INVALID_KEY_SIZE);
429526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_PADDING", HKS_ERROR_INVALID_PADDING);
430526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_PURPOSE", HKS_ERROR_INVALID_PURPOSE);
431526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_MODE", HKS_ERROR_INVALID_MODE);
432526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_DIGEST", HKS_ERROR_INVALID_DIGEST);
433526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_SIGNATURE_SIZE", HKS_ERROR_INVALID_SIGNATURE_SIZE);
434526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_IV", HKS_ERROR_INVALID_IV);
435526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_AAD", HKS_ERROR_INVALID_AAD);
436526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_NONCE", HKS_ERROR_INVALID_NONCE);
437526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_AE_TAG", HKS_ERROR_INVALID_AE_TAG);
438526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_SALT", HKS_ERROR_INVALID_SALT);
439526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_ITERATION", HKS_ERROR_INVALID_ITERATION);
440526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_OPERATION", HKS_ERROR_INVALID_OPERATION);
441526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_WRAPPED_FORMAT", HKS_ERROR_INVALID_WRAPPED_FORMAT);
442526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_USAGE_OF_KEY", HKS_ERROR_INVALID_USAGE_OF_KEY);
443526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INTERNAL_ERROR", HKS_ERROR_INTERNAL_ERROR);
444526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_UNKNOWN_ERROR", HKS_ERROR_UNKNOWN_ERROR);
445526fd984Sopenharmony_ci}
446526fd984Sopenharmony_ci
447526fd984Sopenharmony_cistatic void AddHuksErrorCodePart3(napi_env env, napi_value errorCode)
448526fd984Sopenharmony_ci{
449526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_AUTH_TYP_FAILED", HKS_ERROR_CHECK_GET_AUTH_TYP_FAILED);
450526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_CHALLENGE_TYPE_FAILED",
451526fd984Sopenharmony_ci        HKS_ERROR_CHECK_GET_CHALLENGE_TYPE_FAILED);
452526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_ACCESS_TYPE_FAILED",
453526fd984Sopenharmony_ci        HKS_ERROR_CHECK_GET_ACCESS_TYPE_FAILED);
454526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_CHECK_GET_AUTH_TOKEN_FAILED", HKS_ERROR_CHECK_GET_AUTH_TOKEN_FAILED);
455526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_TIME_OUT", HKS_ERROR_INVALID_TIME_OUT);
456526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_AUTH_TYPE", HKS_ERROR_INVALID_AUTH_TYPE);
457526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_CHALLENGE_TYPE", HKS_ERROR_INVALID_CHALLENGE_TYPE);
458526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_ACCESS_TYPE", HKS_ERROR_INVALID_ACCESS_TYPE);
459526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_AUTH_TOKEN", HKS_ERROR_INVALID_AUTH_TOKEN);
460526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERROR_INVALID_SECURE_SIGN_TYPE", HKS_ERROR_INVALID_SECURE_SIGN_TYPE);
461526fd984Sopenharmony_ci}
462526fd984Sopenharmony_ci
463526fd984Sopenharmony_cistatic napi_value CreateHuksErrorCode(napi_env env)
464526fd984Sopenharmony_ci{
465526fd984Sopenharmony_ci    napi_value errorCode = nullptr;
466526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &errorCode));
467526fd984Sopenharmony_ci
468526fd984Sopenharmony_ci    AddHuksErrorCodePart1(env, errorCode);
469526fd984Sopenharmony_ci    AddHuksErrorCodePart2(env, errorCode);
470526fd984Sopenharmony_ci    AddHuksErrorCodePart3(env, errorCode);
471526fd984Sopenharmony_ci
472526fd984Sopenharmony_ci    return errorCode;
473526fd984Sopenharmony_ci}
474526fd984Sopenharmony_ci
475526fd984Sopenharmony_cistatic void AddHuksErrCodePart(napi_env env, napi_value errorCode)
476526fd984Sopenharmony_ci{
477526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_PERMISSION_FAIL", HUKS_ERR_CODE_PERMISSION_FAIL);
478526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_NOT_SYSTEM_APP", HUKS_ERR_CODE_NOT_SYSTEM_APP);
479526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_ILLEGAL_ARGUMENT", HUKS_ERR_CODE_ILLEGAL_ARGUMENT);
480526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_NOT_SUPPORTED_API", HUKS_ERR_CODE_NOT_SUPPORTED_API);
481526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED", HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED);
482526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT",
483526fd984Sopenharmony_ci        HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT);
484526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT",
485526fd984Sopenharmony_ci        HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT);
486526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_FILE_OPERATION_FAIL", HUKS_ERR_CODE_FILE_OPERATION_FAIL);
487526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_COMMUNICATION_FAIL", HUKS_ERR_CODE_COMMUNICATION_FAIL);
488526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_CRYPTO_FAIL", HUKS_ERR_CODE_CRYPTO_FAIL);
489526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED",
490526fd984Sopenharmony_ci        HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED);
491526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED", HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED);
492526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_KEY_AUTH_TIME_OUT", HUKS_ERR_CODE_KEY_AUTH_TIME_OUT);
493526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_SESSION_LIMIT", HUKS_ERR_CODE_SESSION_LIMIT);
494526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_ITEM_NOT_EXIST", HUKS_ERR_CODE_ITEM_NOT_EXIST);
495526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_EXTERNAL_ERROR", HUKS_ERR_CODE_EXTERNAL_ERROR);
496526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST", HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST);
497526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_INSUFFICIENT_MEMORY", HUKS_ERR_CODE_INSUFFICIENT_MEMORY);
498526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_CALL_SERVICE_FAILED", HUKS_ERR_CODE_CALL_SERVICE_FAILED);
499526fd984Sopenharmony_ci    AddInt32Property(env, errorCode, "HUKS_ERR_CODE_DEVICE_PASSWORD_UNSET", HUKS_ERR_CODE_DEVICE_PASSWORD_UNSET);
500526fd984Sopenharmony_ci}
501526fd984Sopenharmony_ci
502526fd984Sopenharmony_cistatic napi_value CreateHuksErrCode(napi_env env)
503526fd984Sopenharmony_ci{
504526fd984Sopenharmony_ci    napi_value errorCode = nullptr;
505526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &errorCode));
506526fd984Sopenharmony_ci
507526fd984Sopenharmony_ci    AddHuksErrCodePart(env, errorCode);
508526fd984Sopenharmony_ci
509526fd984Sopenharmony_ci    return errorCode;
510526fd984Sopenharmony_ci}
511526fd984Sopenharmony_ci
512526fd984Sopenharmony_cistatic napi_value CreateHuksKeyDigest(napi_env env)
513526fd984Sopenharmony_ci{
514526fd984Sopenharmony_ci    napi_value keyDisgest = nullptr;
515526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyDisgest));
516526fd984Sopenharmony_ci
517526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_NONE", HKS_DIGEST_NONE);
518526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_MD5", HKS_DIGEST_MD5);
519526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_SHA1", HKS_DIGEST_SHA1);
520526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_SHA224", HKS_DIGEST_SHA224);
521526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_SHA256", HKS_DIGEST_SHA256);
522526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_SHA384", HKS_DIGEST_SHA384);
523526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_SHA512", HKS_DIGEST_SHA512);
524526fd984Sopenharmony_ci    AddInt32Property(env, keyDisgest, "HUKS_DIGEST_SM3", HKS_DIGEST_SM3);
525526fd984Sopenharmony_ci
526526fd984Sopenharmony_ci    return keyDisgest;
527526fd984Sopenharmony_ci}
528526fd984Sopenharmony_ci
529526fd984Sopenharmony_cistatic napi_value CreateHuksKeyGenerateType(napi_env env)
530526fd984Sopenharmony_ci{
531526fd984Sopenharmony_ci    napi_value keyGenerateType = nullptr;
532526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyGenerateType));
533526fd984Sopenharmony_ci
534526fd984Sopenharmony_ci    AddInt32Property(env, keyGenerateType, "HUKS_KEY_GENERATE_TYPE_DEFAULT", HKS_KEY_GENERATE_TYPE_DEFAULT);
535526fd984Sopenharmony_ci    AddInt32Property(env, keyGenerateType, "HUKS_KEY_GENERATE_TYPE_DERIVE", HKS_KEY_GENERATE_TYPE_DERIVE);
536526fd984Sopenharmony_ci    AddInt32Property(env, keyGenerateType, "HUKS_KEY_GENERATE_TYPE_AGREE", HKS_KEY_GENERATE_TYPE_AGREE);
537526fd984Sopenharmony_ci
538526fd984Sopenharmony_ci    return keyGenerateType;
539526fd984Sopenharmony_ci}
540526fd984Sopenharmony_ci
541526fd984Sopenharmony_cistatic napi_value CreateHuksKeyFlag(napi_env env)
542526fd984Sopenharmony_ci{
543526fd984Sopenharmony_ci    napi_value keyFlag = nullptr;
544526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &keyFlag));
545526fd984Sopenharmony_ci
546526fd984Sopenharmony_ci    AddInt32Property(env, keyFlag, "HUKS_KEY_FLAG_IMPORT_KEY", HKS_KEY_FLAG_IMPORT_KEY);
547526fd984Sopenharmony_ci    AddInt32Property(env, keyFlag, "HUKS_KEY_FLAG_GENERATE_KEY", HKS_KEY_FLAG_GENERATE_KEY);
548526fd984Sopenharmony_ci    AddInt32Property(env, keyFlag, "HUKS_KEY_FLAG_AGREE_KEY", HKS_KEY_FLAG_AGREE_KEY);
549526fd984Sopenharmony_ci    AddInt32Property(env, keyFlag, "HUKS_KEY_FLAG_DERIVE_KEY", HKS_KEY_FLAG_DERIVE_KEY);
550526fd984Sopenharmony_ci
551526fd984Sopenharmony_ci    return keyFlag;
552526fd984Sopenharmony_ci}
553526fd984Sopenharmony_ci
554526fd984Sopenharmony_cistatic napi_value CreateHuksTagType(napi_env env)
555526fd984Sopenharmony_ci{
556526fd984Sopenharmony_ci    napi_value tagType = nullptr;
557526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &tagType));
558526fd984Sopenharmony_ci
559526fd984Sopenharmony_ci    AddInt32Property(env, tagType, "HUKS_TAG_TYPE_INVALID", HKS_TAG_TYPE_INVALID);
560526fd984Sopenharmony_ci    AddInt32Property(env, tagType, "HUKS_TAG_TYPE_INT", HKS_TAG_TYPE_INT);
561526fd984Sopenharmony_ci    AddInt32Property(env, tagType, "HUKS_TAG_TYPE_UINT", HKS_TAG_TYPE_UINT);
562526fd984Sopenharmony_ci    AddInt32Property(env, tagType, "HUKS_TAG_TYPE_ULONG", HKS_TAG_TYPE_ULONG);
563526fd984Sopenharmony_ci    AddInt32Property(env, tagType, "HUKS_TAG_TYPE_BOOL", HKS_TAG_TYPE_BOOL);
564526fd984Sopenharmony_ci    AddInt32Property(env, tagType, "HUKS_TAG_TYPE_BYTES", HKS_TAG_TYPE_BYTES);
565526fd984Sopenharmony_ci
566526fd984Sopenharmony_ci    return tagType;
567526fd984Sopenharmony_ci}
568526fd984Sopenharmony_ci
569526fd984Sopenharmony_cistatic napi_value CreateHuksImportKeyType(napi_env env)
570526fd984Sopenharmony_ci{
571526fd984Sopenharmony_ci    napi_value ImportKeyType = nullptr;
572526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &ImportKeyType));
573526fd984Sopenharmony_ci
574526fd984Sopenharmony_ci    AddInt32Property(env, ImportKeyType, "HUKS_KEY_TYPE_PUBLIC_KEY", HKS_KEY_TYPE_PUBLIC_KEY);
575526fd984Sopenharmony_ci    AddInt32Property(env, ImportKeyType, "HUKS_KEY_TYPE_PRIVATE_KEY", HKS_KEY_TYPE_PRIVATE_KEY);
576526fd984Sopenharmony_ci    AddInt32Property(env, ImportKeyType, "HUKS_KEY_TYPE_KEY_PAIR", HKS_KEY_TYPE_KEY_PAIR);
577526fd984Sopenharmony_ci
578526fd984Sopenharmony_ci    return ImportKeyType;
579526fd984Sopenharmony_ci}
580526fd984Sopenharmony_ci
581526fd984Sopenharmony_cistatic napi_value CreateHuksSendType(napi_env env)
582526fd984Sopenharmony_ci{
583526fd984Sopenharmony_ci    napi_value sendType = nullptr;
584526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &sendType));
585526fd984Sopenharmony_ci
586526fd984Sopenharmony_ci    AddInt32Property(env, sendType, "HUKS_SEND_TYPE_ASYNC", HKS_SEND_TYPE_ASYNC);
587526fd984Sopenharmony_ci    AddInt32Property(env, sendType, "HUKS_SEND_TYPE_SYNC", HKS_SEND_TYPE_SYNC);
588526fd984Sopenharmony_ci
589526fd984Sopenharmony_ci    return sendType;
590526fd984Sopenharmony_ci}
591526fd984Sopenharmony_ci
592526fd984Sopenharmony_cistatic napi_value CreateHuksUserAuthType(napi_env env)
593526fd984Sopenharmony_ci{
594526fd984Sopenharmony_ci    napi_value value = nullptr;
595526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
596526fd984Sopenharmony_ci
597526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_USER_AUTH_TYPE_FINGERPRINT", HKS_USER_AUTH_TYPE_FINGERPRINT);
598526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_USER_AUTH_TYPE_FACE", HKS_USER_AUTH_TYPE_FACE);
599526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_USER_AUTH_TYPE_PIN", HKS_USER_AUTH_TYPE_PIN);
600526fd984Sopenharmony_ci
601526fd984Sopenharmony_ci    return value;
602526fd984Sopenharmony_ci}
603526fd984Sopenharmony_ci
604526fd984Sopenharmony_cistatic napi_value CreateHuksAuthAccessType(napi_env env)
605526fd984Sopenharmony_ci{
606526fd984Sopenharmony_ci    napi_value value = nullptr;
607526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
608526fd984Sopenharmony_ci
609526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD", HKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD);
610526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL", HKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL);
611526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_AUTH_ACCESS_ALWAYS_VALID", HKS_AUTH_ACCESS_ALWAYS_VALID);
612526fd984Sopenharmony_ci
613526fd984Sopenharmony_ci    return value;
614526fd984Sopenharmony_ci}
615526fd984Sopenharmony_ci
616526fd984Sopenharmony_cistatic napi_value CreateHuksChallengeType(napi_env env)
617526fd984Sopenharmony_ci{
618526fd984Sopenharmony_ci    napi_value value = nullptr;
619526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
620526fd984Sopenharmony_ci
621526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_TYPE_NORMAL", HKS_CHALLENGE_TYPE_NORMAL);
622526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_TYPE_CUSTOM", HKS_CHALLENGE_TYPE_CUSTOM);
623526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_TYPE_NONE", HKS_CHALLENGE_TYPE_NONE);
624526fd984Sopenharmony_ci
625526fd984Sopenharmony_ci    return value;
626526fd984Sopenharmony_ci}
627526fd984Sopenharmony_ci
628526fd984Sopenharmony_cistatic napi_value CreateHuksUserAuthMode(napi_env env)
629526fd984Sopenharmony_ci{
630526fd984Sopenharmony_ci    napi_value value = nullptr;
631526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
632526fd984Sopenharmony_ci
633526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_USER_AUTH_MODE_LOCAL", HKS_USER_AUTH_MODE_LOCAL);
634526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_USER_AUTH_MODE_COAUTH", HKS_USER_AUTH_MODE_COAUTH);
635526fd984Sopenharmony_ci
636526fd984Sopenharmony_ci    return value;
637526fd984Sopenharmony_ci}
638526fd984Sopenharmony_ci
639526fd984Sopenharmony_cistatic napi_value CreateHuksChallengePosition(napi_env env)
640526fd984Sopenharmony_ci{
641526fd984Sopenharmony_ci    napi_value value = nullptr;
642526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
643526fd984Sopenharmony_ci
644526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_POS_0", HKS_CHALLENGE_POS_0);
645526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_POS_1", HKS_CHALLENGE_POS_1);
646526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_POS_2", HKS_CHALLENGE_POS_2);
647526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_CHALLENGE_POS_3", HKS_CHALLENGE_POS_3);
648526fd984Sopenharmony_ci
649526fd984Sopenharmony_ci    return value;
650526fd984Sopenharmony_ci}
651526fd984Sopenharmony_ci
652526fd984Sopenharmony_cistatic napi_value CreateHuksSecureSignType(napi_env env)
653526fd984Sopenharmony_ci{
654526fd984Sopenharmony_ci    napi_value value = nullptr;
655526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
656526fd984Sopenharmony_ci
657526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_SECURE_SIGN_WITH_AUTHINFO", HKS_SECURE_SIGN_WITH_AUTHINFO);
658526fd984Sopenharmony_ci
659526fd984Sopenharmony_ci    return value;
660526fd984Sopenharmony_ci}
661526fd984Sopenharmony_ci
662526fd984Sopenharmony_cistatic napi_value CreateHuksRsaPssSaltLenType(napi_env env)
663526fd984Sopenharmony_ci{
664526fd984Sopenharmony_ci    napi_value rsaPssSaltLenType = nullptr;
665526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &rsaPssSaltLenType));
666526fd984Sopenharmony_ci
667526fd984Sopenharmony_ci    AddInt32Property(env, rsaPssSaltLenType, "HUKS_RSA_PSS_SALT_LEN_DIGEST", HKS_RSA_PSS_SALTLEN_DIGEST);
668526fd984Sopenharmony_ci    AddInt32Property(env, rsaPssSaltLenType, "HUKS_RSA_PSS_SALT_LEN_MAX", HKS_RSA_PSS_SALTLEN_MAX);
669526fd984Sopenharmony_ci
670526fd984Sopenharmony_ci    return rsaPssSaltLenType;
671526fd984Sopenharmony_ci}
672526fd984Sopenharmony_ci
673526fd984Sopenharmony_cistatic napi_value CreateHuksAuthStorageLevel(napi_env env)
674526fd984Sopenharmony_ci{
675526fd984Sopenharmony_ci    napi_value value = nullptr;
676526fd984Sopenharmony_ci    NAPI_CALL(env, napi_create_object(env, &value));
677526fd984Sopenharmony_ci
678526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_AUTH_STORAGE_LEVEL_DE", HKS_AUTH_STORAGE_LEVEL_DE);
679526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_AUTH_STORAGE_LEVEL_CE", HKS_AUTH_STORAGE_LEVEL_CE);
680526fd984Sopenharmony_ci    AddInt32Property(env, value, "HUKS_AUTH_STORAGE_LEVEL_ECE", HKS_AUTH_STORAGE_LEVEL_ECE);
681526fd984Sopenharmony_ci    return value;
682526fd984Sopenharmony_ci}
683526fd984Sopenharmony_ci}  // namespace HuksNapi
684526fd984Sopenharmony_ci
685526fd984Sopenharmony_ciusing namespace HuksNapi;
686526fd984Sopenharmony_ciusing namespace HuksNapiItem;
687526fd984Sopenharmony_ci
688526fd984Sopenharmony_ciextern "C" {
689526fd984Sopenharmony_cinapi_property_descriptor NAPI_FUNC_DESC[] = {
690526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("generateKey", HuksNapiGenerateKey),
691526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("deleteKey", HuksNapiDeleteKey),
692526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("getSdkVersion", HuksNapiGetSdkVersion),
693526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("importKey", HuksNapiImportKey),
694526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("exportKey", HuksNapiExportKey),
695526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("getKeyProperties", HuksNapiGetKeyProperties),
696526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("isKeyExist", HuksNapiIsKeyExist),
697526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("init", HuksNapiInit),
698526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("update", HuksNapiUpdate),
699526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("finish", HuksNapiFinish),
700526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("abort", HuksNapiAbort),
701526fd984Sopenharmony_ci
702526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("generateKeyItem", HuksNapiItemGenerateKey),
703526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("generateKeyItemAsUser", HuksNapiItemGenerateKeyAsUser),
704526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("deleteKeyItem", HuksNapiDeleteKeyItem),
705526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("deleteKeyItemAsUser", HuksNapiDeleteKeyItemAsUser),
706526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("importKeyItem", HuksNapiImportKeyItem),
707526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("importKeyItemAsUser", HuksNapiImportKeyItemAsUser),
708526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("importWrappedKeyItem", HuksNapiImportWrappedKeyItem),
709526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("importWrappedKeyItemAsUser", HuksNapiImportWrappedKeyItemAsUser),
710526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("exportKeyItem", HuksNapiExportKeyItem),
711526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("exportKeyItemAsUser", HuksNapiExportKeyItemAsUser),
712526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("getKeyItemProperties", HuksNapiGetKeyItemProperties),
713526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("getKeyItemPropertiesAsUser", HuksNapiGetKeyItemPropertiesAsUser),
714526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("isKeyItemExist", HuksNapiIsKeyItemExist),
715526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("hasKeyItem", HuksNapihasKeyItem),
716526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("hasKeyItemAsUser", HuksNapiHasKeyItemAsUser),
717526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("attestKeyItem", HuksNapiAttestKeyItem),
718526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("attestKeyItemAsUser", HuksNapiAttestKeyItemAsUser),
719526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("anonAttestKeyItem", HuksNapiAnonAttestKeyItem),
720526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("anonAttestKeyItemAsUser", HuksNapiAnonAttestKeyItemAsUser),
721526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("initSession", HuksNapiInitSession),
722526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("initSessionAsUser", HuksNapiInitSessionAsUser),
723526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("updateSession", HuksNapiUpdateSession),
724526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("finishSession", HuksNapiFinishSession),
725526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("abortSession", HuksNapiAbortSession),
726526fd984Sopenharmony_ci    DECLARE_NAPI_FUNCTION("listAliases", HuksNapiListAliases),
727526fd984Sopenharmony_ci};
728526fd984Sopenharmony_ci
729526fd984Sopenharmony_cistatic napi_value HuksNapiRegister(napi_env env, napi_value exports)
730526fd984Sopenharmony_ci{
731526fd984Sopenharmony_ci    napi_property_descriptor propDesc[] = {
732526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksExceptionErrCode", CreateHuksErrCode(env)),
733526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksErrorCode", CreateHuksErrorCode(env)),
734526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyPurpose", CreateHuksKeyPurpose(env)),
735526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyDigest", CreateHuksKeyDigest(env)),
736526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyPadding", CreateHuksKeyPadding(env)),
737526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksCipherMode", CreateHuksCipherMode(env)),
738526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeySize", CreateHuksKeySize(env)),
739526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyAlg", CreateHuksKeyAlg(env)),
740526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyGenerateType", CreateHuksKeyGenerateType(env)),
741526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyFlag", CreateHuksKeyFlag(env)),
742526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksKeyStorageType", CreateHuksKeyStorageType(env)),
743526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksTagType", CreateHuksTagType(env)),
744526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksTag", CreateHuksTag(env)),
745526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksImportKeyType", CreateHuksImportKeyType(env)),
746526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksUnwrapSuite", CreateHuksUnwrapSuite(env)),
747526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksSendType", CreateHuksSendType(env)),
748526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksUserAuthType", CreateHuksUserAuthType(env)),
749526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksAuthAccessType", CreateHuksAuthAccessType(env)),
750526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksChallengeType", CreateHuksChallengeType(env)),
751526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksUserAuthMode", CreateHuksUserAuthMode(env)),
752526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksChallengePosition", CreateHuksChallengePosition(env)),
753526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksSecureSignType", CreateHuksSecureSignType(env)),
754526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksRsaPssSaltLenType", CreateHuksRsaPssSaltLenType(env)),
755526fd984Sopenharmony_ci        DECLARE_NAPI_PROPERTY("HuksAuthStorageLevel", CreateHuksAuthStorageLevel(env)),
756526fd984Sopenharmony_ci    };
757526fd984Sopenharmony_ci    napi_property_descriptor desc[HKS_ARRAY_SIZE(NAPI_FUNC_DESC) + HKS_ARRAY_SIZE(propDesc)];
758526fd984Sopenharmony_ci
759526fd984Sopenharmony_ci    for (uint32_t i = 0; i < HKS_ARRAY_SIZE(NAPI_FUNC_DESC); ++i) {
760526fd984Sopenharmony_ci        desc[i] = NAPI_FUNC_DESC[i];
761526fd984Sopenharmony_ci    }
762526fd984Sopenharmony_ci
763526fd984Sopenharmony_ci    for (uint32_t i = 0; i < HKS_ARRAY_SIZE(propDesc); ++i) {
764526fd984Sopenharmony_ci        desc[HKS_ARRAY_SIZE(NAPI_FUNC_DESC) + i] = propDesc[i];
765526fd984Sopenharmony_ci    }
766526fd984Sopenharmony_ci
767526fd984Sopenharmony_ci    NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
768526fd984Sopenharmony_ci    return exports;
769526fd984Sopenharmony_ci}
770526fd984Sopenharmony_ci
771526fd984Sopenharmony_cistatic napi_module g_module = {
772526fd984Sopenharmony_ci    .nm_version = 1,
773526fd984Sopenharmony_ci    .nm_flags = 0,
774526fd984Sopenharmony_ci    .nm_filename = nullptr,
775526fd984Sopenharmony_ci    .nm_register_func = HuksNapiRegister,
776526fd984Sopenharmony_ci    .nm_modname = "security.huks",
777526fd984Sopenharmony_ci    .nm_priv = reinterpret_cast<void *>(0),
778526fd984Sopenharmony_ci    .reserved = { 0 },
779526fd984Sopenharmony_ci};
780526fd984Sopenharmony_ci
781526fd984Sopenharmony_ci__attribute__((constructor)) void RegisterModule(void)
782526fd984Sopenharmony_ci{
783526fd984Sopenharmony_ci    napi_module_register(&g_module);
784526fd984Sopenharmony_ci}
785526fd984Sopenharmony_ci}
786