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