blob: 60132272abd36dfe668b54564661d395e968981c [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"
b.liu68a94c92025-05-24 12:53:41 +08009
10#ifndef LOG_ERR_LEVEL
11#define LOG_ERR_LEVEL 3 /* error conditions */
12#endif
13#ifndef LOG_WARN_LEVEL
14#define LOG_WARN_LEVEL 4 /* warning conditions */
15#endif
16#ifndef LOG_INFO_LEVEL
17#define LOG_INFO_LEVEL 6 /* informational */
18#endif
19#ifndef LOG_DEBUG_LEVEL
20#define LOG_DEBUG_LEVEL 7 /* debug-level messages */
21#endif
22#ifndef LOG_VERBOSE_LEVEL
23#define LOG_VERBOSE_LEVEL 8
24#endif
25
l.yang6a42e4d2025-05-28 01:04:20 -070026#define GSW_TEE "[HAL][GSW_TEE]"
27
b.liu68a94c92025-05-24 12:53:41 +080028#define LOGV(fmt, args ...) \
29 do{ \
30 char *file_ptr_1001 = __FILE__; \
31 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
32 char line_1001[10] = {0}; \
33 sprintf(line_1001, "%d", __LINE__); \
34 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
35 if(*ptr_1001 == '/') \
36 break; \
37 ptr_1001--; \
38 } \
l.yang6a42e4d2025-05-28 01:04:20 -070039 mbtk_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_TEE"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080040 } while(0)
41
42#define LOGI(fmt, args...) \
43 do{ \
44 char *file_ptr_1001 = __FILE__; \
45 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
46 char line_1001[10] = {0}; \
47 sprintf(line_1001, "%d", __LINE__); \
48 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
49 if(*ptr_1001 == '/') \
50 break; \
51 ptr_1001--; \
52 } \
l.yang6a42e4d2025-05-28 01:04:20 -070053 mbtk_log(LOG_INFO_LEVEL, "%s#%s: "GSW_TEE"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080054 } while(0)
55
56#define LOGD(fmt, args...) \
57 do{ \
58 char *file_ptr_1001 = __FILE__; \
59 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
60 char line_1001[10] = {0}; \
61 sprintf(line_1001, "%d", __LINE__); \
62 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
63 if(*ptr_1001 == '/') \
64 break; \
65 ptr_1001--; \
66 } \
l.yang6a42e4d2025-05-28 01:04:20 -070067 mbtk_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_TEE"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080068 } while(0)
69
70#define LOGW(fmt, args...) \
71 do{ \
72 char *file_ptr_1001 = __FILE__; \
73 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
74 char line_1001[10] = {0}; \
75 sprintf(line_1001, "%d", __LINE__); \
76 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
77 if(*ptr_1001 == '/') \
78 break; \
79 ptr_1001--; \
80 } \
l.yang6a42e4d2025-05-28 01:04:20 -070081 mbtk_log(LOG_WARN_LEVEL, "%s#%s: "GSW_TEE"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080082 } while(0)
83
84#define LOGE(fmt, args...) \
85 do{ \
86 char *file_ptr_1001 = __FILE__; \
87 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
88 char line_1001[10] = {0}; \
89 sprintf(line_1001, "%d", __LINE__); \
90 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
91 if(*ptr_1001 == '/') \
92 break; \
93 ptr_1001--; \
94 } \
l.yang6a42e4d2025-05-28 01:04:20 -070095 mbtk_log(LOG_ERR_LEVEL, "%s#%s: "GSW_TEE"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080096 } while(0)
97
lichengzhangd7aea6c2025-06-05 16:35:54 +080098/**
99 * struct TEEC_Context - Represents a connection between a client application
100 * and a TEE.
101 */
102 typedef struct {
103 /* Implementation defined */
104 struct {
105 int fd;
106 bool reg_mem;
107 bool memref_null;
108 } imp;
109} TEEC_Context;
110
111/**
112 * struct TEEC_Session - Represents a connection between a client application
113 * and a trusted application.
114 */
115 typedef struct {
116 /* Implementation defined */
117 struct {
118 TEEC_Context *ctx;
119 uint32_t session_id;
120 } imp;
121} TEEC_Session;
122
b.liu68a94c92025-05-24 12:53:41 +0800123struct test_ctx {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800124 TEEC_Context ctx;
125 TEEC_Session sess;
b.liu68a94c92025-05-24 12:53:41 +0800126};
127
lichengzhangd7aea6c2025-06-05 16:35:54 +0800128#define TEEC_SUCCESS 0x00000000
129#define TEEC_ERROR_STORAGE_NOT_AVAILABLE 0xF0100003
130#define TEEC_ERROR_GENERIC 0xFFFF0000
131#define TEEC_ERROR_ACCESS_DENIED 0xFFFF0001
132#define TEEC_ERROR_CANCEL 0xFFFF0002
133#define TEEC_ERROR_ACCESS_CONFLICT 0xFFFF0003
134#define TEEC_ERROR_EXCESS_DATA 0xFFFF0004
135#define TEEC_ERROR_BAD_FORMAT 0xFFFF0005
136#define TEEC_ERROR_BAD_PARAMETERS 0xFFFF0006
137#define TEEC_ERROR_BAD_STATE 0xFFFF0007
138#define TEEC_ERROR_ITEM_NOT_FOUND 0xFFFF0008
139#define TEEC_ERROR_NOT_IMPLEMENTED 0xFFFF0009
140#define TEEC_ERROR_NOT_SUPPORTED 0xFFFF000A
141#define TEEC_ERROR_NO_DATA 0xFFFF000B
142#define TEEC_ERROR_OUT_OF_MEMORY 0xFFFF000C
143#define TEEC_ERROR_BUSY 0xFFFF000D
144#define TEEC_ERROR_COMMUNICATION 0xFFFF000E
145#define TEEC_ERROR_SECURITY 0xFFFF000F
146#define TEEC_ERROR_SHORT_BUFFER 0xFFFF0010
147#define TEEC_ERROR_EXTERNAL_CANCEL 0xFFFF0011
148#define TEEC_ERROR_TARGET_DEAD 0xFFFF3024
b.liu68a94c92025-05-24 12:53:41 +0800149
150struct test_ctx ctx;
151
152#define lib_secure_path "/lib/libsecure_storage.so"
153static void *dlHandle_secure;
154
155#define lib_mbtk_path "/lib/libmbtk_lib.so"
156static void *dlHandle_mbtk;
157
lichengzhangd7aea6c2025-06-05 16:35:54 +0800158typedef uint32_t TEEC_Result;
b.liu68a94c92025-05-24 12:53:41 +0800159static void (*mbtk_log)(int level, const char *format, ...);
160static void (*mbtk_log_init)(char *path, char *tag);
161
b.liu68a94c92025-05-24 12:53:41 +0800162int (*prepare_tee_session)(struct test_ctx *ctx);
163void (*terminate_tee_session)(struct test_ctx *ctx);
lichengzhang0e5969b2025-07-09 11:02:55 +0800164TEEC_Result (*read_secure_object)(struct test_ctx *ctx, const char *id,char *data, size_t *data_len);
b.liu68a94c92025-05-24 12:53:41 +0800165TEEC_Result (*write_secure_object)(struct test_ctx *ctx, const char *id,char *data, size_t data_len);
166TEEC_Result (*delete_secure_object)(struct test_ctx *ctx, const char *id);
167
b.liu68a94c92025-05-24 12:53:41 +0800168static int tee_api_import(void)
169{
170
171 dlHandle_mbtk = dlopen(lib_mbtk_path, RTLD_NOW);
172 if (dlHandle_mbtk == NULL)
173 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800174 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800175 }
176
177 dlHandle_secure = dlopen(lib_secure_path, RTLD_NOW);
178 if (dlHandle_secure == NULL)
179 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800180 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800181 }
182
183 mbtk_log_init = (void (*)(char *path, char *tag))dlsym(dlHandle_mbtk, "mbtk_log_init");
184 if (mbtk_log_init == NULL)
185 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800186 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800187 }
188
189 mbtk_log = (void (*)(int level, const char *format, ...))dlsym(dlHandle_mbtk, "mbtk_log");
190 if (mbtk_log == NULL)
191 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800192 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800193 }
194
195 prepare_tee_session = (int (*)(struct test_ctx *ctx))dlsym(dlHandle_secure, "prepare_tee_session");
196 if (prepare_tee_session == NULL)
197 {
198 LOGE("prepare_tee_session dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800199 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800200 }
201
202 terminate_tee_session = (void (*)(struct test_ctx *ctx))dlsym(dlHandle_secure, "terminate_tee_session");
203 if (terminate_tee_session == NULL)
204 {
205 LOGE("terminate_tee_session dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800206 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800207 }
208
lichengzhang0e5969b2025-07-09 11:02:55 +0800209 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 +0800210 if (read_secure_object == NULL)
211 {
212 LOGE("read_secure_object dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800213 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800214 }
215
216 write_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const char *id,char *data, size_t data_len))dlsym(dlHandle_secure, "write_secure_object");
217 if (write_secure_object == NULL)
218 {
219 LOGE("write_secure_object dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800220 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800221 }
222
223 delete_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const char *id))dlsym(dlHandle_secure, "delete_secure_object");
224 if (delete_secure_object == NULL)
225 {
226 LOGE("delete_secure_object dlsym fail\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800227 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800228 }
229
230 return GSW_HAL_SUCCESS;
231}
232
233/**
234* @brief init tee sdk
235* @param [in] None
236* @param [out] None
237* @retval GSW_HAL_SUCCESS is success\other is fail
238*/
239int32_t gsw_tee_sdk_init(void)
240{
241 int32_t ret = 0;
242 ret = tee_api_import();
243 if(ret)
244 {
245 LOGE("tee_api_import fail\n");
246 return ret;
247 }
248 ret = prepare_tee_session(&ctx);
lichengzhang0e5969b2025-07-09 11:02:55 +0800249 LOGE("init end\n");
b.liu68a94c92025-05-24 12:53:41 +0800250 return ret;
251}
252
b.liu68a94c92025-05-24 12:53:41 +0800253/**
254* @brief read sensitive data from tee
255* @param [in] char* in_obj_name :Sensitive data name
256* @param [in] unsigned int* p_out_buf_len:The size of sensitive data output cache
257* @param [out] char* out_buf:Cache of sensitive data output
258* @param [out] unsigned int* p_out_buf_len:Sensitive data length
259* @retval GSW_HAL_SUCCESS is success\other is fail
260*/
261#define basic_buf_len 7000
262int32_t gsw_tee_read_secure_data(const char* in_obj_name, char* out_buf, unsigned int* p_out_buf_len)
263{
lichengzhang0e5969b2025-07-09 11:02:55 +0800264 LOGE("start read\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800265 if (in_obj_name == NULL || out_buf == NULL)
hong.liud2417072025-06-27 07:10:37 -0700266 {
lichengzhangd7aea6c2025-06-05 16:35:54 +0800267 return GSW_HAL_NORMAL_FAIL;
hong.liud2417072025-06-27 07:10:37 -0700268 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800269
b.liu68a94c92025-05-24 12:53:41 +0800270 int32_t ret = 0;
lichengzhang0e5969b2025-07-09 11:02:55 +0800271 size_t size = basic_buf_len;
hong.liud2417072025-06-27 07:10:37 -0700272 char *tmp_buf = (char*)malloc(basic_buf_len);
273 if (NULL == tmp_buf)
274 {
275 LOGE("Failed malloc fail");
276 return GSW_HAL_NO_MEMORY;
277 }
278
lichengzhang0e5969b2025-07-09 11:02:55 +0800279 TEEC_Result res = read_secure_object(&ctx, in_obj_name, tmp_buf, &size);
b.liu68a94c92025-05-24 12:53:41 +0800280 if (res != TEEC_SUCCESS)
281 {
282 LOGE("Failed to read an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800283 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800284 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800285 LOGE("really start end\n");
286 memcpy(out_buf, tmp_buf, size);
287 *p_out_buf_len = size;
lichengzhangd7aea6c2025-06-05 16:35:54 +0800288 free(tmp_buf);
b.liu68a94c92025-05-24 12:53:41 +0800289 return ret;
290}
291
b.liu68a94c92025-05-24 12:53:41 +0800292/**
293* @brief write sensitive data to tee
294* @param [in] char* in_obj_name :Sensitive data name
295* @param [in] char* in_buf:A cache for writing sensitive data
296* @param [out] unsigned int in_buf_len:Sensitive data length
297* @retval GSW_HAL_SUCCESS is success\other is fail
298*/
299int32_t gsw_tee_write_secure_data(const char* in_obj_name, char* in_buf, unsigned int in_buf_len)
300{
lichengzhang0e5969b2025-07-09 11:02:55 +0800301 LOGE("write start\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800302 if (in_obj_name == NULL || in_buf == NULL)
303 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800304 int32_t ret = 0;
hong.liud2417072025-06-27 07:10:37 -0700305
306 TEEC_Result res = write_secure_object(&ctx, in_obj_name,in_buf, in_buf_len);
b.liu68a94c92025-05-24 12:53:41 +0800307 if (res != TEEC_SUCCESS)
308 {
309 LOGE("Failed to write an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800310 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800311 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800312 LOGE("write really end\n");
b.liu68a94c92025-05-24 12:53:41 +0800313 return ret;
314}
315
316
317/**
318* @brief delete sensitive data from tee
319* @param [in] char* in_obj_name :Sensitive data name
320* @retval GSW_HAL_SUCCESS is success\other is fail
321*/
322int32_t gsw_tee_delete_secure_data(const char* in_obj_name)
323{
lichengzhang0e5969b2025-07-09 11:02:55 +0800324 LOGE("delete start\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800325 if (in_obj_name == NULL)
326 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800327 int32_t ret = 0;
hong.liud2417072025-06-27 07:10:37 -0700328
329 TEEC_Result res = delete_secure_object(&ctx, in_obj_name);
b.liu68a94c92025-05-24 12:53:41 +0800330 if (res != TEEC_SUCCESS)
331 {
332 LOGE("Failed to delete the object: 0x%x", res);
lichengzhangd7aea6c2025-06-05 16:35:54 +0800333 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800334 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800335 LOGE("delete really end\n");
b.liu68a94c92025-05-24 12:53:41 +0800336 return ret;
b.liu68a94c92025-05-24 12:53:41 +0800337}
338
339/**
340* @brief check sensitive data from tee
341* @param [in] char* in_obj_name :Sensitive data name
342* @retval GSW_HAL_SUCCESS is exist\ other is not exist or fail
343*/
344int32_t gsw_tee_check_secure_data(const char* in_obj_name)
345{
lichengzhangd7aea6c2025-06-05 16:35:54 +0800346 if (in_obj_name == NULL)
347 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800348 int32_t ret = 1;
lichengzhang0e5969b2025-07-09 11:02:55 +0800349 size_t size = basic_buf_len;
hong.liud2417072025-06-27 07:10:37 -0700350 char *tmp_buf = (char*)malloc(basic_buf_len);
351 if (NULL == tmp_buf)
352 {
353 LOGE("Failed malloc fail");
354 return GSW_HAL_NO_MEMORY;
355 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800356 TEEC_Result res = read_secure_object(&ctx, in_obj_name, tmp_buf, &size);
b.liu68a94c92025-05-24 12:53:41 +0800357 if (res == TEEC_ERROR_ITEM_NOT_FOUND)
358 {
359 LOGE("the obj no found\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800360 ret = GSW_HAL_ERROR_TEE_SFS_FILE_NOEXIST;
b.liu68a94c92025-05-24 12:53:41 +0800361 }
362 else if (res == TEEC_SUCCESS)
363 {
364 LOGE("the obj is exist\n");
365 ret = GSW_HAL_SUCCESS;
366 }
367 else
368 {
369 LOGE("Failed to read an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800370 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800371 }
lichengzhangd7aea6c2025-06-05 16:35:54 +0800372 free(tmp_buf);
b.liu68a94c92025-05-24 12:53:41 +0800373 return ret;
374}
375
lichengzhangd7aea6c2025-06-05 16:35:54 +0800376/**
377* @brief deinit tee sdk
378* @param [in] None
379* @param [out] None
380* @retval GSW_HAL_SUCCESS is success\other is fail
381*/
b.liu68a94c92025-05-24 12:53:41 +0800382int32_t gsw_tee_sdk_deinit(void)
383{
lichengzhang0e5969b2025-07-09 11:02:55 +0800384 LOGE("deinit start\n");
b.liu68a94c92025-05-24 12:53:41 +0800385 if (terminate_tee_session) {
386 terminate_tee_session(&ctx); // 终止TEE会话
387 terminate_tee_session = NULL;
388 }
389
390 if (dlHandle_secure) {
391 dlclose(dlHandle_secure); // 卸载安全库
392 dlHandle_secure = NULL;
393 }
394
395 if (dlHandle_mbtk) {
396 dlclose(dlHandle_mbtk); // 卸载日志库
397 dlHandle_mbtk = NULL;
398 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800399 LOGE("deinit end\n");
b.liu68a94c92025-05-24 12:53:41 +0800400 return GSW_HAL_SUCCESS;
401}
402
hong.liud2417072025-06-27 07:10:37 -0700403int32_t gsw_secure_init(void)
404{
405 static int s_init_flag = 0;
406 if (0xAA55 == s_init_flag)
407 {
408 return GSW_HAL_SUCCESS;
409 }
410 if (GSW_HAL_SUCCESS == gsw_tee_sdk_init())
411 {
412 s_init_flag = 0xAA55;
413 return GSW_HAL_SUCCESS;
414 }
415 LOGE("secure sdk init fail!!!");
416 return GSW_HAL_NORMAL_FAIL;
417}
418
419int32_t gsw_secure_storage_query(const char *objname, int32_t *exist_state)
420{
421#if 0
422 if (NULL == objname || NULL == exist_state)
423 {
424 LOGE("storage query input param error objname %p, exist_state %p",objname, exist_state);
425 return GSW_HAL_ARG_INVALID;
426 }
427 int32_t ret = gsw_secure_init();
428 if (GSW_HAL_SUCCESS != ret)
429 {
430 return ret;
431 }
432 ret = gsw_tee_check_secure_data(objname);
433 if (GSW_HAL_SUCCESS == ret)
434 {
435 *exist_state = 1; //表明数据存在
436 }
437 else
438 {
439 *exist_state = 0;
440 }
441 return ret;
442#else
443 return GSW_HAL_NO_SUPPROT;
444#endif
445}
446
447int32_t gsw_secure_storage_read(const char *objname, uint8_t *outbuf, uint32_t buflen, uint32_t *outlen)
448{
449#if 0
450 if (NULL == objname || NULL == outbuf || NULL == outlen)
451 {
452 LOGE("storage read input param error objname %p, outbuf %p, outlen %p",objname, outbuf, outlen);
453 return GSW_HAL_ARG_INVALID;
454 }
455 int32_t ret = gsw_secure_init();
456 if (GSW_HAL_SUCCESS != ret)
457 {
458 return ret;
459 }
460 *outlen = buflen;
461 return gsw_tee_read_secure_data(objname, (char*)outbuf, outlen);
462#else
463 return GSW_HAL_NO_SUPPROT;
464#endif
465
466}
467
468int32_t gsw_secure_storage_write(const char *objname, const uint8_t *inbuf, uint32_t inlen)
469{
470#if 0
471 if (NULL == objname || NULL == inbuf || 0 == inlen)
472 {
473 LOGE("storage write input param error objname %p, outbuf %p, inlen %u",objname, inbuf, inlen);
474 return GSW_HAL_ARG_INVALID;
475 }
476 int32_t ret = gsw_secure_init();
477 if (GSW_HAL_SUCCESS != ret)
478 {
479 return ret;
480 }
481 return gsw_tee_write_secure_data(objname, (char*)inbuf, inlen);
482#else
483 return GSW_HAL_NO_SUPPROT;
484#endif
485}
486
487int32_t gsw_secure_storage_delete(const char *objname)
488{
489#if 0
490 if (NULL == objname)
491 {
492 LOGE("storage delete input param error objname %p",objname);
493 return GSW_HAL_ARG_INVALID;
494 }
495 int32_t ret = gsw_secure_init();
496 if (GSW_HAL_SUCCESS != ret)
497 {
498 return ret;
499 }
500 return gsw_tee_delete_secure_data(objname);
501#else
502 return GSW_HAL_NO_SUPPROT;
503#endif
504}