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