• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-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 #ifndef ASSET_NAPI_CHECK_H
17 #define ASSET_NAPI_CHECK_H
18 
19 #include <vector>
20 
21 #include "napi/native_api.h"
22 #include "napi/native_node_api.h"
23 
24 #include "asset_system_type.h"
25 
26 namespace OHOS {
27 namespace Security {
28 namespace Asset {
29 
30 #define RETURN_JS_ERROR(env, errorCode, format, arg...)                                             \
31 do {                                                                                                \
32     char msg[MAX_MESSAGE_LEN] = { 0 };                                                              \
33     if ((sprintf_s(msg, MAX_MESSAGE_LEN, format, ##arg)) == -1) {                                   \
34         LOGE("[FATAL][NAPI]Failed to create message string, truncation occurred when sprintf_s.");  \
35         return CreateJsError((env), (errorCode));                                                   \
36     }                                                                                               \
37     LOGE("[FATAL][NAPI]%{public}s", (msg));                                                         \
38     return CreateJsError((env), (errorCode), (msg));                                                \
39 } while (0)
40 
41 const std::vector<uint32_t> CRITICAL_LABEL_TAGS = {
42     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1,
43     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2,
44     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3,
45     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4
46 };
47 
48 const std::vector<uint32_t> NORMAL_LABEL_TAGS = {
49     SEC_ASSET_TAG_DATA_LABEL_NORMAL_1,
50     SEC_ASSET_TAG_DATA_LABEL_NORMAL_2,
51     SEC_ASSET_TAG_DATA_LABEL_NORMAL_3,
52     SEC_ASSET_TAG_DATA_LABEL_NORMAL_4
53 };
54 
55 const std::vector<uint32_t> NORMAL_LOCAL_LABEL_TAGS = {
56     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1,
57     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2,
58     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3,
59     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4
60 };
61 
62 const std::vector<uint32_t> ACCESS_CONTROL_TAGS = {
63     SEC_ASSET_TAG_ALIAS,
64     SEC_ASSET_TAG_ACCESSIBILITY,
65     SEC_ASSET_TAG_AUTH_TYPE,
66     SEC_ASSET_TAG_IS_PERSISTENT,
67     SEC_ASSET_TAG_SYNC_TYPE,
68     SEC_ASSET_TAG_REQUIRE_PASSWORD_SET,
69     SEC_ASSET_TAG_REQUIRE_ATTR_ENCRYPTED,
70     SEC_ASSET_TAG_GROUP_ID,
71     SEC_ASSET_TAG_WRAP_TYPE,
72     SEC_ASSET_TAG_USER_ID
73 };
74 
75 const std::vector<uint32_t> ASSET_RETURN_ORDER_BY_TAGS = {
76     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1,
77     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2,
78     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3,
79     SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4,
80     SEC_ASSET_TAG_DATA_LABEL_NORMAL_1,
81     SEC_ASSET_TAG_DATA_LABEL_NORMAL_2,
82     SEC_ASSET_TAG_DATA_LABEL_NORMAL_3,
83     SEC_ASSET_TAG_DATA_LABEL_NORMAL_4,
84     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1,
85     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2,
86     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3,
87     SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4
88 };
89 
90 const std::vector<uint32_t> ASSET_SYNC_TAGS = {
91     SEC_ASSET_TAG_OPERATION_TYPE
92 };
93 
94 const std::vector<uint32_t> ASSET_ACCESSIBILITY_VEC = {
95     SEC_ASSET_ACCESSIBILITY_DEVICE_POWERED_ON,
96     SEC_ASSET_ACCESSIBILITY_DEVICE_FIRST_UNLOCKED,
97     SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED
98 };
99 
100 const std::vector<uint32_t> ASSET_AUTH_TYPE_VEC = {
101     SEC_ASSET_AUTH_TYPE_NONE,
102     SEC_ASSET_AUTH_TYPE_ANY
103 };
104 
105 const std::vector<uint32_t> ASSET_CONFLICT_RESOLUTION_VEC = {
106     SEC_ASSET_CONFLICT_OVERWRITE,
107     SEC_ASSET_CONFLICT_THROW_ERROR
108 };
109 
110 const std::vector<uint32_t> ASSET_RETURN_TYPE_VEC = {
111     SEC_ASSET_RETURN_ALL,
112     SEC_ASSET_RETURN_ATTRIBUTES
113 };
114 
115 const std::vector<uint32_t> ASSET_WRAP_TYPE_VEC = {
116     SEC_ASSET_WRAP_TYPE_NEVER,
117     SEC_ASSET_WRAP_TYPE_TRUSTED_ACCOUNT
118 };
119 
120 const std::unordered_map<uint32_t, const char *> TAG_MAP = {
121     { SEC_ASSET_TAG_SECRET, "SECRET" },
122     { SEC_ASSET_TAG_ALIAS, "ALIAS" },
123     { SEC_ASSET_TAG_ACCESSIBILITY, "ACCESSIBILITY" },
124     { SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, "REQUIRE_PASSWORD_SET" },
125     { SEC_ASSET_TAG_AUTH_TYPE, "AUTH_TYPE" },
126     { SEC_ASSET_TAG_AUTH_VALIDITY_PERIOD, "AUTH_VALIDITY_PERIOD" },
127     { SEC_ASSET_TAG_AUTH_CHALLENGE, "AUTH_CHALLENGE" },
128     { SEC_ASSET_TAG_AUTH_TOKEN, "AUTH_TOKEN" },
129     { SEC_ASSET_TAG_SYNC_TYPE, "SYNC_TYPE" },
130     { SEC_ASSET_TAG_IS_PERSISTENT, "IS_PERSISTENT" },
131     { SEC_ASSET_TAG_CONFLICT_RESOLUTION, "CONFLICT_RESOLUTION" },
132     { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1, "DATA_LABEL_CRITICAL_1" },
133     { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2, "DATA_LABEL_CRITICAL_2" },
134     { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3, "DATA_LABEL_CRITICAL_3" },
135     { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4, "DATA_LABEL_CRITICAL_4" },
136     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_1, "DATA_LABEL_NORMAL_1" },
137     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_2, "DATA_LABEL_NORMAL_2" },
138     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_3, "DATA_LABEL_NORMAL_3" },
139     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_4, "DATA_LABEL_NORMAL_4" },
140     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1, "DATA_LABEL_NORMAL_LOCAL_1" },
141     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2, "DATA_LABEL_NORMAL_LOCAL_2" },
142     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3, "DATA_LABEL_NORMAL_LOCAL_3" },
143     { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4, "DATA_LABEL_NORMAL_LOCAL_4" },
144     { SEC_ASSET_TAG_RETURN_TYPE, "RETURN_TYPE" },
145     { SEC_ASSET_TAG_RETURN_LIMIT, "RETURN_LIMIT" },
146     { SEC_ASSET_TAG_RETURN_OFFSET, "RETURN_OFFSET" },
147     { SEC_ASSET_TAG_RETURN_ORDERED_BY, "RETURN_ORDERED_BY" },
148     { SEC_ASSET_TAG_UPDATE_TIME, "UPDATE_TIME" },
149     { SEC_ASSET_TAG_OPERATION_TYPE, "OPERATION_TYPE" },
150     { SEC_ASSET_TAG_REQUIRE_ATTR_ENCRYPTED, "REQUIRE_ATTR_ENCRYPTED" },
151     { SEC_ASSET_TAG_GROUP_ID, "GROUP_ID" },
152     { SEC_ASSET_TAG_WRAP_TYPE, "WRAP_TYPE" },
153     { SEC_ASSET_TAG_USER_ID, "USER_ID" },
154 };
155 
156 napi_value CheckAssetRequiredTag(const napi_env env, const std::vector<AssetAttr> &attrs,
157     const std::vector<uint32_t> &requiredTags, uint32_t errorCode);
158 
159 napi_value CheckAssetTagValidity(const napi_env env, const std::vector<AssetAttr> &attrs,
160     const std::vector<uint32_t> &validTags, uint32_t errorCode);
161 
162 napi_value CheckAssetValueValidity(const napi_env env, const std::vector<AssetAttr> &attrs, uint32_t errorCode);
163 
164 } // Asset
165 } // Security
166 } // OHOS
167 
168 #endif // ASSET_NAPI_CHECK_H