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