• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3  * Licensed under the Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  *     http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8  * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9  * PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  */
12 
13 #ifndef TA_CONFIG_BUILDER_H
14 #define TA_CONFIG_BUILDER_H
15 
16 #include <tee_defines.h>
17 #include "dyn_conf_dispatch_inf.h"
18 
19 enum ta_config_tags {
20     CONFIGINFO = 0x0,
21     CONFIGINFO_TA_BASIC_INFO = 0x1,
22     CONFIGINFO_TA_BASIC_INFO_SERVICE_NAME,
23     CONFIGINFO_TA_BASIC_INFO_SERVICE_NAME_SERVICE_NAME,
24     CONFIGINFO_TA_BASIC_INFO_UUID,
25     CONFIGINFO_TA_BASIC_INFO_UUID_UUID,
26     CONFIGINFO_TA_MANIFEST_INFO,
27     CONFIGINFO_TA_MANIFEST_INFO_INSTANCE_KEEP_ALIVE,
28     CONFIGINFO_TA_MANIFEST_INFO_INSTANCE_KEEP_ALIVE_INSTANCE_KEEP_ALIVE,
29     CONFIGINFO_TA_MANIFEST_INFO_STACK_SIZE,
30     CONFIGINFO_TA_MANIFEST_INFO_STACK_SIZE_STACK_SIZE,
31     CONFIGINFO_TA_MANIFEST_INFO_HEAP_SIZE,
32     CONFIGINFO_TA_MANIFEST_INFO_HEAP_SIZE_HEAP_SIZE,
33     CONFIGINFO_TA_MANIFEST_INFO_TARGET_TYPE,
34     CONFIGINFO_TA_MANIFEST_INFO_TARGET_TYPE_TARGET_TYPE,
35     CONFIGINFO_TA_MANIFEST_INFO_MULTI_COMMAND,
36     CONFIGINFO_TA_MANIFEST_INFO_MULTI_COMMAND_MULTI_COMMAND,
37     CONFIGINFO_TA_MANIFEST_INFO_MULTI_SESSION,
38     CONFIGINFO_TA_MANIFEST_INFO_MULTI_SESSION_MULTI_SESSION,
39     CONFIGINFO_TA_MANIFEST_INFO_SINGLE_INSTANCE,
40     CONFIGINFO_TA_MANIFEST_INFO_SINGLE_INSTANCE_SINGLE_INSTANCE,
41     CONFIGINFO_TA_CONTROL_INFO,
42 #if defined(CONFIG_APP_TEE_SE)
43     CONFIGINFO_TA_CONTROL_INFO_SE_INFO,
44     CONFIGINFO_TA_CONTROL_INFO_SE_INFO_SE_OPEN_SESSION,
45     CONFIGINFO_TA_CONTROL_INFO_SE_INFO_SE_OPEN_SESSION_SE_OPEN_SESSION,
46 #endif
47     CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO,
48     CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_STATUS,
49     CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_STATUS_DEBUG_STATUS,
50     CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_DEVICE_ID,
51     CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_DEVICE_ID_DEBUG_DEVICE_ID,
52     CONFIGINFO_UNUSED,
53 };
54 
55 #define SE_OPEN_SESSION_PERMISSION   0x01U
56 #define CERT_GENERAL_PERMISSION      0x01U
57 
58 /* CN format in TA's certificate: "uuid string" + "_" + "service name" */
59 #define TA_CERT_MAX_CN_INFO_LEN   64
60 #define TA_CERT_CN_UNDERLINE_SIZE 1
61 #define UUID_STR_LEN              36
62 #define TLV_DEVICE_ID_LEN         64U
63 #define POLICY_OLD_VERSION        0
64 #define POLICY_VERSION_ONE        1
65 #define MAX_CALLEE_TA_COUNT       100
66 #define MAX_CALLEE_COMMAND_COUNT  100
67 #define DEVICE_ID_LEN             32
68 #define LEN_OFFSET_VALUE          4U
69 #define MAX_SERVICE_NAME_LEN 40
70 
71 struct ta_manifest_info {
72     bool single_instance;
73     bool multi_session;
74     bool multi_command;
75     bool instance_keep_alive;
76     uint32_t heap_size;
77     uint32_t stack_size;
78     bool mem_page_align;
79     uint32_t target_type;
80     bool sys_verify_ta;
81 };
82 
83 struct ta_sfs_info {
84     uint64_t permissions;
85 };
86 
87 struct ta_se_info {
88     uint64_t permissions;
89 };
90 
91 struct ta_cert_perm_info {
92     uint64_t permissions;
93 };
94 
95 struct ta_debug_info {
96     bool status;
97     bool valid_device;
98 };
99 
100 struct callee_ta_info {
101     struct callee_ta_info *next;
102     TEE_UUID uuid;
103     uint32_t command_num;
104     uint32_t *command_id;
105 };
106 
107 struct ta_control_info {
108     struct ta_sfs_info sfs_info;
109     struct ta_se_info se_info;
110     struct ta_cert_perm_info cert_info;
111     uint32_t ta_manager;
112     struct callee_ta_info *callee_info;
113     struct ta_debug_info debug_info;
114 };
115 struct config_info {
116     struct dlist_node head;
117     TEE_UUID uuid;
118     char service_name[MAX_SERVICE_NAME_LEN];
119     uint32_t service_name_len;
120     uint32_t version;
121     struct ta_manifest_info manifest_info;
122     struct ta_control_info control_info;
123     struct dlist_node task_config_list;
124 };
125 
126 int32_t install_ta_config(void *obj, uint32_t obj_size, const struct conf_queue_t *conf_queue);
127 TEE_Result check_device_id(struct config_info *config, const uint8_t *buff, uint32_t len);
128 
129 #endif
130