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 7646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 77ae8ec5e1SHisping Lin 78ae8ec5e1SHisping Lin debug("testmm end\n"); 79ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 80ae8ec5e1SHisping Lin } 81ae8ec5e1SHisping Lin 82ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 83ae8ec5e1SHisping Lin { 84ae8ec5e1SHisping Lin if (in > 9) 85ae8ec5e1SHisping Lin return in + 55; 86ae8ec5e1SHisping Lin else 87ae8ec5e1SHisping Lin return in + 48; 88ae8ec5e1SHisping Lin } 89ae8ec5e1SHisping Lin 90ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 91ae8ec5e1SHisping Lin { 92ae8ec5e1SHisping Lin uint32_t i = 0; 93ae8ec5e1SHisping Lin 94ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 95ae8ec5e1SHisping Lin return 0; 96ae8ec5e1SHisping Lin 97ae8ec5e1SHisping Lin for (; i < blen; i++) { 98ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 99ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 100ae8ec5e1SHisping Lin } 101ae8ec5e1SHisping Lin hs[blen * 2] = 0; 102ae8ec5e1SHisping Lin 103ae8ec5e1SHisping Lin return blen * 2; 104ae8ec5e1SHisping Lin } 105ae8ec5e1SHisping Lin 106ae8ec5e1SHisping Lin 107ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 108ae8ec5e1SHisping Lin { 109ae8ec5e1SHisping Lin TEEC_Result TeecResult; 110ae8ec5e1SHisping Lin TEEC_Context TeecContext; 111ae8ec5e1SHisping Lin TEEC_Session TeecSession; 112ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 113ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 114ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 115ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 116ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 117ae8ec5e1SHisping Lin uint8_t hs[9]; 118ae8ec5e1SHisping Lin 119ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 120ae8ec5e1SHisping Lin debug("testmm start\n"); 121ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 122ae8ec5e1SHisping Lin 123ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 124ae8ec5e1SHisping Lin 125ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 126ae8ec5e1SHisping Lin &TeecSession, 127ae8ec5e1SHisping Lin TeecUuid, 128ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 129ae8ec5e1SHisping Lin NULL, 130ae8ec5e1SHisping Lin NULL, 131ae8ec5e1SHisping Lin &ErrorOrigin); 132ae8ec5e1SHisping Lin 133ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 134ae8ec5e1SHisping Lin 135ae8ec5e1SHisping Lin SharedMem0.size = 8; 136ae8ec5e1SHisping Lin SharedMem0.flags = 0; 137ae8ec5e1SHisping Lin 138ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 139ae8ec5e1SHisping Lin 140ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 141ae8ec5e1SHisping Lin 142ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 143ae8ec5e1SHisping Lin 144ae8ec5e1SHisping Lin SharedMem1.size = 8; 145ae8ec5e1SHisping Lin SharedMem1.flags = 0; 146ae8ec5e1SHisping Lin 147ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 148ae8ec5e1SHisping Lin 149ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 150ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 151ae8ec5e1SHisping Lin 152ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 153ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 154ae8ec5e1SHisping Lin 155ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 156ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 157ae8ec5e1SHisping Lin TEEC_NONE, 158ae8ec5e1SHisping Lin TEEC_NONE); 159ae8ec5e1SHisping Lin 160ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 161ae8ec5e1SHisping Lin 0, 162ae8ec5e1SHisping Lin &TeecOperation, 163ae8ec5e1SHisping Lin &ErrorOrigin); 16446b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 165ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 166ae8ec5e1SHisping Lin 167ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 168ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 169ae8ec5e1SHisping Lin 170ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 171ae8ec5e1SHisping Lin 17246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 173ae8ec5e1SHisping Lin 174ae8ec5e1SHisping Lin debug("testmm end\n"); 175ae8ec5e1SHisping Lin return TeecResult; 176ae8ec5e1SHisping Lin } 177ae8ec5e1SHisping Lin 178ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 179ae8ec5e1SHisping Lin { 180ae8ec5e1SHisping Lin TEEC_Result TeecResult; 181ae8ec5e1SHisping Lin TEEC_Context TeecContext; 182ae8ec5e1SHisping Lin TEEC_Session TeecSession; 183ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 184ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 185ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 186ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 187ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 188ae8ec5e1SHisping Lin uint8_t hs[9]; 189ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 190ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 191ae8ec5e1SHisping Lin 192ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 193ae8ec5e1SHisping Lin 194ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 195ae8ec5e1SHisping Lin &TeecSession, 196ae8ec5e1SHisping Lin TeecUuid, 197ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 198ae8ec5e1SHisping Lin NULL, 199ae8ec5e1SHisping Lin NULL, 200ae8ec5e1SHisping Lin &ErrorOrigin); 201ae8ec5e1SHisping Lin 202ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 203ae8ec5e1SHisping Lin 204ae8ec5e1SHisping Lin SharedMem0.size = 8; 205ae8ec5e1SHisping Lin SharedMem0.flags = 0; 206ae8ec5e1SHisping Lin 207ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 208ae8ec5e1SHisping Lin 209ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 210ae8ec5e1SHisping Lin 211ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 212ae8ec5e1SHisping Lin 213ae8ec5e1SHisping Lin SharedMem1.size = 8; 214ae8ec5e1SHisping Lin SharedMem1.flags = 0; 215ae8ec5e1SHisping Lin 216ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 217ae8ec5e1SHisping Lin 218ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 219ae8ec5e1SHisping Lin 220ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 221ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 222ae8ec5e1SHisping Lin 223ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 224ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 225ae8ec5e1SHisping Lin 226ae8ec5e1SHisping Lin 227ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 228ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 229ae8ec5e1SHisping Lin TEEC_NONE, 230ae8ec5e1SHisping Lin TEEC_NONE); 231ae8ec5e1SHisping Lin 232ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 233ae8ec5e1SHisping Lin 1, 234ae8ec5e1SHisping Lin &TeecOperation, 235ae8ec5e1SHisping Lin &ErrorOrigin); 236ae8ec5e1SHisping Lin 237ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 238ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 239ae8ec5e1SHisping Lin 240ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 241ae8ec5e1SHisping Lin 24246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 243ae8ec5e1SHisping Lin 244ae8ec5e1SHisping Lin debug("testmm end\n"); 245ae8ec5e1SHisping Lin 246ae8ec5e1SHisping Lin return TeecResult; 247ae8ec5e1SHisping Lin } 248ae8ec5e1SHisping Lin 249ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 250ae8ec5e1SHisping Lin { 251ae8ec5e1SHisping Lin TEEC_Result TeecResult; 252ae8ec5e1SHisping Lin TEEC_Context TeecContext; 253ae8ec5e1SHisping Lin TEEC_Session TeecSession; 254ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 25546b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 25646b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 257ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 258ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 259ae8ec5e1SHisping Lin 260ae8ec5e1SHisping Lin debug("testmm start\n"); 261ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 262ae8ec5e1SHisping Lin 263ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 264ae8ec5e1SHisping Lin 265ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 266ae8ec5e1SHisping Lin &TeecSession, 267ae8ec5e1SHisping Lin TeecUuid, 268ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 269ae8ec5e1SHisping Lin NULL, 270ae8ec5e1SHisping Lin NULL, 271ae8ec5e1SHisping Lin &ErrorOrigin); 272ae8ec5e1SHisping Lin 273ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 274ae8ec5e1SHisping Lin 275ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 276ae8ec5e1SHisping Lin SharedMem0.flags = 0; 277ae8ec5e1SHisping Lin 278ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 279ae8ec5e1SHisping Lin 280ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 281ae8ec5e1SHisping Lin 282ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 283ae8ec5e1SHisping Lin 284ae8ec5e1SHisping Lin SharedMem1.size = size; 285ae8ec5e1SHisping Lin SharedMem1.flags = 0; 286ae8ec5e1SHisping Lin 287ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 288ae8ec5e1SHisping Lin 289ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 290ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 291ae8ec5e1SHisping Lin 292ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 293ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 294ae8ec5e1SHisping Lin 295ae8ec5e1SHisping Lin 296ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 297ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 298ae8ec5e1SHisping Lin TEEC_NONE, 299ae8ec5e1SHisping Lin TEEC_NONE); 300ae8ec5e1SHisping Lin 301ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 30246b2a054SHisping Lin 142, 303ae8ec5e1SHisping Lin &TeecOperation, 304ae8ec5e1SHisping Lin &ErrorOrigin); 30546b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 306ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 307ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 308ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 309ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 31046b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 311ae8ec5e1SHisping Lin debug("testmm end\n"); 312ae8ec5e1SHisping Lin 313ae8ec5e1SHisping Lin return TeecResult; 314ae8ec5e1SHisping Lin } 315ae8ec5e1SHisping Lin 316ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 317ae8ec5e1SHisping Lin { 318ae8ec5e1SHisping Lin TEEC_Result TeecResult; 319ae8ec5e1SHisping Lin TEEC_Context TeecContext; 320ae8ec5e1SHisping Lin TEEC_Session TeecSession; 321ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 32246b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 32346b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 324ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 325ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 326ae8ec5e1SHisping Lin 327ae8ec5e1SHisping Lin debug("testmm start\n"); 328ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 329ae8ec5e1SHisping Lin 330ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 331ae8ec5e1SHisping Lin 332ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 333ae8ec5e1SHisping Lin &TeecSession, 334ae8ec5e1SHisping Lin TeecUuid, 335ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 336ae8ec5e1SHisping Lin NULL, 337ae8ec5e1SHisping Lin NULL, 338ae8ec5e1SHisping Lin &ErrorOrigin); 339ae8ec5e1SHisping Lin 340ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 341ae8ec5e1SHisping Lin 342ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 343ae8ec5e1SHisping Lin SharedMem0.flags = 0; 344ae8ec5e1SHisping Lin 345ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 346ae8ec5e1SHisping Lin 347ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 348ae8ec5e1SHisping Lin 349ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 350ae8ec5e1SHisping Lin 351ae8ec5e1SHisping Lin SharedMem1.size = size; 352ae8ec5e1SHisping Lin SharedMem1.flags = 0; 353ae8ec5e1SHisping Lin 354ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 355ae8ec5e1SHisping Lin 356ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 357ae8ec5e1SHisping Lin 358ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 359ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 360ae8ec5e1SHisping Lin 361ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 362ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 363ae8ec5e1SHisping Lin 364ae8ec5e1SHisping Lin 365ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 366ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 367ae8ec5e1SHisping Lin TEEC_NONE, 368ae8ec5e1SHisping Lin TEEC_NONE); 369ae8ec5e1SHisping Lin 370ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 37146b2a054SHisping Lin 141, 372ae8ec5e1SHisping Lin &TeecOperation, 373ae8ec5e1SHisping Lin &ErrorOrigin); 374ae8ec5e1SHisping Lin 375ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 376ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 377ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 37846b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 379ae8ec5e1SHisping Lin debug("testmm end\n"); 380ae8ec5e1SHisping Lin 381ae8ec5e1SHisping Lin return TeecResult; 382ae8ec5e1SHisping Lin } 383ae8ec5e1SHisping Lin 384ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 385ae8ec5e1SHisping Lin { 386ae8ec5e1SHisping Lin TEEC_Result TeecResult; 387ae8ec5e1SHisping Lin TEEC_Context TeecContext; 388ae8ec5e1SHisping Lin TEEC_Session TeecSession; 389ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 390ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 391ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 392ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 393ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 394ae8ec5e1SHisping Lin 395ae8ec5e1SHisping Lin debug("testmm start\n"); 396ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 397ae8ec5e1SHisping Lin 398ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 399ae8ec5e1SHisping Lin 400ae8ec5e1SHisping Lin 401ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 402ae8ec5e1SHisping Lin &TeecSession, 403ae8ec5e1SHisping Lin TeecUuid, 404ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 405ae8ec5e1SHisping Lin NULL, 406ae8ec5e1SHisping Lin NULL, 407ae8ec5e1SHisping Lin &ErrorOrigin); 408ae8ec5e1SHisping Lin 409ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 410ae8ec5e1SHisping Lin 411ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 412ae8ec5e1SHisping Lin SharedMem0.flags = 0; 413ae8ec5e1SHisping Lin 414ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 415ae8ec5e1SHisping Lin 416ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 417ae8ec5e1SHisping Lin 418ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 419ae8ec5e1SHisping Lin 420ae8ec5e1SHisping Lin SharedMem1.size = 1; 421ae8ec5e1SHisping Lin SharedMem1.flags = 0; 422ae8ec5e1SHisping Lin 423ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 424ae8ec5e1SHisping Lin 425ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 426ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 427ae8ec5e1SHisping Lin 428ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 429ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 430ae8ec5e1SHisping Lin 431ae8ec5e1SHisping Lin 432ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 433ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 434ae8ec5e1SHisping Lin TEEC_NONE, 435ae8ec5e1SHisping Lin TEEC_NONE); 436ae8ec5e1SHisping Lin 437ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 438ae8ec5e1SHisping Lin 0, 439ae8ec5e1SHisping Lin &TeecOperation, 440ae8ec5e1SHisping Lin &ErrorOrigin); 44146b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 442ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 443ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 444ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 445ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 44646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 447ae8ec5e1SHisping Lin debug("testmm end\n"); 448ae8ec5e1SHisping Lin 449ae8ec5e1SHisping Lin return TeecResult; 450ae8ec5e1SHisping Lin } 451ae8ec5e1SHisping Lin 452ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 453ae8ec5e1SHisping Lin { 454ae8ec5e1SHisping Lin TEEC_Result TeecResult; 455ae8ec5e1SHisping Lin TEEC_Context TeecContext; 456ae8ec5e1SHisping Lin TEEC_Session TeecSession; 457ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 458ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 459ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 460ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 461ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 462ae8ec5e1SHisping Lin 463ae8ec5e1SHisping Lin debug("testmm start\n"); 464ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 465ae8ec5e1SHisping Lin 466ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 467ae8ec5e1SHisping Lin 468ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 469ae8ec5e1SHisping Lin &TeecSession, 470ae8ec5e1SHisping Lin TeecUuid, 471ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 472ae8ec5e1SHisping Lin NULL, 473ae8ec5e1SHisping Lin NULL, 474ae8ec5e1SHisping Lin &ErrorOrigin); 475ae8ec5e1SHisping Lin 476ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 477ae8ec5e1SHisping Lin 478ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 479ae8ec5e1SHisping Lin SharedMem0.flags = 0; 480ae8ec5e1SHisping Lin 481ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 482ae8ec5e1SHisping Lin 483ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 484ae8ec5e1SHisping Lin 485ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 486ae8ec5e1SHisping Lin 487ae8ec5e1SHisping Lin SharedMem1.size = 1; 488ae8ec5e1SHisping Lin SharedMem1.flags = 0; 489ae8ec5e1SHisping Lin 490ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 491ae8ec5e1SHisping Lin 492ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 493ae8ec5e1SHisping Lin 494ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 495ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 496ae8ec5e1SHisping Lin 497ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 498ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 499ae8ec5e1SHisping Lin 500ae8ec5e1SHisping Lin 501ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 502ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 503ae8ec5e1SHisping Lin TEEC_NONE, 504ae8ec5e1SHisping Lin TEEC_NONE); 505ae8ec5e1SHisping Lin 506ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 507ae8ec5e1SHisping Lin 1, 508ae8ec5e1SHisping Lin &TeecOperation, 509ae8ec5e1SHisping Lin &ErrorOrigin); 510ae8ec5e1SHisping Lin 511ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 512ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 513ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 51446b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 515ae8ec5e1SHisping Lin debug("testmm end\n"); 516ae8ec5e1SHisping Lin 517ae8ec5e1SHisping Lin return TeecResult; 518ae8ec5e1SHisping Lin } 519ae8ec5e1SHisping Lin 520ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 521ae8ec5e1SHisping Lin { 522ae8ec5e1SHisping Lin TEEC_Result TeecResult; 523ae8ec5e1SHisping Lin TEEC_Context TeecContext; 524ae8ec5e1SHisping Lin TEEC_Session TeecSession; 525ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 526ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 527ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 528ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 529ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 530ae8ec5e1SHisping Lin 531ae8ec5e1SHisping Lin debug("testmm start\n"); 532ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 533ae8ec5e1SHisping Lin 534ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 535ae8ec5e1SHisping Lin 536ae8ec5e1SHisping Lin 537ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 538ae8ec5e1SHisping Lin &TeecSession, 539ae8ec5e1SHisping Lin TeecUuid, 540ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 541ae8ec5e1SHisping Lin NULL, 542ae8ec5e1SHisping Lin NULL, 543ae8ec5e1SHisping Lin &ErrorOrigin); 544ae8ec5e1SHisping Lin 545ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 546ae8ec5e1SHisping Lin 547ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 548ae8ec5e1SHisping Lin SharedMem0.flags = 0; 549ae8ec5e1SHisping Lin 550ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 551ae8ec5e1SHisping Lin 552ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 553ae8ec5e1SHisping Lin 554ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 555ae8ec5e1SHisping Lin 556ae8ec5e1SHisping Lin SharedMem1.size = 1; 557ae8ec5e1SHisping Lin SharedMem1.flags = 0; 558ae8ec5e1SHisping Lin 559ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 560ae8ec5e1SHisping Lin 561ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 562ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 563ae8ec5e1SHisping Lin 564ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 565ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 566ae8ec5e1SHisping Lin 567ae8ec5e1SHisping Lin 568ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 569ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 570ae8ec5e1SHisping Lin TEEC_NONE, 571ae8ec5e1SHisping Lin TEEC_NONE); 572ae8ec5e1SHisping Lin 573ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 574ae8ec5e1SHisping Lin 0, 575ae8ec5e1SHisping Lin &TeecOperation, 576ae8ec5e1SHisping Lin &ErrorOrigin); 57746b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 578ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 579ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 580ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 581ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 58246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 583ae8ec5e1SHisping Lin debug("testmm end\n"); 584ae8ec5e1SHisping Lin 585ae8ec5e1SHisping Lin return TeecResult; 586ae8ec5e1SHisping Lin } 587ae8ec5e1SHisping Lin 588ae8ec5e1SHisping Lin 589ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 590ae8ec5e1SHisping Lin { 591ae8ec5e1SHisping Lin TEEC_Result TeecResult; 592ae8ec5e1SHisping Lin TEEC_Context TeecContext; 593ae8ec5e1SHisping Lin TEEC_Session TeecSession; 594ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 595ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 596ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 597ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 598ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 599ae8ec5e1SHisping Lin 600ae8ec5e1SHisping Lin debug("testmm start\n"); 601ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 602ae8ec5e1SHisping Lin 603ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 604ae8ec5e1SHisping Lin 605ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 606ae8ec5e1SHisping Lin &TeecSession, 607ae8ec5e1SHisping Lin TeecUuid, 608ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 609ae8ec5e1SHisping Lin NULL, 610ae8ec5e1SHisping Lin NULL, 611ae8ec5e1SHisping Lin &ErrorOrigin); 612ae8ec5e1SHisping Lin 613ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 614ae8ec5e1SHisping Lin 615ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 616ae8ec5e1SHisping Lin SharedMem0.flags = 0; 617ae8ec5e1SHisping Lin 618ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 619ae8ec5e1SHisping Lin 620ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 621ae8ec5e1SHisping Lin 622ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 623ae8ec5e1SHisping Lin 624ae8ec5e1SHisping Lin SharedMem1.size = 1; 625ae8ec5e1SHisping Lin SharedMem1.flags = 0; 626ae8ec5e1SHisping Lin 627ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 628ae8ec5e1SHisping Lin 629ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 630ae8ec5e1SHisping Lin 631ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 632ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 633ae8ec5e1SHisping Lin 634ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 635ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 636ae8ec5e1SHisping Lin 637ae8ec5e1SHisping Lin 638ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 639ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 640ae8ec5e1SHisping Lin TEEC_NONE, 641ae8ec5e1SHisping Lin TEEC_NONE); 642ae8ec5e1SHisping Lin 643ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 644ae8ec5e1SHisping Lin 1, 645ae8ec5e1SHisping Lin &TeecOperation, 646ae8ec5e1SHisping Lin &ErrorOrigin); 647ae8ec5e1SHisping Lin 648ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 649ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 650ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 65146b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 652ae8ec5e1SHisping Lin debug("testmm end\n"); 653ae8ec5e1SHisping Lin 654ae8ec5e1SHisping Lin return TeecResult; 655ae8ec5e1SHisping Lin } 656ae8ec5e1SHisping Lin 657ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 658ae8ec5e1SHisping Lin uint32_t filename_size, 659ae8ec5e1SHisping Lin uint8_t *data, 660ae8ec5e1SHisping Lin uint32_t data_size) 661ae8ec5e1SHisping Lin { 662ae8ec5e1SHisping Lin TEEC_Result TeecResult; 663ae8ec5e1SHisping Lin TEEC_Context TeecContext; 664ae8ec5e1SHisping Lin TEEC_Session TeecSession; 665ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 666ae8ec5e1SHisping Lin 667ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 668ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 669ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 670ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 671ae8ec5e1SHisping Lin 672ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 673ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 674ae8ec5e1SHisping Lin 675ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 676ae8ec5e1SHisping Lin 677ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 678ae8ec5e1SHisping Lin &TeecSession, 679ae8ec5e1SHisping Lin TeecUuid, 680ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 681ae8ec5e1SHisping Lin NULL, 682ae8ec5e1SHisping Lin NULL, 683ae8ec5e1SHisping Lin &ErrorOrigin); 684ae8ec5e1SHisping Lin 685ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 686ae8ec5e1SHisping Lin 687ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 688ae8ec5e1SHisping Lin SharedMem0.flags = 0; 689ae8ec5e1SHisping Lin 690ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 691ae8ec5e1SHisping Lin 692ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 693ae8ec5e1SHisping Lin 694ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 695ae8ec5e1SHisping Lin 696ae8ec5e1SHisping Lin SharedMem1.size = data_size; 697ae8ec5e1SHisping Lin SharedMem1.flags = 0; 698ae8ec5e1SHisping Lin 699ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 700ae8ec5e1SHisping Lin 701ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 702ae8ec5e1SHisping Lin 703ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 704ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 705ae8ec5e1SHisping Lin 706ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 707ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 708ae8ec5e1SHisping Lin 709ae8ec5e1SHisping Lin 710ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 711ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 712ae8ec5e1SHisping Lin TEEC_NONE, 713ae8ec5e1SHisping Lin TEEC_NONE); 714ae8ec5e1SHisping Lin 715ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 716ae8ec5e1SHisping Lin 139, 717ae8ec5e1SHisping Lin &TeecOperation, 718ae8ec5e1SHisping Lin &ErrorOrigin); 719ae8ec5e1SHisping Lin 720ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 721ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 722ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 72346b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 724ae8ec5e1SHisping Lin debug("testmm end\n"); 725ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 726ae8ec5e1SHisping Lin 727ae8ec5e1SHisping Lin return TeecResult; 728ae8ec5e1SHisping Lin } 7296ef445a4SHisping Lin 7306ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 7316ef445a4SHisping Lin { 7326ef445a4SHisping Lin TEEC_Result TeecResult; 7336ef445a4SHisping Lin TEEC_Context TeecContext; 7346ef445a4SHisping Lin TEEC_Session TeecSession; 7356ef445a4SHisping Lin uint32_t ErrorOrigin; 7366ef445a4SHisping Lin 7376ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 7386ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 7396ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 7406ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 7416ef445a4SHisping Lin 7426ef445a4SHisping Lin OpteeClientApiLibInitialize(); 7436ef445a4SHisping Lin 7446ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 7456ef445a4SHisping Lin 7466ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 7476ef445a4SHisping Lin &TeecSession, 7486ef445a4SHisping Lin TeecUuid, 7496ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 7506ef445a4SHisping Lin NULL, 7516ef445a4SHisping Lin NULL, 7526ef445a4SHisping Lin &ErrorOrigin); 7536ef445a4SHisping Lin 7546ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 7556ef445a4SHisping Lin 7566ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 7576ef445a4SHisping Lin SharedMem0.flags = 0; 7586ef445a4SHisping Lin 7596ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 7606ef445a4SHisping Lin 7616ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 7626ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 7636ef445a4SHisping Lin 7646ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 7656ef445a4SHisping Lin TEEC_NONE, 7666ef445a4SHisping Lin TEEC_NONE, 7676ef445a4SHisping Lin TEEC_NONE); 7686ef445a4SHisping Lin 7696ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 7706ef445a4SHisping Lin 0, 7716ef445a4SHisping Lin &TeecOperation, 7726ef445a4SHisping Lin &ErrorOrigin); 7736ef445a4SHisping Lin 7746ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 7756ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 7766ef445a4SHisping Lin 7776ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 7786ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 7796ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 7806ef445a4SHisping Lin 7816ef445a4SHisping Lin return TeecResult; 7826ef445a4SHisping Lin } 7836ef445a4SHisping Lin 7846ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 7856ef445a4SHisping Lin { 7866ef445a4SHisping Lin TEEC_Result TeecResult; 7876ef445a4SHisping Lin TEEC_Context TeecContext; 7886ef445a4SHisping Lin TEEC_Session TeecSession; 7896ef445a4SHisping Lin uint32_t ErrorOrigin; 7906ef445a4SHisping Lin 7916ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 7926ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 7936ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 7946ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 7956ef445a4SHisping Lin 7966ef445a4SHisping Lin OpteeClientApiLibInitialize(); 7976ef445a4SHisping Lin 7986ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 7996ef445a4SHisping Lin 8006ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 8016ef445a4SHisping Lin &TeecSession, 8026ef445a4SHisping Lin TeecUuid, 8036ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 8046ef445a4SHisping Lin NULL, 8056ef445a4SHisping Lin NULL, 8066ef445a4SHisping Lin &ErrorOrigin); 8076ef445a4SHisping Lin 8086ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 8096ef445a4SHisping Lin 8106ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 8116ef445a4SHisping Lin SharedMem0.flags = 0; 8126ef445a4SHisping Lin 8136ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 8146ef445a4SHisping Lin 8156ef445a4SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 8166ef445a4SHisping Lin 8176ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 8186ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 8196ef445a4SHisping Lin 8206ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 8216ef445a4SHisping Lin TEEC_NONE, 8226ef445a4SHisping Lin TEEC_NONE, 8236ef445a4SHisping Lin TEEC_NONE); 8246ef445a4SHisping Lin 8256ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 8266ef445a4SHisping Lin 1, 8276ef445a4SHisping Lin &TeecOperation, 8286ef445a4SHisping Lin &ErrorOrigin); 8296ef445a4SHisping Lin 8306ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 8316ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 8326ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 8336ef445a4SHisping Lin 8346ef445a4SHisping Lin return TeecResult; 8356ef445a4SHisping Lin } 83616539616SHisping Lin 83716539616SHisping Lin uint32_t notify_optee_rpmb_ta(void) 83816539616SHisping Lin { 83916539616SHisping Lin TEEC_Result TeecResult; 84016539616SHisping Lin TEEC_Context TeecContext; 84116539616SHisping Lin TEEC_Session TeecSession; 84216539616SHisping Lin uint32_t ErrorOrigin; 84316539616SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 84416539616SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 84516539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 84616539616SHisping Lin TEEC_Operation TeecOperation = {0}; 84716539616SHisping Lin 84816539616SHisping Lin OpteeClientApiLibInitialize(); 84916539616SHisping Lin 85016539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 85116539616SHisping Lin 85216539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 85316539616SHisping Lin &TeecSession, 85416539616SHisping Lin TeecUuid, 85516539616SHisping Lin TEEC_LOGIN_PUBLIC, 85616539616SHisping Lin NULL, 85716539616SHisping Lin NULL, 85816539616SHisping Lin &ErrorOrigin); 85916539616SHisping Lin 86016539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 86116539616SHisping Lin TEEC_NONE, 86216539616SHisping Lin TEEC_NONE, 86316539616SHisping Lin TEEC_NONE); 86416539616SHisping Lin 86516539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 86616539616SHisping Lin 2, 86716539616SHisping Lin &TeecOperation, 86816539616SHisping Lin &ErrorOrigin); 86916539616SHisping Lin 87016539616SHisping Lin TEEC_CloseSession(&TeecSession); 87116539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 87216539616SHisping Lin 87316539616SHisping Lin return TeecResult; 87416539616SHisping Lin } 87516539616SHisping Lin 87616539616SHisping Lin uint32_t notify_optee_efuse_ta(void) 87716539616SHisping Lin { 87816539616SHisping Lin TEEC_Result TeecResult; 87916539616SHisping Lin TEEC_Context TeecContext; 88016539616SHisping Lin TEEC_Session TeecSession; 88116539616SHisping Lin uint32_t ErrorOrigin; 88216539616SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 88316539616SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 88416539616SHisping Lin 88516539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 88616539616SHisping Lin TEEC_Operation TeecOperation = {0}; 88716539616SHisping Lin 88816539616SHisping Lin OpteeClientApiLibInitialize(); 88916539616SHisping Lin 89016539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 89116539616SHisping Lin 89216539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 89316539616SHisping Lin &TeecSession, 89416539616SHisping Lin TeecUuid, 89516539616SHisping Lin TEEC_LOGIN_PUBLIC, 89616539616SHisping Lin NULL, 89716539616SHisping Lin NULL, 89816539616SHisping Lin &ErrorOrigin); 89916539616SHisping Lin 90016539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 90116539616SHisping Lin TEEC_NONE, 90216539616SHisping Lin TEEC_NONE, 90316539616SHisping Lin TEEC_NONE); 90416539616SHisping Lin 90516539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 90616539616SHisping Lin 2, 90716539616SHisping Lin &TeecOperation, 90816539616SHisping Lin &ErrorOrigin); 90916539616SHisping Lin 91016539616SHisping Lin TEEC_CloseSession(&TeecSession); 91116539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 91216539616SHisping Lin 91316539616SHisping Lin return TeecResult; 91416539616SHisping Lin } 91516539616SHisping Lin 91616539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void) 91716539616SHisping Lin { 91816539616SHisping Lin TEEC_Result res; 91916539616SHisping Lin res = notify_optee_rpmb_ta(); 92016539616SHisping Lin res |= notify_optee_efuse_ta(); 92116539616SHisping Lin return res; 92216539616SHisping Lin } 9232cd27853SHisping Lin 9242cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) 9252cd27853SHisping Lin { 9262cd27853SHisping Lin TEEC_Result TeecResult; 9272cd27853SHisping Lin TEEC_Context TeecContext; 9282cd27853SHisping Lin TEEC_Session TeecSession; 9292cd27853SHisping Lin uint32_t ErrorOrigin; 9302cd27853SHisping Lin 9312cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9322cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9332cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9342cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 9352cd27853SHisping Lin 9362cd27853SHisping Lin OpteeClientApiLibInitialize(); 9372cd27853SHisping Lin 9382cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9392cd27853SHisping Lin 9402cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9412cd27853SHisping Lin &TeecSession, 9422cd27853SHisping Lin TeecUuid, 9432cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 9442cd27853SHisping Lin NULL, 9452cd27853SHisping Lin NULL, 9462cd27853SHisping Lin &ErrorOrigin); 9472cd27853SHisping Lin 9482cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 9492cd27853SHisping Lin 9502cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 9512cd27853SHisping Lin SharedMem0.flags = 0; 9522cd27853SHisping Lin 9532cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 9542cd27853SHisping Lin 9552cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 9562cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 9572cd27853SHisping Lin 9582cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 9592cd27853SHisping Lin TEEC_NONE, 9602cd27853SHisping Lin TEEC_NONE, 9612cd27853SHisping Lin TEEC_NONE); 9622cd27853SHisping Lin 9632cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9642cd27853SHisping Lin 3, 9652cd27853SHisping Lin &TeecOperation, 9662cd27853SHisping Lin &ErrorOrigin); 9672cd27853SHisping Lin 9682cd27853SHisping Lin if (TeecResult == TEEC_SUCCESS) 9692cd27853SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 9702cd27853SHisping Lin 9712cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 9722cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 9732cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 9742cd27853SHisping Lin 9752cd27853SHisping Lin return TeecResult; 9762cd27853SHisping Lin } 9772cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 9782cd27853SHisping Lin { 9792cd27853SHisping Lin TEEC_Result TeecResult; 9802cd27853SHisping Lin TEEC_Context TeecContext; 9812cd27853SHisping Lin TEEC_Session TeecSession; 9822cd27853SHisping Lin uint32_t ErrorOrigin; 9832cd27853SHisping Lin 9842cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9852cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9862cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9872cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 9882cd27853SHisping Lin 9892cd27853SHisping Lin OpteeClientApiLibInitialize(); 9902cd27853SHisping Lin 9912cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9922cd27853SHisping Lin 9932cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9942cd27853SHisping Lin &TeecSession, 9952cd27853SHisping Lin TeecUuid, 9962cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 9972cd27853SHisping Lin NULL, 9982cd27853SHisping Lin NULL, 9992cd27853SHisping Lin &ErrorOrigin); 10002cd27853SHisping Lin 10012cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 10022cd27853SHisping Lin 10032cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 10042cd27853SHisping Lin SharedMem0.flags = 0; 10052cd27853SHisping Lin 10062cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 10072cd27853SHisping Lin 10082cd27853SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 10092cd27853SHisping Lin 10102cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 10112cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 10122cd27853SHisping Lin 10132cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 10142cd27853SHisping Lin TEEC_NONE, 10152cd27853SHisping Lin TEEC_NONE, 10162cd27853SHisping Lin TEEC_NONE); 10172cd27853SHisping Lin 10182cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10192cd27853SHisping Lin 4, 10202cd27853SHisping Lin &TeecOperation, 10212cd27853SHisping Lin &ErrorOrigin); 10222cd27853SHisping Lin 10232cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10242cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 10252cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 10262cd27853SHisping Lin 10272cd27853SHisping Lin return TeecResult; 10282cd27853SHisping Lin } 1029095e2a82SHisping Lin 1030468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) 1031468df3b2SHisping Lin { 1032468df3b2SHisping Lin TEEC_Result TeecResult; 1033468df3b2SHisping Lin TEEC_Context TeecContext; 1034468df3b2SHisping Lin TEEC_Session TeecSession; 1035468df3b2SHisping Lin uint32_t ErrorOrigin; 1036468df3b2SHisping Lin uint32_t bootflag; 1037468df3b2SHisping Lin 1038468df3b2SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 1039468df3b2SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 1040468df3b2SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1041468df3b2SHisping Lin TEEC_Operation TeecOperation = {0}; 1042468df3b2SHisping Lin 1043468df3b2SHisping Lin OpteeClientApiLibInitialize(); 1044468df3b2SHisping Lin 1045468df3b2SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1046468df3b2SHisping Lin 1047468df3b2SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1048468df3b2SHisping Lin &TeecSession, 1049468df3b2SHisping Lin TeecUuid, 1050468df3b2SHisping Lin TEEC_LOGIN_PUBLIC, 1051468df3b2SHisping Lin NULL, 1052468df3b2SHisping Lin NULL, 1053468df3b2SHisping Lin &ErrorOrigin); 1054468df3b2SHisping Lin 1055468df3b2SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1056468df3b2SHisping Lin 1057468df3b2SHisping Lin SharedMem0.size = 1 * sizeof(uint32_t); 1058468df3b2SHisping Lin SharedMem0.flags = 0; 1059468df3b2SHisping Lin 1060468df3b2SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1061468df3b2SHisping Lin 1062468df3b2SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1063468df3b2SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1064468df3b2SHisping Lin 1065468df3b2SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 1066468df3b2SHisping Lin TEEC_NONE, 1067468df3b2SHisping Lin TEEC_NONE, 1068468df3b2SHisping Lin TEEC_NONE); 1069468df3b2SHisping Lin 1070468df3b2SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1071468df3b2SHisping Lin 5, 1072468df3b2SHisping Lin &TeecOperation, 1073468df3b2SHisping Lin &ErrorOrigin); 1074468df3b2SHisping Lin 1075468df3b2SHisping Lin if (TeecResult == TEEC_SUCCESS) { 1076468df3b2SHisping Lin memcpy(&bootflag, SharedMem0.buffer, SharedMem0.size); 1077468df3b2SHisping Lin if (bootflag == 0x000000FF) 1078468df3b2SHisping Lin *flag = 1; 1079468df3b2SHisping Lin } 1080468df3b2SHisping Lin 1081468df3b2SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1082468df3b2SHisping Lin TEEC_CloseSession(&TeecSession); 1083468df3b2SHisping Lin TEEC_FinalizeContext(&TeecContext); 1084468df3b2SHisping Lin 1085468df3b2SHisping Lin return TeecResult; 1086468df3b2SHisping Lin } 1087468df3b2SHisping Lin 1088095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1089095e2a82SHisping Lin { 1090095e2a82SHisping Lin TEEC_Result TeecResult; 1091095e2a82SHisping Lin TEEC_Context TeecContext; 1092095e2a82SHisping Lin TEEC_Session TeecSession; 1093095e2a82SHisping Lin uint32_t ErrorOrigin; 1094095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1095095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1096095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1097095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1098095e2a82SHisping Lin 1099095e2a82SHisping Lin debug("testmm start\n"); 1100095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1101095e2a82SHisping Lin 1102095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1103095e2a82SHisping Lin 1104095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1105095e2a82SHisping Lin &TeecSession, 1106095e2a82SHisping Lin TeecUuid, 1107095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1108095e2a82SHisping Lin NULL, 1109095e2a82SHisping Lin NULL, 1110095e2a82SHisping Lin &ErrorOrigin); 1111095e2a82SHisping Lin 1112095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1113095e2a82SHisping Lin 1114095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1115095e2a82SHisping Lin SharedMem0.flags = 0; 1116095e2a82SHisping Lin 1117095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1118095e2a82SHisping Lin 1119095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1120095e2a82SHisping Lin 1121095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1122095e2a82SHisping Lin 1123095e2a82SHisping Lin SharedMem1.size = 1; 1124095e2a82SHisping Lin SharedMem1.flags = 0; 1125095e2a82SHisping Lin 1126095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1127095e2a82SHisping Lin 1128095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1129095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1130095e2a82SHisping Lin 1131095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1132095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1133095e2a82SHisping Lin 1134095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1135095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1136095e2a82SHisping Lin TEEC_NONE, 1137095e2a82SHisping Lin TEEC_NONE); 1138095e2a82SHisping Lin 1139095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1140095e2a82SHisping Lin 142, 1141095e2a82SHisping Lin &TeecOperation, 1142095e2a82SHisping Lin &ErrorOrigin); 1143095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1144095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1145095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1146095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1147095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1148095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1149095e2a82SHisping Lin debug("testmm end\n"); 1150095e2a82SHisping Lin 1151095e2a82SHisping Lin return TeecResult; 1152095e2a82SHisping Lin } 1153095e2a82SHisping Lin 1154095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1155095e2a82SHisping Lin { 1156095e2a82SHisping Lin TEEC_Result TeecResult; 1157095e2a82SHisping Lin TEEC_Context TeecContext; 1158095e2a82SHisping Lin TEEC_Session TeecSession; 1159095e2a82SHisping Lin uint32_t ErrorOrigin; 1160095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1161095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1162095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1163095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1164095e2a82SHisping Lin 1165095e2a82SHisping Lin debug("testmm start\n"); 1166095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1167095e2a82SHisping Lin 1168095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1169095e2a82SHisping Lin 1170095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1171095e2a82SHisping Lin &TeecSession, 1172095e2a82SHisping Lin TeecUuid, 1173095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1174095e2a82SHisping Lin NULL, 1175095e2a82SHisping Lin NULL, 1176095e2a82SHisping Lin &ErrorOrigin); 1177095e2a82SHisping Lin 1178095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1179095e2a82SHisping Lin 1180095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1181095e2a82SHisping Lin SharedMem0.flags = 0; 1182095e2a82SHisping Lin 1183095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1184095e2a82SHisping Lin 1185095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1186095e2a82SHisping Lin 1187095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1188095e2a82SHisping Lin 1189095e2a82SHisping Lin SharedMem1.size = 1; 1190095e2a82SHisping Lin SharedMem1.flags = 0; 1191095e2a82SHisping Lin 1192095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1193095e2a82SHisping Lin 1194095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1195095e2a82SHisping Lin 1196095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1197095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1198095e2a82SHisping Lin 1199095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1200095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1201095e2a82SHisping Lin 1202095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1203095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1204095e2a82SHisping Lin TEEC_NONE, 1205095e2a82SHisping Lin TEEC_NONE); 1206095e2a82SHisping Lin 1207095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1208095e2a82SHisping Lin 141, 1209095e2a82SHisping Lin &TeecOperation, 1210095e2a82SHisping Lin &ErrorOrigin); 1211095e2a82SHisping Lin 1212095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1213095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1214095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1215095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1216095e2a82SHisping Lin debug("testmm end\n"); 1217095e2a82SHisping Lin 1218095e2a82SHisping Lin return TeecResult; 1219095e2a82SHisping Lin } 1220*4aa61755SAndy Ye 1221*4aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 1222*4aa61755SAndy Ye { 1223*4aa61755SAndy Ye TEEC_Result TeecResult; 1224*4aa61755SAndy Ye TEEC_Context TeecContext; 1225*4aa61755SAndy Ye TEEC_Session TeecSession; 1226*4aa61755SAndy Ye uint32_t ErrorOrigin; 1227*4aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1228*4aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 1229*4aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 1230*4aa61755SAndy Ye } 1231*4aa61755SAndy Ye }; 1232*4aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 1233*4aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1234*4aa61755SAndy Ye 1235*4aa61755SAndy Ye OpteeClientApiLibInitialize(); 1236*4aa61755SAndy Ye 1237*4aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1238*4aa61755SAndy Ye 1239*4aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 1240*4aa61755SAndy Ye &TeecSession, 1241*4aa61755SAndy Ye TeecUuid, 1242*4aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 1243*4aa61755SAndy Ye NULL, 1244*4aa61755SAndy Ye NULL, 1245*4aa61755SAndy Ye &ErrorOrigin); 1246*4aa61755SAndy Ye 1247*4aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 1248*4aa61755SAndy Ye 1249*4aa61755SAndy Ye SharedMem0.size = *dh_size; 1250*4aa61755SAndy Ye SharedMem0.flags = 0; 1251*4aa61755SAndy Ye 1252*4aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1253*4aa61755SAndy Ye 1254*4aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1255*4aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 1256*4aa61755SAndy Ye 1257*4aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 1258*4aa61755SAndy Ye TEEC_NONE, 1259*4aa61755SAndy Ye TEEC_NONE, 1260*4aa61755SAndy Ye TEEC_NONE); 1261*4aa61755SAndy Ye 1262*4aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 1263*4aa61755SAndy Ye 143, 1264*4aa61755SAndy Ye &TeecOperation, 1265*4aa61755SAndy Ye &ErrorOrigin); 1266*4aa61755SAndy Ye 1267*4aa61755SAndy Ye *dh_size = TeecOperation.params[0].tmpref.size; 1268*4aa61755SAndy Ye memcpy(dh, SharedMem0.buffer, SharedMem0.size); 1269*4aa61755SAndy Ye 1270*4aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 1271*4aa61755SAndy Ye 1272*4aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 1273*4aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 1274*4aa61755SAndy Ye 1275*4aa61755SAndy Ye return TeecResult; 1276*4aa61755SAndy Ye } 1277*4aa61755SAndy Ye 1278*4aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 1279*4aa61755SAndy Ye { 1280*4aa61755SAndy Ye TEEC_Result TeecResult; 1281*4aa61755SAndy Ye TEEC_Context TeecContext; 1282*4aa61755SAndy Ye TEEC_Session TeecSession; 1283*4aa61755SAndy Ye uint32_t ErrorOrigin; 1284*4aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1285*4aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 1286*4aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 1287*4aa61755SAndy Ye } 1288*4aa61755SAndy Ye }; 1289*4aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 1290*4aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1291*4aa61755SAndy Ye 1292*4aa61755SAndy Ye OpteeClientApiLibInitialize(); 1293*4aa61755SAndy Ye 1294*4aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1295*4aa61755SAndy Ye 1296*4aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 1297*4aa61755SAndy Ye &TeecSession, 1298*4aa61755SAndy Ye TeecUuid, 1299*4aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 1300*4aa61755SAndy Ye NULL, 1301*4aa61755SAndy Ye NULL, 1302*4aa61755SAndy Ye &ErrorOrigin); 1303*4aa61755SAndy Ye 1304*4aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 1305*4aa61755SAndy Ye 1306*4aa61755SAndy Ye SharedMem0.size = *uuid_size; 1307*4aa61755SAndy Ye SharedMem0.flags = 0; 1308*4aa61755SAndy Ye 1309*4aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1310*4aa61755SAndy Ye 1311*4aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1312*4aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 1313*4aa61755SAndy Ye 1314*4aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 1315*4aa61755SAndy Ye TEEC_NONE, 1316*4aa61755SAndy Ye TEEC_NONE, 1317*4aa61755SAndy Ye TEEC_NONE); 1318*4aa61755SAndy Ye 1319*4aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 1320*4aa61755SAndy Ye 144, 1321*4aa61755SAndy Ye &TeecOperation, 1322*4aa61755SAndy Ye &ErrorOrigin); 1323*4aa61755SAndy Ye 1324*4aa61755SAndy Ye *uuid_size = TeecOperation.params[0].tmpref.size; 1325*4aa61755SAndy Ye memcpy(uuid, SharedMem0.buffer, SharedMem0.size); 1326*4aa61755SAndy Ye 1327*4aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 1328*4aa61755SAndy Ye 1329*4aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 1330*4aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 1331*4aa61755SAndy Ye 1332*4aa61755SAndy Ye return TeecResult; 1333*4aa61755SAndy Ye } 1334*4aa61755SAndy Ye 1335*4aa61755SAndy Ye uint32_t trusty_attest_get_ca(uint8_t *operation_start, 1336*4aa61755SAndy Ye uint32_t *operation_size, 1337*4aa61755SAndy Ye uint8_t *out, 1338*4aa61755SAndy Ye uint32_t *out_len) 1339*4aa61755SAndy Ye { 1340*4aa61755SAndy Ye TEEC_Result TeecResult; 1341*4aa61755SAndy Ye TEEC_Context TeecContext; 1342*4aa61755SAndy Ye TEEC_Session TeecSession; 1343*4aa61755SAndy Ye uint32_t ErrorOrigin; 1344*4aa61755SAndy Ye 1345*4aa61755SAndy Ye OpteeClientApiLibInitialize(); 1346*4aa61755SAndy Ye 1347*4aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1348*4aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 1349*4aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 1350*4aa61755SAndy Ye } 1351*4aa61755SAndy Ye }; 1352*4aa61755SAndy Ye 1353*4aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 1354*4aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1355*4aa61755SAndy Ye 1356*4aa61755SAndy Ye OpteeClientApiLibInitialize(); 1357*4aa61755SAndy Ye 1358*4aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1359*4aa61755SAndy Ye 1360*4aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 1361*4aa61755SAndy Ye &TeecSession, 1362*4aa61755SAndy Ye TeecUuid, 1363*4aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 1364*4aa61755SAndy Ye NULL, 1365*4aa61755SAndy Ye NULL, 1366*4aa61755SAndy Ye &ErrorOrigin); 1367*4aa61755SAndy Ye 1368*4aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 1369*4aa61755SAndy Ye 1370*4aa61755SAndy Ye SharedMem0.size = *operation_size; 1371*4aa61755SAndy Ye SharedMem0.flags = 0; 1372*4aa61755SAndy Ye 1373*4aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1374*4aa61755SAndy Ye 1375*4aa61755SAndy Ye memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); 1376*4aa61755SAndy Ye 1377*4aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1378*4aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 1379*4aa61755SAndy Ye 1380*4aa61755SAndy Ye TEEC_SharedMemory SharedMem1 = {0}; 1381*4aa61755SAndy Ye 1382*4aa61755SAndy Ye SharedMem1.size = *out_len; 1383*4aa61755SAndy Ye SharedMem1.flags = 0; 1384*4aa61755SAndy Ye 1385*4aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1386*4aa61755SAndy Ye 1387*4aa61755SAndy Ye TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1388*4aa61755SAndy Ye TeecOperation.params[1].tmpref.size = SharedMem1.size; 1389*4aa61755SAndy Ye 1390*4aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 1391*4aa61755SAndy Ye TEEC_MEMREF_TEMP_INOUT, 1392*4aa61755SAndy Ye TEEC_NONE, 1393*4aa61755SAndy Ye TEEC_NONE); 1394*4aa61755SAndy Ye 1395*4aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 1396*4aa61755SAndy Ye 145, 1397*4aa61755SAndy Ye &TeecOperation, 1398*4aa61755SAndy Ye &ErrorOrigin); 1399*4aa61755SAndy Ye 1400*4aa61755SAndy Ye *out_len = TeecOperation.params[1].tmpref.size; 1401*4aa61755SAndy Ye memcpy(out, SharedMem1.buffer, SharedMem1.size); 1402*4aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 1403*4aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem1); 1404*4aa61755SAndy Ye 1405*4aa61755SAndy Ye return TeecResult; 1406*4aa61755SAndy Ye } 1407*4aa61755SAndy Ye 1408*4aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 1409*4aa61755SAndy Ye { 1410*4aa61755SAndy Ye TEEC_Result TeecResult; 1411*4aa61755SAndy Ye TEEC_Context TeecContext; 1412*4aa61755SAndy Ye TEEC_Session TeecSession; 1413*4aa61755SAndy Ye uint32_t ErrorOrigin; 1414*4aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1415*4aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 1416*4aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 1417*4aa61755SAndy Ye } 1418*4aa61755SAndy Ye }; 1419*4aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 1420*4aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1421*4aa61755SAndy Ye 1422*4aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1423*4aa61755SAndy Ye 1424*4aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 1425*4aa61755SAndy Ye &TeecSession, 1426*4aa61755SAndy Ye TeecUuid, 1427*4aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 1428*4aa61755SAndy Ye NULL, 1429*4aa61755SAndy Ye NULL, 1430*4aa61755SAndy Ye &ErrorOrigin); 1431*4aa61755SAndy Ye 1432*4aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 1433*4aa61755SAndy Ye 1434*4aa61755SAndy Ye SharedMem0.size = *ca_response_size; 1435*4aa61755SAndy Ye SharedMem0.flags = 0; 1436*4aa61755SAndy Ye 1437*4aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1438*4aa61755SAndy Ye 1439*4aa61755SAndy Ye memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); 1440*4aa61755SAndy Ye 1441*4aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1442*4aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 1443*4aa61755SAndy Ye 1444*4aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 1445*4aa61755SAndy Ye TEEC_NONE, 1446*4aa61755SAndy Ye TEEC_NONE, 1447*4aa61755SAndy Ye TEEC_NONE); 1448*4aa61755SAndy Ye 1449*4aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 1450*4aa61755SAndy Ye 146, 1451*4aa61755SAndy Ye &TeecOperation, 1452*4aa61755SAndy Ye &ErrorOrigin); 1453*4aa61755SAndy Ye 1454*4aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 1455*4aa61755SAndy Ye 1456*4aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 1457*4aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 1458*4aa61755SAndy Ye 1459*4aa61755SAndy Ye return TeecResult; 1460*4aa61755SAndy Ye } 1461