blob: 17f7b9122c011f4740d15284dc6faf037387f955 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include <dlfcn.h>
hong.liud2417072025-06-27 07:10:37 -07002#include <stdbool.h>
b.liu68a94c92025-05-24 12:53:41 +08003#include <stdio.h>
hong.liud2417072025-06-27 07:10:37 -07004#include <stdlib.h>
b.liu68a94c92025-05-24 12:53:41 +08005#include <string.h>
6#include <stdint.h>
hong.liud2417072025-06-27 07:10:37 -07007#include "gsw_secrypt_ss_interface.h"
8#include "gsw_hal_errcode.h"
lichengzhang7715b2f2025-07-19 10:18:21 +08009#include "gsw_log_interface.h"
b.liu68a94c92025-05-24 12:53:41 +080010
l.yang6a42e4d2025-05-28 01:04:20 -070011#define GSW_TEE "[HAL][GSW_TEE]"
12
lichengzhangd7aea6c2025-06-05 16:35:54 +080013/**
14 * struct TEEC_Context - Represents a connection between a client application
15 * and a TEE.
16 */
17 typedef struct {
18 /* Implementation defined */
19 struct {
20 int fd;
21 bool reg_mem;
22 bool memref_null;
23 } imp;
24} TEEC_Context;
25
26/**
27 * struct TEEC_Session - Represents a connection between a client application
28 * and a trusted application.
29 */
30 typedef struct {
31 /* Implementation defined */
32 struct {
33 TEEC_Context *ctx;
34 uint32_t session_id;
35 } imp;
36} TEEC_Session;
37
b.liu68a94c92025-05-24 12:53:41 +080038struct test_ctx {
lichengzhangd7aea6c2025-06-05 16:35:54 +080039 TEEC_Context ctx;
40 TEEC_Session sess;
b.liu68a94c92025-05-24 12:53:41 +080041};
42
lichengzhangd7aea6c2025-06-05 16:35:54 +080043#define TEEC_SUCCESS 0x00000000
44#define TEEC_ERROR_STORAGE_NOT_AVAILABLE 0xF0100003
45#define TEEC_ERROR_GENERIC 0xFFFF0000
46#define TEEC_ERROR_ACCESS_DENIED 0xFFFF0001
47#define TEEC_ERROR_CANCEL 0xFFFF0002
48#define TEEC_ERROR_ACCESS_CONFLICT 0xFFFF0003
49#define TEEC_ERROR_EXCESS_DATA 0xFFFF0004
50#define TEEC_ERROR_BAD_FORMAT 0xFFFF0005
51#define TEEC_ERROR_BAD_PARAMETERS 0xFFFF0006
52#define TEEC_ERROR_BAD_STATE 0xFFFF0007
53#define TEEC_ERROR_ITEM_NOT_FOUND 0xFFFF0008
54#define TEEC_ERROR_NOT_IMPLEMENTED 0xFFFF0009
55#define TEEC_ERROR_NOT_SUPPORTED 0xFFFF000A
56#define TEEC_ERROR_NO_DATA 0xFFFF000B
57#define TEEC_ERROR_OUT_OF_MEMORY 0xFFFF000C
58#define TEEC_ERROR_BUSY 0xFFFF000D
59#define TEEC_ERROR_COMMUNICATION 0xFFFF000E
60#define TEEC_ERROR_SECURITY 0xFFFF000F
61#define TEEC_ERROR_SHORT_BUFFER 0xFFFF0010
62#define TEEC_ERROR_EXTERNAL_CANCEL 0xFFFF0011
63#define TEEC_ERROR_TARGET_DEAD 0xFFFF3024
b.liu68a94c92025-05-24 12:53:41 +080064
65struct test_ctx ctx;
66
67#define lib_secure_path "/lib/libsecure_storage.so"
68static void *dlHandle_secure;
69
70#define lib_mbtk_path "/lib/libmbtk_lib.so"
71static void *dlHandle_mbtk;
lichengzhang36264d62025-07-30 15:55:35 +080072#define PUBLIC_KEY_SEC_NAME "public_key_obj"
lichengzhang6965ca52025-08-08 11:28:15 +080073#define SEC_LEVEL1_SEC_NAME "sec_level1_obj"
lichengzhang36264d62025-07-30 15:55:35 +080074typedef struct
75{
76 size_t length;
77 int is_update;
78 //int is_read;
79 unsigned char *content;
80} tmp_sec;
81tmp_sec public_key_sec = {0};
82tmp_sec sec_level1_sec = {0};
b.liu68a94c92025-05-24 12:53:41 +080083
lichengzhangd7aea6c2025-06-05 16:35:54 +080084typedef uint32_t TEEC_Result;
lichengzhang7715b2f2025-07-19 10:18:21 +080085// static void (*mbtk_log)(int level, const char *format, ...);
86// static void (*mbtk_log_init)(char *path, char *tag);
b.liu68a94c92025-05-24 12:53:41 +080087
b.liu68a94c92025-05-24 12:53:41 +080088int (*prepare_tee_session)(struct test_ctx *ctx);
89void (*terminate_tee_session)(struct test_ctx *ctx);
lichengzhang0e5969b2025-07-09 11:02:55 +080090TEEC_Result (*read_secure_object)(struct test_ctx *ctx, const char *id,char *data, size_t *data_len);
b.liu68a94c92025-05-24 12:53:41 +080091TEEC_Result (*write_secure_object)(struct test_ctx *ctx, const char *id,char *data, size_t data_len);
92TEEC_Result (*delete_secure_object)(struct test_ctx *ctx, const char *id);
93
b.liu68a94c92025-05-24 12:53:41 +080094static int tee_api_import(void)
95{
96
97 dlHandle_mbtk = dlopen(lib_mbtk_path, RTLD_NOW);
98 if (dlHandle_mbtk == NULL)
99 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800100 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800101 }
102
103 dlHandle_secure = dlopen(lib_secure_path, RTLD_NOW);
104 if (dlHandle_secure == NULL)
105 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800106 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800107 }
108
lichengzhang7715b2f2025-07-19 10:18:21 +0800109 // mbtk_log_init = (void (*)(char *path, char *tag))dlsym(dlHandle_mbtk, "mbtk_log_init");
110 // if (mbtk_log_init == NULL)
111 // {
112 // return GSW_HAL_NORMAL_FAIL;
113 // }
b.liu68a94c92025-05-24 12:53:41 +0800114
lichengzhang7715b2f2025-07-19 10:18:21 +0800115 // mbtk_log = (void (*)(int level, const char *format, ...))dlsym(dlHandle_mbtk, "mbtk_log");
116 // if (mbtk_log == NULL)
117 // {
118 // return GSW_HAL_NORMAL_FAIL;
119 // }
b.liu68a94c92025-05-24 12:53:41 +0800120
121 prepare_tee_session = (int (*)(struct test_ctx *ctx))dlsym(dlHandle_secure, "prepare_tee_session");
122 if (prepare_tee_session == NULL)
123 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800124 LOGE(GSW_TEE,"prepare_tee_session dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800125 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800126 }
127
128 terminate_tee_session = (void (*)(struct test_ctx *ctx))dlsym(dlHandle_secure, "terminate_tee_session");
129 if (terminate_tee_session == NULL)
130 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800131 LOGE(GSW_TEE,"terminate_tee_session dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800132 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800133 }
134
lichengzhang0e5969b2025-07-09 11:02:55 +0800135 read_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const char *id,char *data, size_t *data_len))dlsym(dlHandle_secure, "read_secure_object");
b.liu68a94c92025-05-24 12:53:41 +0800136 if (read_secure_object == NULL)
137 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800138 LOGE(GSW_TEE,"read_secure_object dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800139 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800140 }
141
142 write_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const char *id,char *data, size_t data_len))dlsym(dlHandle_secure, "write_secure_object");
143 if (write_secure_object == NULL)
144 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800145 LOGE(GSW_TEE,"write_secure_object dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800146 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800147 }
148
149 delete_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const char *id))dlsym(dlHandle_secure, "delete_secure_object");
150 if (delete_secure_object == NULL)
151 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800152 LOGE(GSW_TEE,"delete_secure_object dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800153 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800154 }
155
156 return GSW_HAL_SUCCESS;
157}
158
159/**
160* @brief init tee sdk
161* @param [in] None
162* @param [out] None
163* @retval GSW_HAL_SUCCESS is success\other is fail
164*/
165int32_t gsw_tee_sdk_init(void)
166{
lichengzhang7715b2f2025-07-19 10:18:21 +0800167 LOGE(GSW_TEE,"init start\n");
b.liu68a94c92025-05-24 12:53:41 +0800168 int32_t ret = 0;
169 ret = tee_api_import();
170 if(ret)
171 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800172 LOGE(GSW_TEE,"tee_api_import fail\n");
b.liu68a94c92025-05-24 12:53:41 +0800173 return ret;
174 }
175 ret = prepare_tee_session(&ctx);
lichengzhang7715b2f2025-07-19 10:18:21 +0800176 LOGE(GSW_TEE,"init end\n");
lichengzhang36264d62025-07-30 15:55:35 +0800177 if (public_key_sec.content == NULL) {
178 public_key_sec.content = malloc(7000);
179 public_key_sec.length = 0;
180 public_key_sec.is_update = 0;
181 }
182
183 if (sec_level1_sec.content == NULL) {
184 sec_level1_sec.content = malloc(7000);
185 sec_level1_sec.length = 0;
186 sec_level1_sec.is_update = 0;
187 }
b.liu68a94c92025-05-24 12:53:41 +0800188 return ret;
189}
190
b.liu68a94c92025-05-24 12:53:41 +0800191/**
192* @brief read sensitive data from tee
193* @param [in] char* in_obj_name :Sensitive data name
194* @param [in] unsigned int* p_out_buf_len:The size of sensitive data output cache
195* @param [out] char* out_buf:Cache of sensitive data output
196* @param [out] unsigned int* p_out_buf_len:Sensitive data length
197* @retval GSW_HAL_SUCCESS is success\other is fail
198*/
199#define basic_buf_len 7000
200int32_t gsw_tee_read_secure_data(const char* in_obj_name, char* out_buf, unsigned int* p_out_buf_len)
201{
lichengzhang36264d62025-07-30 15:55:35 +0800202 //LOGE(GSW_TEE,"start read\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800203 if (in_obj_name == NULL || out_buf == NULL)
hong.liud2417072025-06-27 07:10:37 -0700204 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800205 return GSW_HAL_NORMAL_FAIL;
hong.liud2417072025-06-27 07:10:37 -0700206 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800207
b.liu68a94c92025-05-24 12:53:41 +0800208 int32_t ret = 0;
lichengzhang0e5969b2025-07-09 11:02:55 +0800209 size_t size = basic_buf_len;
hong.liud2417072025-06-27 07:10:37 -0700210 char *tmp_buf = (char*)malloc(basic_buf_len);
211 if (NULL == tmp_buf)
212 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800213 LOGE(GSW_TEE,"Failed malloc fail");
hong.liud2417072025-06-27 07:10:37 -0700214 return GSW_HAL_NO_MEMORY;
215 }
lichengzhang36264d62025-07-30 15:55:35 +0800216
217 bool is_pubkey = !strncmp(in_obj_name, PUBLIC_KEY_SEC_NAME, strlen(PUBLIC_KEY_SEC_NAME));
218 bool is_level1 = !strncmp(in_obj_name, SEC_LEVEL1_SEC_NAME, strlen(SEC_LEVEL1_SEC_NAME));
219
220 if (is_pubkey || is_level1)
b.liu68a94c92025-05-24 12:53:41 +0800221 {
lichengzhang36264d62025-07-30 15:55:35 +0800222 tmp_sec *target = is_pubkey ? &public_key_sec : &sec_level1_sec;
223 if (target->is_update)
224 {
225 if (target->length == 0 || target->content[0] == '\0')
226 ret = GSW_HAL_ERROR_TEE_SFS_FILE_NOEXIST;
227 else
228 {
229 memcpy(out_buf, target->content, target->length);
230 *p_out_buf_len = target->length;
231 ret = GSW_HAL_SUCCESS;
232 }
233 free(tmp_buf);
234 return ret;
235 }
236
237
238 TEEC_Result res = read_secure_object(&ctx, in_obj_name, tmp_buf, &size);
239
240 if (res == TEEC_ERROR_ITEM_NOT_FOUND)
241 {
242 LOGE(GSW_TEE, "the obj no found\n");
243 ret = GSW_HAL_ERROR_TEE_SFS_FILE_NOEXIST;
244
245 target->is_update = 1;
246 target->length = 0;
247 target->content[0] = '\0';
248 }
249 else if (res == TEEC_SUCCESS)
250 {
251 LOGE(GSW_TEE, "the obj is exist\n");
252 memcpy(target->content, tmp_buf, size);
253
254 target->length = size;
255 target->is_update = 1;
256
257 memcpy(out_buf, tmp_buf, size);
258 *p_out_buf_len = size;
259
260 ret = GSW_HAL_SUCCESS;
261 }
262 else
263 {
264 LOGE(GSW_TEE,"Failed to read an object from the secure storage");
265 ret = GSW_HAL_NORMAL_FAIL;
266 }
267
lichengzhang55aed352025-07-11 18:30:08 +0800268 free(tmp_buf);
269 return ret;
b.liu68a94c92025-05-24 12:53:41 +0800270 }
lichengzhang36264d62025-07-30 15:55:35 +0800271
272 TEEC_Result res = read_secure_object(&ctx, in_obj_name, tmp_buf, &size);
273 if (res == TEEC_ERROR_ITEM_NOT_FOUND)
274 {
275 LOGE(GSW_TEE,"the obj no found\n");
276 ret = GSW_HAL_ERROR_TEE_SFS_FILE_NOEXIST;
277 }
278 else if (res == TEEC_SUCCESS)
279 {
280 LOGE(GSW_TEE,"the obj is exist\n");
281 memcpy(out_buf, tmp_buf, size);
282 *p_out_buf_len = size;
283 ret = GSW_HAL_SUCCESS;
284 }
285 else
286 {
287 LOGE(GSW_TEE,"Failed to read an object from the secure storage");
288 ret = GSW_HAL_NORMAL_FAIL;
289 }
290
lichengzhangd7aea6c2025-06-05 16:35:54 +0800291 free(tmp_buf);
lichengzhang36264d62025-07-30 15:55:35 +0800292 return ret;
b.liu68a94c92025-05-24 12:53:41 +0800293}
294
b.liu68a94c92025-05-24 12:53:41 +0800295/**
296* @brief write sensitive data to tee
297* @param [in] char* in_obj_name :Sensitive data name
298* @param [in] char* in_buf:A cache for writing sensitive data
299* @param [out] unsigned int in_buf_len:Sensitive data length
300* @retval GSW_HAL_SUCCESS is success\other is fail
301*/
302int32_t gsw_tee_write_secure_data(const char* in_obj_name, char* in_buf, unsigned int in_buf_len)
303{
lichengzhang7715b2f2025-07-19 10:18:21 +0800304 LOGE(GSW_TEE,"write start\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800305 if (in_obj_name == NULL || in_buf == NULL)
306 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800307 int32_t ret = 0;
hong.liud2417072025-06-27 07:10:37 -0700308
309 TEEC_Result res = write_secure_object(&ctx, in_obj_name,in_buf, in_buf_len);
b.liu68a94c92025-05-24 12:53:41 +0800310 if (res != TEEC_SUCCESS)
311 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800312 LOGE(GSW_TEE,"Failed to write an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800313 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800314 }
lichengzhang36264d62025-07-30 15:55:35 +0800315 bool is_pubkey = !strncmp(in_obj_name, PUBLIC_KEY_SEC_NAME, strlen(PUBLIC_KEY_SEC_NAME));
316 bool is_level1 = !strncmp(in_obj_name, SEC_LEVEL1_SEC_NAME, strlen(SEC_LEVEL1_SEC_NAME));
317 if (is_pubkey || is_level1)
318 {
319 tmp_sec *target = is_pubkey ? &public_key_sec : &sec_level1_sec;
320 target->is_update = 0;
321 }
lichengzhang7715b2f2025-07-19 10:18:21 +0800322 LOGE(GSW_TEE,"write really end\n");
b.liu68a94c92025-05-24 12:53:41 +0800323 return ret;
324}
325
326
327/**
328* @brief delete sensitive data from tee
329* @param [in] char* in_obj_name :Sensitive data name
330* @retval GSW_HAL_SUCCESS is success\other is fail
331*/
332int32_t gsw_tee_delete_secure_data(const char* in_obj_name)
333{
lichengzhang7715b2f2025-07-19 10:18:21 +0800334 LOGE(GSW_TEE,"delete start\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800335 if (in_obj_name == NULL)
336 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800337 int32_t ret = 0;
hong.liud2417072025-06-27 07:10:37 -0700338
339 TEEC_Result res = delete_secure_object(&ctx, in_obj_name);
b.liu68a94c92025-05-24 12:53:41 +0800340 if (res != TEEC_SUCCESS)
341 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800342 LOGE(GSW_TEE,"Failed to delete the object: 0x%x", res);
lichengzhangd7aea6c2025-06-05 16:35:54 +0800343 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800344 }
lichengzhang36264d62025-07-30 15:55:35 +0800345 bool is_pubkey = !strncmp(in_obj_name, PUBLIC_KEY_SEC_NAME, strlen(PUBLIC_KEY_SEC_NAME));
346 bool is_level1 = !strncmp(in_obj_name, SEC_LEVEL1_SEC_NAME, strlen(SEC_LEVEL1_SEC_NAME));
347 if (is_pubkey || is_level1)
348 {
349 tmp_sec *target = is_pubkey ? &public_key_sec : &sec_level1_sec;
350 target->length = 0;
351 }
lichengzhang7715b2f2025-07-19 10:18:21 +0800352 LOGE(GSW_TEE,"delete really end\n");
b.liu68a94c92025-05-24 12:53:41 +0800353 return ret;
b.liu68a94c92025-05-24 12:53:41 +0800354}
355
356/**
357* @brief check sensitive data from tee
358* @param [in] char* in_obj_name :Sensitive data name
359* @retval GSW_HAL_SUCCESS is exist\ other is not exist or fail
360*/
361int32_t gsw_tee_check_secure_data(const char* in_obj_name)
362{
lichengzhangd7aea6c2025-06-05 16:35:54 +0800363 if (in_obj_name == NULL)
364 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800365 int32_t ret = 1;
lichengzhang0e5969b2025-07-09 11:02:55 +0800366 size_t size = basic_buf_len;
hong.liud2417072025-06-27 07:10:37 -0700367 char *tmp_buf = (char*)malloc(basic_buf_len);
368 if (NULL == tmp_buf)
369 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800370 LOGE(GSW_TEE,"Failed malloc fail");
hong.liud2417072025-06-27 07:10:37 -0700371 return GSW_HAL_NO_MEMORY;
372 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800373 TEEC_Result res = read_secure_object(&ctx, in_obj_name, tmp_buf, &size);
b.liu68a94c92025-05-24 12:53:41 +0800374 if (res == TEEC_ERROR_ITEM_NOT_FOUND)
375 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800376 LOGE(GSW_TEE,"the obj no found\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800377 ret = GSW_HAL_ERROR_TEE_SFS_FILE_NOEXIST;
b.liu68a94c92025-05-24 12:53:41 +0800378 }
379 else if (res == TEEC_SUCCESS)
380 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800381 LOGE(GSW_TEE,"the obj is exist\n");
b.liu68a94c92025-05-24 12:53:41 +0800382 ret = GSW_HAL_SUCCESS;
383 }
384 else
385 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800386 LOGE(GSW_TEE,"Failed to read an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800387 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800388 }
lichengzhangd7aea6c2025-06-05 16:35:54 +0800389 free(tmp_buf);
b.liu68a94c92025-05-24 12:53:41 +0800390 return ret;
391}
392
lichengzhangd7aea6c2025-06-05 16:35:54 +0800393/**
394* @brief deinit tee sdk
395* @param [in] None
396* @param [out] None
397* @retval GSW_HAL_SUCCESS is success\other is fail
398*/
b.liu68a94c92025-05-24 12:53:41 +0800399int32_t gsw_tee_sdk_deinit(void)
400{
lichengzhang7715b2f2025-07-19 10:18:21 +0800401 LOGE(GSW_TEE,"deinit start\n");
b.liu68a94c92025-05-24 12:53:41 +0800402 if (terminate_tee_session) {
403 terminate_tee_session(&ctx); // 终止TEE会话
404 terminate_tee_session = NULL;
405 }
406
407 if (dlHandle_secure) {
408 dlclose(dlHandle_secure); // 卸载安全库
409 dlHandle_secure = NULL;
410 }
411
412 if (dlHandle_mbtk) {
413 dlclose(dlHandle_mbtk); // 卸载日志库
414 dlHandle_mbtk = NULL;
415 }
lichengzhang7715b2f2025-07-19 10:18:21 +0800416 LOGE(GSW_TEE,"deinit end\n");
b.liu68a94c92025-05-24 12:53:41 +0800417 return GSW_HAL_SUCCESS;
418}
419
hong.liud2417072025-06-27 07:10:37 -0700420int32_t gsw_secure_init(void)
421{
422 static int s_init_flag = 0;
423 if (0xAA55 == s_init_flag)
424 {
425 return GSW_HAL_SUCCESS;
426 }
427 if (GSW_HAL_SUCCESS == gsw_tee_sdk_init())
428 {
429 s_init_flag = 0xAA55;
430 return GSW_HAL_SUCCESS;
431 }
lichengzhang7715b2f2025-07-19 10:18:21 +0800432 LOGE(GSW_TEE,"secure sdk init fail!!!");
hong.liud2417072025-06-27 07:10:37 -0700433 return GSW_HAL_NORMAL_FAIL;
434}
435
436int32_t gsw_secure_storage_query(const char *objname, int32_t *exist_state)
437{
438#if 0
439 if (NULL == objname || NULL == exist_state)
440 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800441 LOGE(GSW_TEE,"storage query input param error objname %p, exist_state %p",objname, exist_state);
hong.liud2417072025-06-27 07:10:37 -0700442 return GSW_HAL_ARG_INVALID;
443 }
444 int32_t ret = gsw_secure_init();
445 if (GSW_HAL_SUCCESS != ret)
446 {
447 return ret;
448 }
449 ret = gsw_tee_check_secure_data(objname);
450 if (GSW_HAL_SUCCESS == ret)
451 {
452 *exist_state = 1; //表明数据存在
453 }
454 else
455 {
456 *exist_state = 0;
457 }
458 return ret;
459#else
460 return GSW_HAL_NO_SUPPROT;
461#endif
462}
463
464int32_t gsw_secure_storage_read(const char *objname, uint8_t *outbuf, uint32_t buflen, uint32_t *outlen)
465{
466#if 0
467 if (NULL == objname || NULL == outbuf || NULL == outlen)
468 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800469 LOGE(GSW_TEE,"storage read input param error objname %p, outbuf %p, outlen %p",objname, outbuf, outlen);
hong.liud2417072025-06-27 07:10:37 -0700470 return GSW_HAL_ARG_INVALID;
471 }
472 int32_t ret = gsw_secure_init();
473 if (GSW_HAL_SUCCESS != ret)
474 {
475 return ret;
476 }
477 *outlen = buflen;
478 return gsw_tee_read_secure_data(objname, (char*)outbuf, outlen);
479#else
480 return GSW_HAL_NO_SUPPROT;
481#endif
482
483}
484
485int32_t gsw_secure_storage_write(const char *objname, const uint8_t *inbuf, uint32_t inlen)
486{
487#if 0
488 if (NULL == objname || NULL == inbuf || 0 == inlen)
489 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800490 LOGE(GSW_TEE,"storage write input param error objname %p, outbuf %p, inlen %u",objname, inbuf, inlen);
hong.liud2417072025-06-27 07:10:37 -0700491 return GSW_HAL_ARG_INVALID;
492 }
493 int32_t ret = gsw_secure_init();
494 if (GSW_HAL_SUCCESS != ret)
495 {
496 return ret;
497 }
498 return gsw_tee_write_secure_data(objname, (char*)inbuf, inlen);
499#else
500 return GSW_HAL_NO_SUPPROT;
501#endif
502}
503
504int32_t gsw_secure_storage_delete(const char *objname)
505{
506#if 0
507 if (NULL == objname)
508 {
lichengzhang7715b2f2025-07-19 10:18:21 +0800509 LOGE(GSW_TEE,"storage delete input param error objname %p",objname);
hong.liud2417072025-06-27 07:10:37 -0700510 return GSW_HAL_ARG_INVALID;
511 }
512 int32_t ret = gsw_secure_init();
513 if (GSW_HAL_SUCCESS != ret)
514 {
515 return ret;
516 }
517 return gsw_tee_delete_secure_data(objname);
518#else
519 return GSW_HAL_NO_SUPPROT;
520#endif
521}