1ae8ec5e1SHisping Lin /* 2ae8ec5e1SHisping Lin * Copyright 2017, Rockchip Electronics Co., Ltd 3ae8ec5e1SHisping Lin * hisping lin, <hisping.lin@rock-chips.com> 4ae8ec5e1SHisping Lin * 5ae8ec5e1SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 6ae8ec5e1SHisping Lin */ 7ae8ec5e1SHisping Lin 8ae8ec5e1SHisping Lin #include <common.h> 9ae8ec5e1SHisping Lin #include <optee_include/OpteeClientApiLib.h> 10ae8ec5e1SHisping Lin #include <optee_include/tee_client_api.h> 11ae8ec5e1SHisping Lin 12ae8ec5e1SHisping Lin void test_optee(void) 13ae8ec5e1SHisping Lin { 14ae8ec5e1SHisping Lin TEEC_Result TeecResult; 15ae8ec5e1SHisping Lin TEEC_Context TeecContext; 16ae8ec5e1SHisping Lin TEEC_Session TeecSession; 17ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 18ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 19ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 20ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 21ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 22ae8ec5e1SHisping Lin 23ae8ec5e1SHisping Lin debug("testmm start\n"); 24ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 25ae8ec5e1SHisping Lin 26ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 27ae8ec5e1SHisping Lin 28ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 29ae8ec5e1SHisping Lin &TeecSession, 30ae8ec5e1SHisping Lin TeecUuid, 31ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 32ae8ec5e1SHisping Lin NULL, 33ae8ec5e1SHisping Lin NULL, 34ae8ec5e1SHisping Lin &ErrorOrigin); 35ae8ec5e1SHisping Lin 36ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 37ae8ec5e1SHisping Lin 38ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 39ae8ec5e1SHisping Lin SharedMem0.flags = 0; 40ae8ec5e1SHisping Lin 41ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 42ae8ec5e1SHisping Lin 43ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 44ae8ec5e1SHisping Lin 45ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 46ae8ec5e1SHisping Lin 47ae8ec5e1SHisping Lin SharedMem1.size = 32; 48ae8ec5e1SHisping Lin SharedMem1.flags = 0; 49ae8ec5e1SHisping Lin 50ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 51ae8ec5e1SHisping Lin 52ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 53ae8ec5e1SHisping Lin 54ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 55ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 56ae8ec5e1SHisping Lin 57ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 58ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 59ae8ec5e1SHisping Lin 60ae8ec5e1SHisping Lin 61ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 62ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 63ae8ec5e1SHisping Lin TEEC_NONE, 64ae8ec5e1SHisping Lin TEEC_NONE); 65ae8ec5e1SHisping Lin 66ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 67ae8ec5e1SHisping Lin 1, 68ae8ec5e1SHisping Lin &TeecOperation, 69ae8ec5e1SHisping Lin &ErrorOrigin); 70ae8ec5e1SHisping Lin 71ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 72ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 73ae8ec5e1SHisping Lin 74ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 75ae8ec5e1SHisping Lin 76ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 77ae8ec5e1SHisping Lin 78ae8ec5e1SHisping Lin debug("testmm end\n"); 79ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 80ae8ec5e1SHisping Lin } 81ae8ec5e1SHisping Lin 82ae8ec5e1SHisping Lin 83ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 84ae8ec5e1SHisping Lin { 85ae8ec5e1SHisping Lin if (in > 9) 86ae8ec5e1SHisping Lin return in + 55; 87ae8ec5e1SHisping Lin else 88ae8ec5e1SHisping Lin return in + 48; 89ae8ec5e1SHisping Lin } 90ae8ec5e1SHisping Lin 91ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 92ae8ec5e1SHisping Lin { 93ae8ec5e1SHisping Lin uint32_t i = 0; 94ae8ec5e1SHisping Lin 95ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 96ae8ec5e1SHisping Lin return 0; 97ae8ec5e1SHisping Lin 98ae8ec5e1SHisping Lin for (; i < blen; i++) { 99ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 100ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 101ae8ec5e1SHisping Lin } 102ae8ec5e1SHisping Lin hs[blen * 2] = 0; 103ae8ec5e1SHisping Lin 104ae8ec5e1SHisping Lin return blen * 2; 105ae8ec5e1SHisping Lin } 106ae8ec5e1SHisping Lin 107ae8ec5e1SHisping Lin 108ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 109ae8ec5e1SHisping Lin { 110ae8ec5e1SHisping Lin TEEC_Result TeecResult; 111ae8ec5e1SHisping Lin TEEC_Context TeecContext; 112ae8ec5e1SHisping Lin TEEC_Session TeecSession; 113ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 114ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 115ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 116ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 117ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 118ae8ec5e1SHisping Lin uint8_t hs[9]; 119ae8ec5e1SHisping Lin 120ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 121ae8ec5e1SHisping Lin debug("testmm start\n"); 122ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 123ae8ec5e1SHisping Lin 124ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 125ae8ec5e1SHisping Lin 126ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 127ae8ec5e1SHisping Lin &TeecSession, 128ae8ec5e1SHisping Lin TeecUuid, 129ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 130ae8ec5e1SHisping Lin NULL, 131ae8ec5e1SHisping Lin NULL, 132ae8ec5e1SHisping Lin &ErrorOrigin); 133ae8ec5e1SHisping Lin 134ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 135ae8ec5e1SHisping Lin 136ae8ec5e1SHisping Lin SharedMem0.size = 8; 137ae8ec5e1SHisping Lin SharedMem0.flags = 0; 138ae8ec5e1SHisping Lin 139ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 140ae8ec5e1SHisping Lin 141ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 142ae8ec5e1SHisping Lin 143ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 144ae8ec5e1SHisping Lin 145ae8ec5e1SHisping Lin SharedMem1.size = 8; 146ae8ec5e1SHisping Lin SharedMem1.flags = 0; 147ae8ec5e1SHisping Lin 148ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 149ae8ec5e1SHisping Lin 150ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 151ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 152ae8ec5e1SHisping Lin 153ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 154ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 155ae8ec5e1SHisping Lin 156ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 157ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 158ae8ec5e1SHisping Lin TEEC_NONE, 159ae8ec5e1SHisping Lin TEEC_NONE); 160ae8ec5e1SHisping Lin 161ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 162ae8ec5e1SHisping Lin 0, 163ae8ec5e1SHisping Lin &TeecOperation, 164ae8ec5e1SHisping Lin &ErrorOrigin); 165ae8ec5e1SHisping Lin 166ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 167ae8ec5e1SHisping Lin 168ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 169ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 170ae8ec5e1SHisping Lin 171ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 172ae8ec5e1SHisping Lin 173ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 174ae8ec5e1SHisping Lin 175ae8ec5e1SHisping Lin debug("testmm end\n"); 176ae8ec5e1SHisping Lin return TeecResult; 177ae8ec5e1SHisping Lin } 178ae8ec5e1SHisping Lin 179ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 180ae8ec5e1SHisping Lin { 181ae8ec5e1SHisping Lin TEEC_Result TeecResult; 182ae8ec5e1SHisping Lin TEEC_Context TeecContext; 183ae8ec5e1SHisping Lin TEEC_Session TeecSession; 184ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 185ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 186ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 187ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 188ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 189ae8ec5e1SHisping Lin uint8_t hs[9]; 190ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 191ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 192ae8ec5e1SHisping Lin 193ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 194ae8ec5e1SHisping Lin 195ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 196ae8ec5e1SHisping Lin &TeecSession, 197ae8ec5e1SHisping Lin TeecUuid, 198ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 199ae8ec5e1SHisping Lin NULL, 200ae8ec5e1SHisping Lin NULL, 201ae8ec5e1SHisping Lin &ErrorOrigin); 202ae8ec5e1SHisping Lin 203ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 204ae8ec5e1SHisping Lin 205ae8ec5e1SHisping Lin SharedMem0.size = 8; 206ae8ec5e1SHisping Lin SharedMem0.flags = 0; 207ae8ec5e1SHisping Lin 208ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 209ae8ec5e1SHisping Lin 210ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 211ae8ec5e1SHisping Lin 212ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 213ae8ec5e1SHisping Lin 214ae8ec5e1SHisping Lin SharedMem1.size = 8; 215ae8ec5e1SHisping Lin SharedMem1.flags = 0; 216ae8ec5e1SHisping Lin 217ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 218ae8ec5e1SHisping Lin 219ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 220ae8ec5e1SHisping Lin 221ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 222ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 223ae8ec5e1SHisping Lin 224ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 225ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 226ae8ec5e1SHisping Lin 227ae8ec5e1SHisping Lin 228ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 229ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 230ae8ec5e1SHisping Lin TEEC_NONE, 231ae8ec5e1SHisping Lin TEEC_NONE); 232ae8ec5e1SHisping Lin 233ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 234ae8ec5e1SHisping Lin 1, 235ae8ec5e1SHisping Lin &TeecOperation, 236ae8ec5e1SHisping Lin &ErrorOrigin); 237ae8ec5e1SHisping Lin 238ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 239ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 240ae8ec5e1SHisping Lin 241ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 242ae8ec5e1SHisping Lin 243ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 244ae8ec5e1SHisping Lin 245ae8ec5e1SHisping Lin debug("testmm end\n"); 246ae8ec5e1SHisping Lin 247ae8ec5e1SHisping Lin return TeecResult; 248ae8ec5e1SHisping Lin } 249ae8ec5e1SHisping Lin 250ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 251ae8ec5e1SHisping Lin { 252ae8ec5e1SHisping Lin TEEC_Result TeecResult; 253ae8ec5e1SHisping Lin TEEC_Context TeecContext; 254ae8ec5e1SHisping Lin TEEC_Session TeecSession; 255ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 256ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 257ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 258ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 259ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 260ae8ec5e1SHisping Lin 261ae8ec5e1SHisping Lin debug("testmm start\n"); 262ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 263ae8ec5e1SHisping Lin 264ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 265ae8ec5e1SHisping Lin 266ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 267ae8ec5e1SHisping Lin &TeecSession, 268ae8ec5e1SHisping Lin TeecUuid, 269ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 270ae8ec5e1SHisping Lin NULL, 271ae8ec5e1SHisping Lin NULL, 272ae8ec5e1SHisping Lin &ErrorOrigin); 273ae8ec5e1SHisping Lin 274ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 275ae8ec5e1SHisping Lin 276ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 277ae8ec5e1SHisping Lin SharedMem0.flags = 0; 278ae8ec5e1SHisping Lin 279ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 280ae8ec5e1SHisping Lin 281ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 282ae8ec5e1SHisping Lin 283ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 284ae8ec5e1SHisping Lin 285ae8ec5e1SHisping Lin SharedMem1.size = size; 286ae8ec5e1SHisping Lin SharedMem1.flags = 0; 287ae8ec5e1SHisping Lin 288ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 289ae8ec5e1SHisping Lin 290ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 291ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 292ae8ec5e1SHisping Lin 293ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 294ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 295ae8ec5e1SHisping Lin 296ae8ec5e1SHisping Lin 297ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 298ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 299ae8ec5e1SHisping Lin TEEC_NONE, 300ae8ec5e1SHisping Lin TEEC_NONE); 301ae8ec5e1SHisping Lin 302ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 303ae8ec5e1SHisping Lin 0, 304ae8ec5e1SHisping Lin &TeecOperation, 305ae8ec5e1SHisping Lin &ErrorOrigin); 306ae8ec5e1SHisping Lin 307ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 308ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 309ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 310ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 311ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 312ae8ec5e1SHisping Lin debug("testmm end\n"); 313ae8ec5e1SHisping Lin 314ae8ec5e1SHisping Lin return TeecResult; 315ae8ec5e1SHisping Lin } 316ae8ec5e1SHisping Lin 317ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 318ae8ec5e1SHisping Lin { 319ae8ec5e1SHisping Lin TEEC_Result TeecResult; 320ae8ec5e1SHisping Lin TEEC_Context TeecContext; 321ae8ec5e1SHisping Lin TEEC_Session TeecSession; 322ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 323ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 324ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 325ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 326ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 327ae8ec5e1SHisping Lin 328ae8ec5e1SHisping Lin debug("testmm start\n"); 329ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 330ae8ec5e1SHisping Lin 331ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 332ae8ec5e1SHisping Lin 333ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 334ae8ec5e1SHisping Lin &TeecSession, 335ae8ec5e1SHisping Lin TeecUuid, 336ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 337ae8ec5e1SHisping Lin NULL, 338ae8ec5e1SHisping Lin NULL, 339ae8ec5e1SHisping Lin &ErrorOrigin); 340ae8ec5e1SHisping Lin 341ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 342ae8ec5e1SHisping Lin 343ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 344ae8ec5e1SHisping Lin SharedMem0.flags = 0; 345ae8ec5e1SHisping Lin 346ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 347ae8ec5e1SHisping Lin 348ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 349ae8ec5e1SHisping Lin 350ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 351ae8ec5e1SHisping Lin 352ae8ec5e1SHisping Lin SharedMem1.size = size; 353ae8ec5e1SHisping Lin SharedMem1.flags = 0; 354ae8ec5e1SHisping Lin 355ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 356ae8ec5e1SHisping Lin 357ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 358ae8ec5e1SHisping Lin 359ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 360ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 361ae8ec5e1SHisping Lin 362ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 363ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 364ae8ec5e1SHisping Lin 365ae8ec5e1SHisping Lin 366ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 367ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 368ae8ec5e1SHisping Lin TEEC_NONE, 369ae8ec5e1SHisping Lin TEEC_NONE); 370ae8ec5e1SHisping Lin 371ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 372ae8ec5e1SHisping Lin 1, 373ae8ec5e1SHisping Lin &TeecOperation, 374ae8ec5e1SHisping Lin &ErrorOrigin); 375ae8ec5e1SHisping Lin 376ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 377ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 378ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 379ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 380ae8ec5e1SHisping Lin debug("testmm end\n"); 381ae8ec5e1SHisping Lin 382ae8ec5e1SHisping Lin return TeecResult; 383ae8ec5e1SHisping Lin } 384ae8ec5e1SHisping Lin 385ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 386ae8ec5e1SHisping Lin { 387ae8ec5e1SHisping Lin TEEC_Result TeecResult; 388ae8ec5e1SHisping Lin TEEC_Context TeecContext; 389ae8ec5e1SHisping Lin TEEC_Session TeecSession; 390ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 391ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 392ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 393ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 394ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 395ae8ec5e1SHisping Lin 396ae8ec5e1SHisping Lin debug("testmm start\n"); 397ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 398ae8ec5e1SHisping Lin 399ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 400ae8ec5e1SHisping Lin 401ae8ec5e1SHisping Lin 402ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 403ae8ec5e1SHisping Lin &TeecSession, 404ae8ec5e1SHisping Lin TeecUuid, 405ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 406ae8ec5e1SHisping Lin NULL, 407ae8ec5e1SHisping Lin NULL, 408ae8ec5e1SHisping Lin &ErrorOrigin); 409ae8ec5e1SHisping Lin 410ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 411ae8ec5e1SHisping Lin 412ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 413ae8ec5e1SHisping Lin SharedMem0.flags = 0; 414ae8ec5e1SHisping Lin 415ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 416ae8ec5e1SHisping Lin 417ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 418ae8ec5e1SHisping Lin 419ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 420ae8ec5e1SHisping Lin 421ae8ec5e1SHisping Lin SharedMem1.size = 1; 422ae8ec5e1SHisping Lin SharedMem1.flags = 0; 423ae8ec5e1SHisping Lin 424ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 425ae8ec5e1SHisping Lin 426ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 427ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 428ae8ec5e1SHisping Lin 429ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 430ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 431ae8ec5e1SHisping Lin 432ae8ec5e1SHisping Lin 433ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 434ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 435ae8ec5e1SHisping Lin TEEC_NONE, 436ae8ec5e1SHisping Lin TEEC_NONE); 437ae8ec5e1SHisping Lin 438ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 439ae8ec5e1SHisping Lin 0, 440ae8ec5e1SHisping Lin &TeecOperation, 441ae8ec5e1SHisping Lin &ErrorOrigin); 442ae8ec5e1SHisping Lin 443ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 444ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 445ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 446ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 447ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 448ae8ec5e1SHisping Lin debug("testmm end\n"); 449ae8ec5e1SHisping Lin 450ae8ec5e1SHisping Lin return TeecResult; 451ae8ec5e1SHisping Lin } 452ae8ec5e1SHisping Lin 453ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 454ae8ec5e1SHisping Lin { 455ae8ec5e1SHisping Lin TEEC_Result TeecResult; 456ae8ec5e1SHisping Lin TEEC_Context TeecContext; 457ae8ec5e1SHisping Lin TEEC_Session TeecSession; 458ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 459ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 460ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 461ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 462ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 463ae8ec5e1SHisping Lin 464ae8ec5e1SHisping Lin debug("testmm start\n"); 465ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 466ae8ec5e1SHisping Lin 467ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 468ae8ec5e1SHisping Lin 469ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 470ae8ec5e1SHisping Lin &TeecSession, 471ae8ec5e1SHisping Lin TeecUuid, 472ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 473ae8ec5e1SHisping Lin NULL, 474ae8ec5e1SHisping Lin NULL, 475ae8ec5e1SHisping Lin &ErrorOrigin); 476ae8ec5e1SHisping Lin 477ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 478ae8ec5e1SHisping Lin 479ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 480ae8ec5e1SHisping Lin SharedMem0.flags = 0; 481ae8ec5e1SHisping Lin 482ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 483ae8ec5e1SHisping Lin 484ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 485ae8ec5e1SHisping Lin 486ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 487ae8ec5e1SHisping Lin 488ae8ec5e1SHisping Lin SharedMem1.size = 1; 489ae8ec5e1SHisping Lin SharedMem1.flags = 0; 490ae8ec5e1SHisping Lin 491ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 492ae8ec5e1SHisping Lin 493ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 494ae8ec5e1SHisping Lin 495ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 496ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 497ae8ec5e1SHisping Lin 498ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 499ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 500ae8ec5e1SHisping Lin 501ae8ec5e1SHisping Lin 502ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 503ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 504ae8ec5e1SHisping Lin TEEC_NONE, 505ae8ec5e1SHisping Lin TEEC_NONE); 506ae8ec5e1SHisping Lin 507ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 508ae8ec5e1SHisping Lin 1, 509ae8ec5e1SHisping Lin &TeecOperation, 510ae8ec5e1SHisping Lin &ErrorOrigin); 511ae8ec5e1SHisping Lin 512ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 513ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 514ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 515ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 516ae8ec5e1SHisping Lin debug("testmm end\n"); 517ae8ec5e1SHisping Lin 518ae8ec5e1SHisping Lin return TeecResult; 519ae8ec5e1SHisping Lin } 520ae8ec5e1SHisping Lin 521ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 522ae8ec5e1SHisping Lin { 523ae8ec5e1SHisping Lin TEEC_Result TeecResult; 524ae8ec5e1SHisping Lin TEEC_Context TeecContext; 525ae8ec5e1SHisping Lin TEEC_Session TeecSession; 526ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 527ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 528ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 529ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 530ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 531ae8ec5e1SHisping Lin 532ae8ec5e1SHisping Lin debug("testmm start\n"); 533ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 534ae8ec5e1SHisping Lin 535ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 536ae8ec5e1SHisping Lin 537ae8ec5e1SHisping Lin 538ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 539ae8ec5e1SHisping Lin &TeecSession, 540ae8ec5e1SHisping Lin TeecUuid, 541ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 542ae8ec5e1SHisping Lin NULL, 543ae8ec5e1SHisping Lin NULL, 544ae8ec5e1SHisping Lin &ErrorOrigin); 545ae8ec5e1SHisping Lin 546ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 547ae8ec5e1SHisping Lin 548ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 549ae8ec5e1SHisping Lin SharedMem0.flags = 0; 550ae8ec5e1SHisping Lin 551ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 552ae8ec5e1SHisping Lin 553ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 554ae8ec5e1SHisping Lin 555ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 556ae8ec5e1SHisping Lin 557ae8ec5e1SHisping Lin SharedMem1.size = 1; 558ae8ec5e1SHisping Lin SharedMem1.flags = 0; 559ae8ec5e1SHisping Lin 560ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 561ae8ec5e1SHisping Lin 562ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 563ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 564ae8ec5e1SHisping Lin 565ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 566ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 567ae8ec5e1SHisping Lin 568ae8ec5e1SHisping Lin 569ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 570ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 571ae8ec5e1SHisping Lin TEEC_NONE, 572ae8ec5e1SHisping Lin TEEC_NONE); 573ae8ec5e1SHisping Lin 574ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 575ae8ec5e1SHisping Lin 0, 576ae8ec5e1SHisping Lin &TeecOperation, 577ae8ec5e1SHisping Lin &ErrorOrigin); 578ae8ec5e1SHisping Lin 579ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 580ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 581ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 582ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 583ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 584ae8ec5e1SHisping Lin debug("testmm end\n"); 585ae8ec5e1SHisping Lin 586ae8ec5e1SHisping Lin return TeecResult; 587ae8ec5e1SHisping Lin } 588ae8ec5e1SHisping Lin 589ae8ec5e1SHisping Lin 590ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 591ae8ec5e1SHisping Lin { 592ae8ec5e1SHisping Lin TEEC_Result TeecResult; 593ae8ec5e1SHisping Lin TEEC_Context TeecContext; 594ae8ec5e1SHisping Lin TEEC_Session TeecSession; 595ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 596ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 597ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 598ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 599ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 600ae8ec5e1SHisping Lin 601ae8ec5e1SHisping Lin debug("testmm start\n"); 602ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 603ae8ec5e1SHisping Lin 604ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 605ae8ec5e1SHisping Lin 606ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 607ae8ec5e1SHisping Lin &TeecSession, 608ae8ec5e1SHisping Lin TeecUuid, 609ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 610ae8ec5e1SHisping Lin NULL, 611ae8ec5e1SHisping Lin NULL, 612ae8ec5e1SHisping Lin &ErrorOrigin); 613ae8ec5e1SHisping Lin 614ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 615ae8ec5e1SHisping Lin 616ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 617ae8ec5e1SHisping Lin SharedMem0.flags = 0; 618ae8ec5e1SHisping Lin 619ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 620ae8ec5e1SHisping Lin 621ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 622ae8ec5e1SHisping Lin 623ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 624ae8ec5e1SHisping Lin 625ae8ec5e1SHisping Lin SharedMem1.size = 1; 626ae8ec5e1SHisping Lin SharedMem1.flags = 0; 627ae8ec5e1SHisping Lin 628ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 629ae8ec5e1SHisping Lin 630ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 631ae8ec5e1SHisping Lin 632ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 633ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 634ae8ec5e1SHisping Lin 635ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 636ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 637ae8ec5e1SHisping Lin 638ae8ec5e1SHisping Lin 639ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 640ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 641ae8ec5e1SHisping Lin TEEC_NONE, 642ae8ec5e1SHisping Lin TEEC_NONE); 643ae8ec5e1SHisping Lin 644ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 645ae8ec5e1SHisping Lin 1, 646ae8ec5e1SHisping Lin &TeecOperation, 647ae8ec5e1SHisping Lin &ErrorOrigin); 648ae8ec5e1SHisping Lin 649ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 650ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 651ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 652ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 653ae8ec5e1SHisping Lin debug("testmm end\n"); 654ae8ec5e1SHisping Lin 655ae8ec5e1SHisping Lin return TeecResult; 656ae8ec5e1SHisping Lin } 657ae8ec5e1SHisping Lin 658ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 659ae8ec5e1SHisping Lin uint32_t filename_size, 660ae8ec5e1SHisping Lin uint8_t *data, 661ae8ec5e1SHisping Lin uint32_t data_size) 662ae8ec5e1SHisping Lin { 663ae8ec5e1SHisping Lin TEEC_Result TeecResult; 664ae8ec5e1SHisping Lin TEEC_Context TeecContext; 665ae8ec5e1SHisping Lin TEEC_Session TeecSession; 666ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 667ae8ec5e1SHisping Lin 668ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 669ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 670ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 671ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 672ae8ec5e1SHisping Lin 673ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 674ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 675ae8ec5e1SHisping Lin 676ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 677ae8ec5e1SHisping Lin 678ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 679ae8ec5e1SHisping Lin &TeecSession, 680ae8ec5e1SHisping Lin TeecUuid, 681ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 682ae8ec5e1SHisping Lin NULL, 683ae8ec5e1SHisping Lin NULL, 684ae8ec5e1SHisping Lin &ErrorOrigin); 685ae8ec5e1SHisping Lin 686ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 687ae8ec5e1SHisping Lin 688ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 689ae8ec5e1SHisping Lin SharedMem0.flags = 0; 690ae8ec5e1SHisping Lin 691ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 692ae8ec5e1SHisping Lin 693ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 694ae8ec5e1SHisping Lin 695ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 696ae8ec5e1SHisping Lin 697ae8ec5e1SHisping Lin SharedMem1.size = data_size; 698ae8ec5e1SHisping Lin SharedMem1.flags = 0; 699ae8ec5e1SHisping Lin 700ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 701ae8ec5e1SHisping Lin 702ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 703ae8ec5e1SHisping Lin 704ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 705ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 706ae8ec5e1SHisping Lin 707ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 708ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 709ae8ec5e1SHisping Lin 710ae8ec5e1SHisping Lin 711ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 712ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 713ae8ec5e1SHisping Lin TEEC_NONE, 714ae8ec5e1SHisping Lin TEEC_NONE); 715ae8ec5e1SHisping Lin 716ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 717ae8ec5e1SHisping Lin 139, 718ae8ec5e1SHisping Lin &TeecOperation, 719ae8ec5e1SHisping Lin &ErrorOrigin); 720ae8ec5e1SHisping Lin 721ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 722ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 723ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 724ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 725ae8ec5e1SHisping Lin debug("testmm end\n"); 726ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 727ae8ec5e1SHisping Lin 728ae8ec5e1SHisping Lin return TeecResult; 729ae8ec5e1SHisping Lin } 730*6ef445a4SHisping Lin 731*6ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 732*6ef445a4SHisping Lin { 733*6ef445a4SHisping Lin TEEC_Result TeecResult; 734*6ef445a4SHisping Lin TEEC_Context TeecContext; 735*6ef445a4SHisping Lin TEEC_Session TeecSession; 736*6ef445a4SHisping Lin uint32_t ErrorOrigin; 737*6ef445a4SHisping Lin 738*6ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 739*6ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 740*6ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 741*6ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 742*6ef445a4SHisping Lin 743*6ef445a4SHisping Lin OpteeClientApiLibInitialize(); 744*6ef445a4SHisping Lin 745*6ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 746*6ef445a4SHisping Lin 747*6ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 748*6ef445a4SHisping Lin &TeecSession, 749*6ef445a4SHisping Lin TeecUuid, 750*6ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 751*6ef445a4SHisping Lin NULL, 752*6ef445a4SHisping Lin NULL, 753*6ef445a4SHisping Lin &ErrorOrigin); 754*6ef445a4SHisping Lin 755*6ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 756*6ef445a4SHisping Lin 757*6ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 758*6ef445a4SHisping Lin SharedMem0.flags = 0; 759*6ef445a4SHisping Lin 760*6ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 761*6ef445a4SHisping Lin 762*6ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 763*6ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 764*6ef445a4SHisping Lin 765*6ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 766*6ef445a4SHisping Lin TEEC_NONE, 767*6ef445a4SHisping Lin TEEC_NONE, 768*6ef445a4SHisping Lin TEEC_NONE); 769*6ef445a4SHisping Lin 770*6ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 771*6ef445a4SHisping Lin 0, 772*6ef445a4SHisping Lin &TeecOperation, 773*6ef445a4SHisping Lin &ErrorOrigin); 774*6ef445a4SHisping Lin 775*6ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 776*6ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 777*6ef445a4SHisping Lin 778*6ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 779*6ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 780*6ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 781*6ef445a4SHisping Lin 782*6ef445a4SHisping Lin return TeecResult; 783*6ef445a4SHisping Lin } 784*6ef445a4SHisping Lin 785*6ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 786*6ef445a4SHisping Lin { 787*6ef445a4SHisping Lin TEEC_Result TeecResult; 788*6ef445a4SHisping Lin TEEC_Context TeecContext; 789*6ef445a4SHisping Lin TEEC_Session TeecSession; 790*6ef445a4SHisping Lin uint32_t ErrorOrigin; 791*6ef445a4SHisping Lin 792*6ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 793*6ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 794*6ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 795*6ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 796*6ef445a4SHisping Lin 797*6ef445a4SHisping Lin OpteeClientApiLibInitialize(); 798*6ef445a4SHisping Lin 799*6ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 800*6ef445a4SHisping Lin 801*6ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 802*6ef445a4SHisping Lin &TeecSession, 803*6ef445a4SHisping Lin TeecUuid, 804*6ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 805*6ef445a4SHisping Lin NULL, 806*6ef445a4SHisping Lin NULL, 807*6ef445a4SHisping Lin &ErrorOrigin); 808*6ef445a4SHisping Lin 809*6ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 810*6ef445a4SHisping Lin 811*6ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 812*6ef445a4SHisping Lin SharedMem0.flags = 0; 813*6ef445a4SHisping Lin 814*6ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 815*6ef445a4SHisping Lin 816*6ef445a4SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 817*6ef445a4SHisping Lin 818*6ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 819*6ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 820*6ef445a4SHisping Lin 821*6ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 822*6ef445a4SHisping Lin TEEC_NONE, 823*6ef445a4SHisping Lin TEEC_NONE, 824*6ef445a4SHisping Lin TEEC_NONE); 825*6ef445a4SHisping Lin 826*6ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 827*6ef445a4SHisping Lin 1, 828*6ef445a4SHisping Lin &TeecOperation, 829*6ef445a4SHisping Lin &ErrorOrigin); 830*6ef445a4SHisping Lin 831*6ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 832*6ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 833*6ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 834*6ef445a4SHisping Lin 835*6ef445a4SHisping Lin return TeecResult; 836*6ef445a4SHisping Lin } 837