1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2017-2020, Linaro Limited 4 */ 5 6 #ifndef PKCS11_TA_OBJECT_H 7 #define PKCS11_TA_OBJECT_H 8 9 #include <pkcs11_ta.h> 10 #include <sys/queue.h> 11 #include <tee_internal_api.h> 12 13 struct ck_token; 14 struct obj_attrs; 15 struct pkcs11_client; 16 struct pkcs11_session; 17 18 /* 19 * link: objects are referenced in a double-linked list 20 * attributes: pointer to the serialized object attributes 21 * key_handle: GPD TEE object handle if used in an operation 22 * key_type: GPD TEE key type (shortcut used for processing) 23 * uuid: object UUID in the persistent database if a persistent object, or NULL 24 * attribs_hdl: GPD TEE attributes handles if persistent object 25 */ 26 struct pkcs11_object { 27 LIST_ENTRY(pkcs11_object) link; 28 struct obj_attrs *attributes; 29 TEE_ObjectHandle key_handle; 30 uint32_t key_type; 31 TEE_UUID *uuid; 32 TEE_ObjectHandle attribs_hdl; 33 }; 34 35 LIST_HEAD(object_list, pkcs11_object); 36 37 struct pkcs11_object *pkcs11_handle2object(uint32_t client_handle, 38 struct pkcs11_session *session); 39 40 uint32_t pkcs11_object2handle(struct pkcs11_object *obj, 41 struct pkcs11_session *session); 42 43 struct pkcs11_object *create_token_object(struct obj_attrs *head, 44 TEE_UUID *uuid); 45 46 enum pkcs11_rc create_object(void *session, struct obj_attrs *attributes, 47 uint32_t *handle); 48 49 void cleanup_persistent_object(struct pkcs11_object *obj, 50 struct ck_token *token); 51 52 void destroy_object(struct pkcs11_session *session, 53 struct pkcs11_object *object, bool session_object_only); 54 55 /* 56 * Entry function called from the PKCS11 command parser 57 */ 58 enum pkcs11_rc entry_create_object(struct pkcs11_client *client, 59 uint32_t ptypes, TEE_Param *params); 60 61 enum pkcs11_rc entry_destroy_object(struct pkcs11_client *client, 62 uint32_t ptypes, TEE_Param *params); 63 64 enum pkcs11_rc entry_find_objects_init(struct pkcs11_client *client, 65 uint32_t ptypes, TEE_Param *params); 66 67 enum pkcs11_rc entry_find_objects(struct pkcs11_client *client, 68 uint32_t ptypes, TEE_Param *params); 69 70 enum pkcs11_rc entry_find_objects_final(struct pkcs11_client *client, 71 uint32_t ptypes, TEE_Param *params); 72 73 enum pkcs11_rc entry_get_attribute_value(struct pkcs11_client *client, 74 uint32_t ptypes, TEE_Param *params); 75 76 enum pkcs11_rc entry_get_object_size(struct pkcs11_client *client, 77 uint32_t ptypes, TEE_Param *params); 78 79 enum pkcs11_rc entry_set_attribute_value(struct pkcs11_client *client, 80 uint32_t ptypes, TEE_Param *params); 81 82 enum pkcs11_rc entry_copy_object(struct pkcs11_client *client, uint32_t ptypes, 83 TEE_Param *params); 84 85 void release_session_find_obj_context(struct pkcs11_session *session); 86 87 #endif /*PKCS11_TA_OBJECT_H*/ 88