blob: 7447fc500c6a1d15cbde9208eb7390b33f7e9678 [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 {
lichengzhang55aed352025-07-11 18:30:08 +0800282 LOGE("Failed to read an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800283 ret = GSW_HAL_NORMAL_FAIL;
lichengzhang55aed352025-07-11 18:30:08 +0800284 free(tmp_buf);
285 return ret;
b.liu68a94c92025-05-24 12:53:41 +0800286 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800287 LOGE("really start end\n");
288 memcpy(out_buf, tmp_buf, size);
289 *p_out_buf_len = size;
lichengzhangd7aea6c2025-06-05 16:35:54 +0800290 free(tmp_buf);
b.liu68a94c92025-05-24 12:53:41 +0800291 return ret;
292}
293
b.liu68a94c92025-05-24 12:53:41 +0800294/**
295* @brief write sensitive data to tee
296* @param [in] char* in_obj_name :Sensitive data name
297* @param [in] char* in_buf:A cache for writing sensitive data
298* @param [out] unsigned int in_buf_len:Sensitive data length
299* @retval GSW_HAL_SUCCESS is success\other is fail
300*/
301int32_t gsw_tee_write_secure_data(const char* in_obj_name, char* in_buf, unsigned int in_buf_len)
302{
lichengzhang0e5969b2025-07-09 11:02:55 +0800303 LOGE("write start\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800304 if (in_obj_name == NULL || in_buf == NULL)
305 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800306 int32_t ret = 0;
hong.liud2417072025-06-27 07:10:37 -0700307
308 TEEC_Result res = write_secure_object(&ctx, in_obj_name,in_buf, in_buf_len);
b.liu68a94c92025-05-24 12:53:41 +0800309 if (res != TEEC_SUCCESS)
310 {
311 LOGE("Failed to write an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800312 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800313 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800314 LOGE("write really end\n");
b.liu68a94c92025-05-24 12:53:41 +0800315 return ret;
316}
317
318
319/**
320* @brief delete sensitive data from tee
321* @param [in] char* in_obj_name :Sensitive data name
322* @retval GSW_HAL_SUCCESS is success\other is fail
323*/
324int32_t gsw_tee_delete_secure_data(const char* in_obj_name)
325{
lichengzhang0e5969b2025-07-09 11:02:55 +0800326 LOGE("delete start\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800327 if (in_obj_name == NULL)
328 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800329 int32_t ret = 0;
hong.liud2417072025-06-27 07:10:37 -0700330
331 TEEC_Result res = delete_secure_object(&ctx, in_obj_name);
b.liu68a94c92025-05-24 12:53:41 +0800332 if (res != TEEC_SUCCESS)
333 {
334 LOGE("Failed to delete the object: 0x%x", res);
lichengzhangd7aea6c2025-06-05 16:35:54 +0800335 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800336 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800337 LOGE("delete really end\n");
b.liu68a94c92025-05-24 12:53:41 +0800338 return ret;
b.liu68a94c92025-05-24 12:53:41 +0800339}
340
341/**
342* @brief check sensitive data from tee
343* @param [in] char* in_obj_name :Sensitive data name
344* @retval GSW_HAL_SUCCESS is exist\ other is not exist or fail
345*/
346int32_t gsw_tee_check_secure_data(const char* in_obj_name)
347{
lichengzhangd7aea6c2025-06-05 16:35:54 +0800348 if (in_obj_name == NULL)
349 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800350 int32_t ret = 1;
lichengzhang0e5969b2025-07-09 11:02:55 +0800351 size_t size = basic_buf_len;
hong.liud2417072025-06-27 07:10:37 -0700352 char *tmp_buf = (char*)malloc(basic_buf_len);
353 if (NULL == tmp_buf)
354 {
355 LOGE("Failed malloc fail");
356 return GSW_HAL_NO_MEMORY;
357 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800358 TEEC_Result res = read_secure_object(&ctx, in_obj_name, tmp_buf, &size);
b.liu68a94c92025-05-24 12:53:41 +0800359 if (res == TEEC_ERROR_ITEM_NOT_FOUND)
360 {
361 LOGE("the obj no found\n");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800362 ret = GSW_HAL_ERROR_TEE_SFS_FILE_NOEXIST;
b.liu68a94c92025-05-24 12:53:41 +0800363 }
364 else if (res == TEEC_SUCCESS)
365 {
366 LOGE("the obj is exist\n");
367 ret = GSW_HAL_SUCCESS;
368 }
369 else
370 {
371 LOGE("Failed to read an object from the secure storage");
lichengzhangd7aea6c2025-06-05 16:35:54 +0800372 ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800373 }
lichengzhangd7aea6c2025-06-05 16:35:54 +0800374 free(tmp_buf);
b.liu68a94c92025-05-24 12:53:41 +0800375 return ret;
376}
377
lichengzhangd7aea6c2025-06-05 16:35:54 +0800378/**
379* @brief deinit tee sdk
380* @param [in] None
381* @param [out] None
382* @retval GSW_HAL_SUCCESS is success\other is fail
383*/
b.liu68a94c92025-05-24 12:53:41 +0800384int32_t gsw_tee_sdk_deinit(void)
385{
lichengzhang0e5969b2025-07-09 11:02:55 +0800386 LOGE("deinit start\n");
b.liu68a94c92025-05-24 12:53:41 +0800387 if (terminate_tee_session) {
388 terminate_tee_session(&ctx); // 终止TEE会话
389 terminate_tee_session = NULL;
390 }
391
392 if (dlHandle_secure) {
393 dlclose(dlHandle_secure); // 卸载安全库
394 dlHandle_secure = NULL;
395 }
396
397 if (dlHandle_mbtk) {
398 dlclose(dlHandle_mbtk); // 卸载日志库
399 dlHandle_mbtk = NULL;
400 }
lichengzhang0e5969b2025-07-09 11:02:55 +0800401 LOGE("deinit end\n");
b.liu68a94c92025-05-24 12:53:41 +0800402 return GSW_HAL_SUCCESS;
403}
404
hong.liud2417072025-06-27 07:10:37 -0700405int32_t gsw_secure_init(void)
406{
407 static int s_init_flag = 0;
408 if (0xAA55 == s_init_flag)
409 {
410 return GSW_HAL_SUCCESS;
411 }
412 if (GSW_HAL_SUCCESS == gsw_tee_sdk_init())
413 {
414 s_init_flag = 0xAA55;
415 return GSW_HAL_SUCCESS;
416 }
417 LOGE("secure sdk init fail!!!");
418 return GSW_HAL_NORMAL_FAIL;
419}
420
421int32_t gsw_secure_storage_query(const char *objname, int32_t *exist_state)
422{
423#if 0
424 if (NULL == objname || NULL == exist_state)
425 {
426 LOGE("storage query input param error objname %p, exist_state %p",objname, exist_state);
427 return GSW_HAL_ARG_INVALID;
428 }
429 int32_t ret = gsw_secure_init();
430 if (GSW_HAL_SUCCESS != ret)
431 {
432 return ret;
433 }
434 ret = gsw_tee_check_secure_data(objname);
435 if (GSW_HAL_SUCCESS == ret)
436 {
437 *exist_state = 1; //表明数据存在
438 }
439 else
440 {
441 *exist_state = 0;
442 }
443 return ret;
444#else
445 return GSW_HAL_NO_SUPPROT;
446#endif
447}
448
449int32_t gsw_secure_storage_read(const char *objname, uint8_t *outbuf, uint32_t buflen, uint32_t *outlen)
450{
451#if 0
452 if (NULL == objname || NULL == outbuf || NULL == outlen)
453 {
454 LOGE("storage read input param error objname %p, outbuf %p, outlen %p",objname, outbuf, outlen);
455 return GSW_HAL_ARG_INVALID;
456 }
457 int32_t ret = gsw_secure_init();
458 if (GSW_HAL_SUCCESS != ret)
459 {
460 return ret;
461 }
462 *outlen = buflen;
463 return gsw_tee_read_secure_data(objname, (char*)outbuf, outlen);
464#else
465 return GSW_HAL_NO_SUPPROT;
466#endif
467
468}
469
470int32_t gsw_secure_storage_write(const char *objname, const uint8_t *inbuf, uint32_t inlen)
471{
472#if 0
473 if (NULL == objname || NULL == inbuf || 0 == inlen)
474 {
475 LOGE("storage write input param error objname %p, outbuf %p, inlen %u",objname, inbuf, inlen);
476 return GSW_HAL_ARG_INVALID;
477 }
478 int32_t ret = gsw_secure_init();
479 if (GSW_HAL_SUCCESS != ret)
480 {
481 return ret;
482 }
483 return gsw_tee_write_secure_data(objname, (char*)inbuf, inlen);
484#else
485 return GSW_HAL_NO_SUPPROT;
486#endif
487}
488
489int32_t gsw_secure_storage_delete(const char *objname)
490{
491#if 0
492 if (NULL == objname)
493 {
494 LOGE("storage delete input param error objname %p",objname);
495 return GSW_HAL_ARG_INVALID;
496 }
497 int32_t ret = gsw_secure_init();
498 if (GSW_HAL_SUCCESS != ret)
499 {
500 return ret;
501 }
502 return gsw_tee_delete_secure_data(objname);
503#else
504 return GSW_HAL_NO_SUPPROT;
505#endif
506}