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