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