// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021 Rockchip Electronics Co. Ltd. */ #include #include #include #include "rktest_handle.h" TEE_Result handle_storage(void) { TEE_Result res = TEE_SUCCESS; TEE_ObjectHandle ob_handle; uint32_t flags = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META; uint8_t object_id_1[] = {0x01, 0x02, 0x03, 0x04}; uint8_t w_data[] = "Read and Write test."; uint8_t r_data[32] = {'\0'}; uint32_t count = 0; /* * The storageID parameter of TEE_CreatePersistentObject can be: * TEE_STORAGE_PRIVATE - Same as TEE_STORAGE_PRIVATE_REE. See below. * TEE_STORAGE_PRIVATE_REE - Using the REE file system. Data will be *preferentially stored in the 'security' partition if the * 'security' partition is configured to be available. If the * 'security' partition is not available, the data will be stored * in the Linux or Android file system. * TEE_STORAGE_PRIVATE_RPMB - Using the RPMB file system. Data will be * stored in the 'RPMB' partition in eMMC. You should make sure * first that the device supports eMMC. */ //Create res = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE, object_id_1, sizeof(object_id_1), flags, TEE_HANDLE_NULL, NULL, 0, &ob_handle); if (res != TEE_SUCCESS) { EMSG("CreatePersistentObject ERR: 0x%x.", res); return res; } IMSG("Test create OK."); //You can use the objectHandle now. Or close the object. //Write res = TEE_SeekObjectData(ob_handle, 0, TEE_DATA_SEEK_SET); if (res != TEE_SUCCESS) { EMSG("SeekObjectData ERR: 0x%x.", res); goto out; } res = TEE_WriteObjectData(ob_handle, w_data, sizeof(w_data)); if (res != TEE_SUCCESS) { EMSG("WriteObjectData ERR: 0x%x.", res); goto out; } IMSG("Test write OK."); //Close and open TEE_CloseObject(ob_handle); res = TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE, object_id_1, sizeof(object_id_1), flags, &ob_handle); if (res != TEE_SUCCESS) { EMSG("OpenPersistentObject ERR: 0x%x.", res); goto out; } //Read res = TEE_ReadObjectData(ob_handle, r_data, sizeof(w_data), &count); if (res != TEE_SUCCESS) { EMSG("ReadObjectData ERR: 0x%x.", res); goto out; } IMSG("Test read OK."); //Compare the data if (TEE_MemCompare(r_data, w_data, sizeof(w_data))) { EMSG("Read data != write data. ERR!"); goto out; } IMSG("Read data = write data."); out: //Close and delete TEE_CloseAndDeletePersistentObject(ob_handle); IMSG("Delete."); return res; }