1 /* 2 * Copyright (c) 2024 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 NAPI_THROW_INVALID_ARGUMENT(env, 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 break; \ 36 } \ 37 LOGE("[FATAL][NAPI]%{public}s", (msg)); \ 38 napi_throw((env), CreateJsError((env), SEC_ASSET_INVALID_ARGUMENT, (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_USER_ID 71 }; 72 73 const std::vector<uint32_t> ASSET_RETURN_ORDER_BY_TAGS = { 74 SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1, 75 SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2, 76 SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3, 77 SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4, 78 SEC_ASSET_TAG_DATA_LABEL_NORMAL_1, 79 SEC_ASSET_TAG_DATA_LABEL_NORMAL_2, 80 SEC_ASSET_TAG_DATA_LABEL_NORMAL_3, 81 SEC_ASSET_TAG_DATA_LABEL_NORMAL_4, 82 SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1, 83 SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2, 84 SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3, 85 SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4 86 }; 87 88 const std::vector<uint32_t> ASSET_SYNC_TAGS = { 89 SEC_ASSET_TAG_OPERATION_TYPE 90 }; 91 92 const std::vector<uint32_t> ASSET_ACCESSIBILITY_VEC = { 93 SEC_ASSET_ACCESSIBILITY_DEVICE_POWERED_ON, 94 SEC_ASSET_ACCESSIBILITY_DEVICE_FIRST_UNLOCKED, 95 SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED 96 }; 97 98 const std::vector<uint32_t> ASSET_AUTH_TYPE_VEC = { 99 SEC_ASSET_AUTH_TYPE_NONE, 100 SEC_ASSET_AUTH_TYPE_ANY 101 }; 102 103 const std::vector<uint32_t> ASSET_CONFLICT_RESOLUTION_VEC = { 104 SEC_ASSET_CONFLICT_OVERWRITE, 105 SEC_ASSET_CONFLICT_THROW_ERROR 106 }; 107 108 const std::vector<uint32_t> ASSET_RETURN_TYPE_VEC = { 109 SEC_ASSET_RETURN_ALL, 110 SEC_ASSET_RETURN_ATTRIBUTES 111 }; 112 113 const std::unordered_map<uint32_t, const char *> TAG_MAP = { 114 { SEC_ASSET_TAG_SECRET, "SECRET" }, 115 { SEC_ASSET_TAG_ALIAS, "ALIAS" }, 116 { SEC_ASSET_TAG_ACCESSIBILITY, "ACCESSIBILITY" }, 117 { SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, "REQUIRE_PASSWORD_SET" }, 118 { SEC_ASSET_TAG_AUTH_TYPE, "AUTH_TYPE" }, 119 { SEC_ASSET_TAG_AUTH_VALIDITY_PERIOD, "AUTH_VALIDITY_PERIOD" }, 120 { SEC_ASSET_TAG_AUTH_CHALLENGE, "AUTH_CHALLENGE" }, 121 { SEC_ASSET_TAG_AUTH_TOKEN, "AUTH_TOKEN" }, 122 { SEC_ASSET_TAG_SYNC_TYPE, "SYNC_TYPE" }, 123 { SEC_ASSET_TAG_IS_PERSISTENT, "IS_PERSISTENT" }, 124 { SEC_ASSET_TAG_CONFLICT_RESOLUTION, "CONFLICT_RESOLUTION" }, 125 { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1, "DATA_LABEL_CRITICAL_1" }, 126 { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2, "DATA_LABEL_CRITICAL_2" }, 127 { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3, "DATA_LABEL_CRITICAL_3" }, 128 { SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4, "DATA_LABEL_CRITICAL_4" }, 129 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_1, "DATA_LABEL_NORMAL_1" }, 130 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_2, "DATA_LABEL_NORMAL_2" }, 131 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_3, "DATA_LABEL_NORMAL_3" }, 132 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_4, "DATA_LABEL_NORMAL_4" }, 133 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1, "DATA_LABEL_NORMAL_LOCAL_1" }, 134 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2, "DATA_LABEL_NORMAL_LOCAL_2" }, 135 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3, "DATA_LABEL_NORMAL_LOCAL_3" }, 136 { SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4, "DATA_LABEL_NORMAL_LOCAL_4" }, 137 { SEC_ASSET_TAG_RETURN_TYPE, "RETURN_TYPE" }, 138 { SEC_ASSET_TAG_RETURN_LIMIT, "RETURN_LIMIT" }, 139 { SEC_ASSET_TAG_RETURN_OFFSET, "RETURN_OFFSET" }, 140 { SEC_ASSET_TAG_RETURN_ORDERED_BY, "RETURN_ORDERED_BY" }, 141 { SEC_ASSET_TAG_UPDATE_TIME, "UPDATE_TIME" }, 142 { SEC_ASSET_TAG_OPERATION_TYPE, "OPERATION_TYPE" }, 143 { SEC_ASSET_TAG_REQUIRE_ATTR_ENCRYPTED, "REQUIRE_ATTR_ENCRYPTED" }, 144 { SEC_ASSET_TAG_USER_ID, "USER_ID" }, 145 }; 146 147 bool CheckAssetRequiredTag(const napi_env env, const std::vector<AssetAttr> &attrs, 148 const std::vector<uint32_t> &requiredTags); 149 150 bool CheckAssetTagValidity(const napi_env env, const std::vector<AssetAttr> &attrs, 151 const std::vector<uint32_t> &validTags); 152 153 bool CheckAssetValueValidity(const napi_env env, const std::vector<AssetAttr> &attrs); 154 155 } // Asset 156 } // Security 157 } // OHOS 158 159 #endif // ASSET_NAPI_CHECK_H