xref: /optee_os/ta/pkcs11/src/object.h (revision b56b3d071d79537f0b9c86d26c033d9ed5c0206a)
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