• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <cstdint>
17 
18 #include "napi/native_api.h"
19 #include "napi/native_node_api.h"
20 
21 #include "asset_system_api.h"
22 #include "asset_system_type.h"
23 
24 #include "asset_napi_add.h"
25 #include "asset_napi_post_query.h"
26 #include "asset_napi_pre_query.h"
27 #include "asset_napi_query.h"
28 #include "asset_napi_query_sync_result.h"
29 #include "asset_napi_remove.h"
30 #include "asset_napi_update.h"
31 
32 using namespace OHOS::Security::Asset;
33 
34 namespace {
35 
AddUint32Property(const napi_env env,napi_value object,const char * name,uint32_t value)36 void AddUint32Property(const napi_env env, napi_value object, const char *name, uint32_t value)
37 {
38     napi_value property = nullptr;
39     NAPI_CALL_RETURN_VOID(env, napi_create_uint32(env, value, &property));
40     NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, object, name, property));
41 }
42 
DeclareTag(const napi_env env)43 napi_value DeclareTag(const napi_env env)
44 {
45     napi_value tag = nullptr;
46     NAPI_CALL(env, napi_create_object(env, &tag));
47     AddUint32Property(env, tag, "SECRET", SEC_ASSET_TAG_SECRET);
48     AddUint32Property(env, tag, "ALIAS", SEC_ASSET_TAG_ALIAS);
49     AddUint32Property(env, tag, "ACCESSIBILITY", SEC_ASSET_TAG_ACCESSIBILITY);
50     AddUint32Property(env, tag, "REQUIRE_PASSWORD_SET", SEC_ASSET_TAG_REQUIRE_PASSWORD_SET);
51     AddUint32Property(env, tag, "AUTH_TYPE", SEC_ASSET_TAG_AUTH_TYPE);
52     AddUint32Property(env, tag, "AUTH_VALIDITY_PERIOD", SEC_ASSET_TAG_AUTH_VALIDITY_PERIOD);
53     AddUint32Property(env, tag, "AUTH_CHALLENGE", SEC_ASSET_TAG_AUTH_CHALLENGE);
54     AddUint32Property(env, tag, "AUTH_TOKEN", SEC_ASSET_TAG_AUTH_TOKEN);
55     AddUint32Property(env, tag, "SYNC_TYPE", SEC_ASSET_TAG_SYNC_TYPE);
56     AddUint32Property(env, tag, "IS_PERSISTENT", SEC_ASSET_TAG_IS_PERSISTENT);
57     AddUint32Property(env, tag, "CONFLICT_RESOLUTION", SEC_ASSET_TAG_CONFLICT_RESOLUTION);
58     AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_1", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1);
59     AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_2", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2);
60     AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_3", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3);
61     AddUint32Property(env, tag, "DATA_LABEL_CRITICAL_4", SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4);
62     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_1", SEC_ASSET_TAG_DATA_LABEL_NORMAL_1);
63     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_2", SEC_ASSET_TAG_DATA_LABEL_NORMAL_2);
64     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_3", SEC_ASSET_TAG_DATA_LABEL_NORMAL_3);
65     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_4", SEC_ASSET_TAG_DATA_LABEL_NORMAL_4);
66     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_1", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1);
67     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_2", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2);
68     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_3", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3);
69     AddUint32Property(env, tag, "DATA_LABEL_NORMAL_LOCAL_4", SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4);
70     AddUint32Property(env, tag, "RETURN_TYPE", SEC_ASSET_TAG_RETURN_TYPE);
71     AddUint32Property(env, tag, "RETURN_LIMIT", SEC_ASSET_TAG_RETURN_LIMIT);
72     AddUint32Property(env, tag, "RETURN_OFFSET", SEC_ASSET_TAG_RETURN_OFFSET);
73     AddUint32Property(env, tag, "RETURN_ORDERED_BY", SEC_ASSET_TAG_RETURN_ORDERED_BY);
74     AddUint32Property(env, tag, "UPDATE_TIME", SEC_ASSET_TAG_UPDATE_TIME);
75     AddUint32Property(env, tag, "OPERATION_TYPE", SEC_ASSET_TAG_OPERATION_TYPE);
76     AddUint32Property(env, tag, "REQUIRE_ATTR_ENCRYPTED", SEC_ASSET_TAG_REQUIRE_ATTR_ENCRYPTED);
77     AddUint32Property(env, tag, "GROUP_ID", SEC_ASSET_TAG_GROUP_ID);
78     AddUint32Property(env, tag, "WRAP_TYPE", SEC_ASSET_TAG_WRAP_TYPE);
79     return tag;
80 }
81 
DeclareTagType(const napi_env env)82 napi_value DeclareTagType(const napi_env env)
83 {
84     napi_value tagType = nullptr;
85     NAPI_CALL(env, napi_create_object(env, &tagType));
86     AddUint32Property(env, tagType, "BOOL", SEC_ASSET_TYPE_BOOL);
87     AddUint32Property(env, tagType, "NUMBER", SEC_ASSET_TYPE_NUMBER);
88     AddUint32Property(env, tagType, "BYTES", SEC_ASSET_TYPE_BYTES);
89     return tagType;
90 }
91 
DeclareErrorCode(const napi_env env)92 napi_value DeclareErrorCode(const napi_env env)
93 {
94     napi_value errorCode = nullptr;
95     NAPI_CALL(env, napi_create_object(env, &errorCode));
96     AddUint32Property(env, errorCode, "PERMISSION_DENIED", SEC_ASSET_PERMISSION_DENIED);
97     AddUint32Property(env, errorCode, "NOT_SYSTEM_APPLICATION", SEC_ASSET_NOT_SYSTEM_APPLICATION);
98     AddUint32Property(env, errorCode, "INVALID_ARGUMENT", SEC_ASSET_INVALID_ARGUMENT);
99     AddUint32Property(env, errorCode, "SERVICE_UNAVAILABLE", SEC_ASSET_SERVICE_UNAVAILABLE);
100     AddUint32Property(env, errorCode, "NOT_FOUND", SEC_ASSET_NOT_FOUND);
101     AddUint32Property(env, errorCode, "DUPLICATED", SEC_ASSET_DUPLICATED);
102     AddUint32Property(env, errorCode, "ACCESS_DENIED", SEC_ASSET_ACCESS_DENIED);
103     AddUint32Property(env, errorCode, "STATUS_MISMATCH", SEC_ASSET_STATUS_MISMATCH);
104     AddUint32Property(env, errorCode, "OUT_OF_MEMORY", SEC_ASSET_OUT_OF_MEMORY);
105     AddUint32Property(env, errorCode, "DATA_CORRUPTED", SEC_ASSET_DATA_CORRUPTED);
106     AddUint32Property(env, errorCode, "DATABASE_ERROR", SEC_ASSET_DATABASE_ERROR);
107     AddUint32Property(env, errorCode, "CRYPTO_ERROR", SEC_ASSET_CRYPTO_ERROR);
108     AddUint32Property(env, errorCode, "IPC_ERROR", SEC_ASSET_IPC_ERROR);
109     AddUint32Property(env, errorCode, "BMS_ERROR", SEC_ASSET_BMS_ERROR);
110     AddUint32Property(env, errorCode, "ACCOUNT_ERROR", SEC_ASSET_ACCOUNT_ERROR);
111     AddUint32Property(env, errorCode, "ACCESS_TOKEN_ERROR", SEC_ASSET_ACCESS_TOKEN_ERROR);
112     AddUint32Property(env, errorCode, "FILE_OPERATION_ERROR", SEC_ASSET_FILE_OPERATION_ERROR);
113     AddUint32Property(env, errorCode, "GET_SYSTEM_TIME_ERROR", SEC_ASSET_GET_SYSTEM_TIME_ERROR);
114     AddUint32Property(env, errorCode, "LIMIT_EXCEEDED", SEC_ASSET_LIMIT_EXCEEDED);
115     AddUint32Property(env, errorCode, "UNSUPPORTED", SEC_ASSET_UNSUPPORTED);
116     AddUint32Property(env, errorCode, "PARAM_VERIFICATION_FAILED", SEC_ASSET_PARAM_VERIFICATION_FAILED);
117     return errorCode;
118 }
119 
DeclareAccessibility(const napi_env env)120 napi_value DeclareAccessibility(const napi_env env)
121 {
122     napi_value accessibility = nullptr;
123     NAPI_CALL(env, napi_create_object(env, &accessibility));
124     AddUint32Property(env, accessibility, "DEVICE_POWERED_ON", SEC_ASSET_ACCESSIBILITY_DEVICE_POWERED_ON);
125     AddUint32Property(env, accessibility, "DEVICE_FIRST_UNLOCKED", SEC_ASSET_ACCESSIBILITY_DEVICE_FIRST_UNLOCKED);
126     AddUint32Property(env, accessibility, "DEVICE_UNLOCKED", SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED);
127     return accessibility;
128 }
129 
DeclareAuthType(const napi_env env)130 napi_value DeclareAuthType(const napi_env env)
131 {
132     napi_value authType = nullptr;
133     NAPI_CALL(env, napi_create_object(env, &authType));
134     AddUint32Property(env, authType, "NONE", SEC_ASSET_AUTH_TYPE_NONE);
135     AddUint32Property(env, authType, "ANY", SEC_ASSET_AUTH_TYPE_ANY);
136     return authType;
137 }
138 
DeclareSyncType(const napi_env env)139 napi_value DeclareSyncType(const napi_env env)
140 {
141     napi_value syncType = nullptr;
142     NAPI_CALL(env, napi_create_object(env, &syncType));
143     AddUint32Property(env, syncType, "NEVER", SEC_ASSET_SYNC_TYPE_NEVER);
144     AddUint32Property(env, syncType, "THIS_DEVICE", SEC_ASSET_SYNC_TYPE_THIS_DEVICE);
145     AddUint32Property(env, syncType, "TRUSTED_DEVICE", SEC_ASSET_SYNC_TYPE_TRUSTED_DEVICE);
146     AddUint32Property(env, syncType, "TRUSTED_ACCOUNT", SEC_ASSET_SYNC_TYPE_TRUSTED_ACCOUNT);
147     return syncType;
148 }
149 
DeclareWrapType(const napi_env env)150 napi_value DeclareWrapType(const napi_env env)
151 {
152     napi_value syncType = nullptr;
153     NAPI_CALL(env, napi_create_object(env, &syncType));
154     AddUint32Property(env, syncType, "NEVER", SEC_ASSET_WRAP_TYPE_NEVER);
155     AddUint32Property(env, syncType, "TRUSTED_ACCOUNT", SEC_ASSET_WRAP_TYPE_TRUSTED_ACCOUNT);
156     return syncType;
157 }
158 
DeclareConflictResolution(const napi_env env)159 napi_value DeclareConflictResolution(const napi_env env)
160 {
161     napi_value conflictResolution = nullptr;
162     NAPI_CALL(env, napi_create_object(env, &conflictResolution));
163     AddUint32Property(env, conflictResolution, "OVERWRITE", SEC_ASSET_CONFLICT_OVERWRITE);
164     AddUint32Property(env, conflictResolution, "THROW_ERROR", SEC_ASSET_CONFLICT_THROW_ERROR);
165     return conflictResolution;
166 }
167 
DeclareReturnType(const napi_env env)168 napi_value DeclareReturnType(const napi_env env)
169 {
170     napi_value returnType = nullptr;
171     NAPI_CALL(env, napi_create_object(env, &returnType));
172     AddUint32Property(env, returnType, "ALL", SEC_ASSET_RETURN_ALL);
173     AddUint32Property(env, returnType, "ATTRIBUTES", SEC_ASSET_RETURN_ATTRIBUTES);
174     return returnType;
175 }
176 
DeclareOperationType(const napi_env env)177 napi_value DeclareOperationType(const napi_env env)
178 {
179     napi_value operationType = nullptr;
180     NAPI_CALL(env, napi_create_object(env, &operationType));
181     AddUint32Property(env, operationType, "NEED_SYNC", SEC_ASSET_NEED_SYNC);
182     AddUint32Property(env, operationType, "NEED_LOGOUT", SEC_ASSET_NEED_LOGOUT);
183     AddUint32Property(env, operationType, "NEED_DELETE_CLOUD_DATA", SEC_ASSET_NEED_DELETE_CLOUD_DATA);
184     return operationType;
185 }
186 
Register(const napi_env env,napi_value exports)187 napi_value Register(const napi_env env, napi_value exports)
188 {
189     napi_property_descriptor desc[] = {
190         // register function
191         DECLARE_NAPI_FUNCTION("add", NapiAdd),
192         DECLARE_NAPI_FUNCTION("addSync", NapiAddSync),
193         DECLARE_NAPI_FUNCTION("addAsUser", NapiAddAsUser),
194         DECLARE_NAPI_FUNCTION("remove", NapiRemove),
195         DECLARE_NAPI_FUNCTION("removeSync", NapiRemoveSync),
196         DECLARE_NAPI_FUNCTION("removeAsUser", NapiRemoveAsUser),
197         DECLARE_NAPI_FUNCTION("update", NapiUpdate),
198         DECLARE_NAPI_FUNCTION("updateSync", NapiUpdateSync),
199         DECLARE_NAPI_FUNCTION("updateAsUser", NapiUpdateAsUser),
200         DECLARE_NAPI_FUNCTION("preQuery", NapiPreQuery),
201         DECLARE_NAPI_FUNCTION("preQuerySync", NapiPreQuerySync),
202         DECLARE_NAPI_FUNCTION("preQueryAsUser", NapiPreQueryAsUser),
203         DECLARE_NAPI_FUNCTION("query", NapiQuery),
204         DECLARE_NAPI_FUNCTION("querySync", NapiQuerySync),
205         DECLARE_NAPI_FUNCTION("queryAsUser", NapiQueryAsUser),
206         DECLARE_NAPI_FUNCTION("postQuery", NapiPostQuery),
207         DECLARE_NAPI_FUNCTION("postQuerySync", NapiPostQuerySync),
208         DECLARE_NAPI_FUNCTION("postQueryAsUser", NapiPostQueryAsUser),
209         DECLARE_NAPI_FUNCTION("querySyncResult", NapiQuerySyncResult),
210 
211         // register enumerate
212         DECLARE_NAPI_PROPERTY("Tag", DeclareTag(env)),
213         DECLARE_NAPI_PROPERTY("TagType", DeclareTagType(env)),
214         DECLARE_NAPI_PROPERTY("ErrorCode", DeclareErrorCode(env)),
215         DECLARE_NAPI_PROPERTY("Accessibility", DeclareAccessibility(env)),
216         DECLARE_NAPI_PROPERTY("AuthType", DeclareAuthType(env)),
217         DECLARE_NAPI_PROPERTY("SyncType", DeclareSyncType(env)),
218         DECLARE_NAPI_PROPERTY("ConflictResolution", DeclareConflictResolution(env)),
219         DECLARE_NAPI_PROPERTY("ReturnType", DeclareReturnType(env)),
220         DECLARE_NAPI_PROPERTY("OperationType", DeclareOperationType(env)),
221         DECLARE_NAPI_PROPERTY("WrapType", DeclareWrapType(env)),
222     };
223 
224     NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
225     return exports;
226 }
227 
228 napi_module g_module = {
229     .nm_version = 1,
230     .nm_flags = 0,
231     .nm_filename = nullptr,
232     .nm_register_func = Register,
233     .nm_modname = "security.asset",
234     .nm_priv = static_cast<void *>(0),
235     .reserved = { 0 },
236 };
237 
238 } // anonymous namespace
239 
RegisterModule(void)240 extern "C" __attribute__((constructor)) void RegisterModule(void)
241 {
242     napi_module_register(&g_module);
243 }
244