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 obj_attrs; 14 struct pkcs11_client; 15 struct pkcs11_session; 16 17 /* 18 * link: objects are referenced in a double-linked list 19 * attributes: pointer to the serialized object attributes 20 * key_handle: GPD TEE object handle if used in an operation 21 * key_type: GPD TEE key type (shortcut used for processing) 22 * uuid: object UUID in the persistent database if a persistent object, or NULL 23 * attribs_hdl: GPD TEE attributes handles if persistent object 24 */ 25 struct pkcs11_object { 26 LIST_ENTRY(pkcs11_object) link; 27 struct obj_attrs *attributes; 28 TEE_ObjectHandle key_handle; 29 uint32_t key_type; 30 TEE_UUID *uuid; 31 TEE_ObjectHandle attribs_hdl; 32 }; 33 34 LIST_HEAD(object_list, pkcs11_object); 35 36 struct pkcs11_object *pkcs11_handle2object(uint32_t client_handle, 37 struct pkcs11_session *session); 38 39 uint32_t pkcs11_object2handle(struct pkcs11_object *obj, 40 struct pkcs11_session *session); 41 42 struct pkcs11_object *create_token_object(struct obj_attrs *head, 43 TEE_UUID *uuid); 44 45 enum pkcs11_rc create_object(void *session, struct obj_attrs *attributes, 46 uint32_t *handle); 47 48 void destroy_object(struct pkcs11_session *session, 49 struct pkcs11_object *object, bool session_object_only); 50 51 /* 52 * Entry function called from the PKCS11 command parser 53 */ 54 enum pkcs11_rc entry_create_object(struct pkcs11_client *client, 55 uint32_t ptypes, TEE_Param *params); 56 57 enum pkcs11_rc entry_destroy_object(struct pkcs11_client *client, 58 uint32_t ptypes, TEE_Param *params); 59 #endif /*PKCS11_TA_OBJECT_H*/ 60