Lines Matching refs:ta

376 	struct tee_tadb_ta_write *ta;  in tee_tadb_ta_create()  local
382 ta = calloc(1, sizeof(*ta)); in tee_tadb_ta_create()
383 if (!ta) in tee_tadb_ta_create()
386 res = tee_tadb_open(&ta->db); in tee_tadb_ta_create()
396 res = populate_files(ta->db); in tee_tadb_ta_create()
400 if (ta->db->files) { in tee_tadb_ta_create()
401 bit_ffc(ta->db->files, ta->db->nbits, &i); in tee_tadb_ta_create()
403 i = ta->db->nbits; in tee_tadb_ta_create()
406 res = set_file(ta->db, i); in tee_tadb_ta_create()
412 ta->entry.file_number = i; in tee_tadb_ta_create()
413 ta->entry.prop = *property; in tee_tadb_ta_create()
415 res = crypto_rng_read(ta->entry.iv, sizeof(ta->entry.iv)); in tee_tadb_ta_create()
419 res = crypto_rng_read(ta->entry.key, sizeof(ta->entry.key)); in tee_tadb_ta_create()
423 res = ta_operation_open(OPTEE_RPC_FS_CREATE, ta->entry.file_number, in tee_tadb_ta_create()
424 &ta->fd); in tee_tadb_ta_create()
428 res = tadb_authenc_init(TEE_MODE_ENCRYPT, &ta->entry, &ta->ctx); in tee_tadb_ta_create()
432 *ta_ret = ta; in tee_tadb_ta_create()
439 tadb_put(ta->db); in tee_tadb_ta_create()
441 free(ta); in tee_tadb_ta_create()
446 TEE_Result tee_tadb_ta_write(struct tee_tadb_ta_write *ta, const void *buf, in tee_tadb_ta_write() argument
458 res = tee_fs_rpc_write_init(&op, OPTEE_RPC_CMD_FS, ta->fd, in tee_tadb_ta_write()
459 ta->pos, wl, &wb); in tee_tadb_ta_write()
463 res = tadb_update_payload(ta->ctx, TEE_MODE_ENCRYPT, in tee_tadb_ta_write()
474 ta->pos += wl; in tee_tadb_ta_write()
480 void tee_tadb_ta_close_and_delete(struct tee_tadb_ta_write *ta) in tee_tadb_ta_close_and_delete() argument
482 crypto_authenc_final(ta->ctx); in tee_tadb_ta_close_and_delete()
483 crypto_authenc_free_ctx(ta->ctx); in tee_tadb_ta_close_and_delete()
484 tee_fs_rpc_close(OPTEE_RPC_CMD_FS, ta->fd); in tee_tadb_ta_close_and_delete()
485 ta_operation_remove(ta->entry.file_number); in tee_tadb_ta_close_and_delete()
488 clear_file(ta->db, ta->entry.file_number); in tee_tadb_ta_close_and_delete()
491 tadb_put(ta->db); in tee_tadb_ta_close_and_delete()
492 free(ta); in tee_tadb_ta_close_and_delete()
543 TEE_Result tee_tadb_ta_close_and_commit(struct tee_tadb_ta_write *ta) in tee_tadb_ta_close_and_commit() argument
547 size_t sz = sizeof(ta->entry.tag); in tee_tadb_ta_close_and_commit()
552 res = crypto_authenc_enc_final(ta->ctx, NULL, 0, NULL, &dsz, in tee_tadb_ta_close_and_commit()
553 ta->entry.tag, &sz); in tee_tadb_ta_close_and_commit()
557 tee_fs_rpc_close(OPTEE_RPC_CMD_FS, ta->fd); in tee_tadb_ta_close_and_commit()
567 res = find_ent(ta->db, &ta->entry.prop.uuid, &idx, &old_ent); in tee_tadb_ta_close_and_commit()
571 res = find_free_ent_idx(ta->db, &idx); in tee_tadb_ta_close_and_commit()
575 res = write_ent(ta->db, idx, &ta->entry); in tee_tadb_ta_close_and_commit()
579 clear_file(ta->db, old_ent.file_number); in tee_tadb_ta_close_and_commit()
582 crypto_authenc_final(ta->ctx); in tee_tadb_ta_close_and_commit()
583 crypto_authenc_free_ctx(ta->ctx); in tee_tadb_ta_close_and_commit()
584 tadb_put(ta->db); in tee_tadb_ta_close_and_commit()
585 free(ta); in tee_tadb_ta_close_and_commit()
593 tee_tadb_ta_close_and_delete(ta); in tee_tadb_ta_close_and_commit()
637 struct tee_tadb_ta_read *ta = NULL; in tee_tadb_ta_open() local
642 ta = calloc(1, sizeof(*ta)); in tee_tadb_ta_open()
643 if (!ta) in tee_tadb_ta_open()
646 res = tee_tadb_open(&ta->db); in tee_tadb_ta_open()
651 res = find_ent(ta->db, uuid, &idx, &ta->entry); in tee_tadb_ta_open()
656 res = ta_operation_open(OPTEE_RPC_FS_OPEN, ta->entry.file_number, in tee_tadb_ta_open()
657 &ta->fd); in tee_tadb_ta_open()
661 res = tadb_authenc_init(TEE_MODE_DECRYPT, &ta->entry, &ta->ctx); in tee_tadb_ta_open()
665 *ta_ret = ta; in tee_tadb_ta_open()
669 tadb_put(ta->db); in tee_tadb_ta_open()
671 free(ta); in tee_tadb_ta_open()
676 tee_tadb_ta_get_property(struct tee_tadb_ta_read *ta) in tee_tadb_ta_get_property() argument
678 return &ta->entry.prop; in tee_tadb_ta_get_property()
681 TEE_Result tee_tadb_get_tag(struct tee_tadb_ta_read *ta, uint8_t *tag, in tee_tadb_get_tag() argument
684 if (!tag || *tag_len < sizeof(ta->entry.tag)) { in tee_tadb_get_tag()
685 *tag_len = sizeof(ta->entry.tag); in tee_tadb_get_tag()
688 *tag_len = sizeof(ta->entry.tag); in tee_tadb_get_tag()
690 memcpy(tag, ta->entry.tag, sizeof(ta->entry.tag)); in tee_tadb_get_tag()
695 static TEE_Result ta_load(struct tee_tadb_ta_read *ta) in ta_load() argument
699 const size_t sz = ta->entry.prop.custom_size + ta->entry.prop.bin_size; in ta_load()
701 if (ta->ta_mobj) in ta_load()
704 ta->ta_mobj = thread_rpc_alloc_payload(sz); in ta_load()
705 if (!ta->ta_mobj) in ta_load()
708 ta->ta_buf = mobj_get_va(ta->ta_mobj, 0, sz); in ta_load()
709 assert(ta->ta_buf); in ta_load()
711 params[0] = THREAD_PARAM_VALUE(IN, OPTEE_RPC_FS_READ, ta->fd, 0); in ta_load()
712 params[1] = THREAD_PARAM_MEMREF(OUT, ta->ta_mobj, 0, sz); in ta_load()
716 thread_rpc_free_payload(ta->ta_mobj); in ta_load()
717 ta->ta_mobj = NULL; in ta_load()
722 TEE_Result tee_tadb_ta_read(struct tee_tadb_ta_read *ta, void *buf_core, in tee_tadb_ta_read() argument
726 const size_t sz = ta->entry.prop.custom_size + ta->entry.prop.bin_size; in tee_tadb_ta_read()
727 size_t l = MIN(*len, sz - ta->pos); in tee_tadb_ta_read()
734 res = ta_load(ta); in tee_tadb_ta_read()
757 res = tadb_update_payload(ta->ctx, TEE_MODE_DECRYPT, in tee_tadb_ta_read()
758 ta->ta_buf + ta->pos + num_bytes, in tee_tadb_ta_read()
772 ta->pos += l; in tee_tadb_ta_read()
773 if (ta->pos == sz) { in tee_tadb_ta_read()
776 res = crypto_authenc_dec_final(ta->ctx, NULL, 0, NULL, &dl, in tee_tadb_ta_read()
777 ta->entry.tag, TADB_TAG_SIZE); in tee_tadb_ta_read()
787 void tee_tadb_ta_close(struct tee_tadb_ta_read *ta) in tee_tadb_ta_close() argument
789 crypto_authenc_final(ta->ctx); in tee_tadb_ta_close()
790 crypto_authenc_free_ctx(ta->ctx); in tee_tadb_ta_close()
791 if (ta->ta_mobj) in tee_tadb_ta_close()
792 thread_rpc_free_payload(ta->ta_mobj); in tee_tadb_ta_close()
793 tee_fs_rpc_close(OPTEE_RPC_CMD_FS, ta->fd); in tee_tadb_ta_close()
794 tadb_put(ta->db); in tee_tadb_ta_close()
795 free(ta); in tee_tadb_ta_close()