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