1 /* 2 * Copyright (c) 2021-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 HKS_TYPE_INNER_H 17 #define HKS_TYPE_INNER_H 18 19 #ifdef HKS_CONFIG_FILE 20 #include HKS_CONFIG_FILE 21 #else 22 #include "hks_config.h" 23 #endif 24 25 #include "hks_type.h" 26 #include "securec.h" 27 #include "hks_plugin_def.h" 28 29 #define HANDLE_SIZE 8 30 #define DEFAULT_AUTH_TIMEOUT 5 31 32 #define HKS_CIPHER_CCM_MODE_MAX_DATA_LEN (100 * 1024) 33 34 /* EnrolledIdInfo stored format: |-enrolledId len-|-enrolledId1 type-|-enrolledId1 value-|...| */ 35 #define ENROLLED_ID_INFO_MIN_LEN (sizeof(uint32_t) + (sizeof(uint32_t) + sizeof(uint64_t))) 36 37 enum HksUserAuthResult { 38 HKS_AUTH_RESULT_NONE = -2, // not support user auth 39 HKS_AUTH_RESULT_INIT = -1, 40 HKS_AUTH_RESULT_SUCCESS = 0, 41 HKS_AUTH_RESULT_FAILED = 1, 42 }; 43 44 enum HksStageType { 45 HKS_STAGE_THREE = 0, 46 HKS_STAGE_ONE = 1, 47 }; 48 49 #ifdef HUKS_ENABLE_SKIP_UPGRADE_KEY_STORAGE_SECURE_LEVEL 50 #define HKS_AUTH_STORAGE_LEVEL_OLD_DE_TMP 99 51 #endif 52 53 #define HKS_ASSIGN_INNER_TMP_ENUM \ 54 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_APPENDED_DATA_PREFIX, HKS_TAG_TYPE_BYTES | 10020) \ 55 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_APPENDED_DATA_SUFFIX, HKS_TAG_TYPE_BYTES | 10021) \ 56 /* Inner-use TAGS used for ipc serialization */ \ 57 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM0_BUFFER, HKS_TAG_TYPE_BYTES | 30001) \ 58 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM1_BUFFER, HKS_TAG_TYPE_BYTES | 30002) \ 59 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM2_BUFFER, HKS_TAG_TYPE_BYTES | 30003) \ 60 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM3_BUFFER, HKS_TAG_TYPE_BYTES | 30004) \ 61 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM4_BUFFER, HKS_TAG_TYPE_BYTES | 30005) \ 62 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM0_UINT32, HKS_TAG_TYPE_UINT | 30006) \ 63 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM1_UINT32, HKS_TAG_TYPE_UINT | 30007) \ 64 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM2_UINT32, HKS_TAG_TYPE_UINT | 30008) \ 65 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM3_UINT32, HKS_TAG_TYPE_UINT | 30009) \ 66 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM4_UINT32, HKS_TAG_TYPE_UINT | 30010) \ 67 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM0_BOOL, HKS_TAG_TYPE_BOOL | 30011) \ 68 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM1_BOOL, HKS_TAG_TYPE_BOOL | 30012) \ 69 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM2_BOOL, HKS_TAG_TYPE_BOOL | 30013) \ 70 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM3_BOOL, HKS_TAG_TYPE_BOOL | 30014) \ 71 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM4_BOOL, HKS_TAG_TYPE_BOOL | 30015) \ 72 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM0_NULL, HKS_TAG_TYPE_BYTES | 30016) \ 73 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM1_NULL, HKS_TAG_TYPE_BYTES | 30017) \ 74 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM2_NULL, HKS_TAG_TYPE_BYTES | 30018) \ 75 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM3_NULL, HKS_TAG_TYPE_BYTES | 30019) \ 76 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_PARAM4_NULL, HKS_TAG_TYPE_BYTES | 30020) \ 77 78 #define HKS_ASSIGN_INNER_PARAM_ALG_VALUE \ 79 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_ACCESS_TOKEN_ID, HKS_TAG_TYPE_UINT | 30021) \ 80 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_BUNDLE_NAME, HKS_TAG_TYPE_BYTES | 30022) \ 81 HKS_ASSIGN_ENUM_VALUE(HKS_TAG_AES_GCM_NEED_REGENERATE_NONCE, HKS_TAG_TYPE_BOOL | 30023) \ 82 83 enum HksInnerTag { 84 HKS_ASSIGN_INNER_TMP_ENUM 85 86 HKS_ASSIGN_INNER_PARAM_ALG_VALUE 87 }; 88 89 #define HKS_PARAM_BUFFER_NULL_INTERVAL ((HKS_TAG_PARAM0_NULL) - (HKS_TAG_PARAM0_BUFFER)) 90 91 #define HKS_MAX_RETRY_TIME 30 92 #define HKS_SLEEP_TIME_FOR_RETRY 300000 93 94 struct HksParamOut { 95 uint32_t tag; 96 union { 97 bool *boolParam; 98 int32_t *int32Param; 99 uint32_t *uint32Param; 100 uint64_t *uint64Param; 101 struct HksBlob *blob; 102 }; 103 }; 104 105 struct HksKeyMaterialHeader { 106 enum HksKeyAlg keyAlg; 107 uint32_t keySize; 108 }; 109 110 #endif /* HKS_TYPE_INNER_H */ 111