xref: /optee_os/ta/pkcs11/src/object.h (revision bc555ee0d19e9a789d4f63a42bd34ef89b352bab)
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 
137f12c782SRobin 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)
23*bc555ee0SVesa Jääskeläinen  * token: associated token for the object
24b56b3d07SJens Wiklander  * uuid: object UUID in the persistent database if a persistent object, or NULL
25b56b3d07SJens Wiklander  * attribs_hdl: GPD TEE attributes handles if persistent object
26b56b3d07SJens Wiklander  */
27b56b3d07SJens Wiklander struct pkcs11_object {
28b56b3d07SJens Wiklander 	LIST_ENTRY(pkcs11_object) link;
29b56b3d07SJens Wiklander 	struct obj_attrs *attributes;
30b56b3d07SJens Wiklander 	TEE_ObjectHandle key_handle;
31b56b3d07SJens Wiklander 	uint32_t key_type;
32*bc555ee0SVesa Jääskeläinen 	struct ck_token *token;
33b56b3d07SJens Wiklander 	TEE_UUID *uuid;
34b56b3d07SJens Wiklander 	TEE_ObjectHandle attribs_hdl;
35b56b3d07SJens Wiklander };
36b56b3d07SJens Wiklander 
37b56b3d07SJens Wiklander LIST_HEAD(object_list, pkcs11_object);
38b56b3d07SJens Wiklander 
39b56b3d07SJens Wiklander struct pkcs11_object *pkcs11_handle2object(uint32_t client_handle,
40b56b3d07SJens Wiklander 					   struct pkcs11_session *session);
41b56b3d07SJens Wiklander 
42b56b3d07SJens Wiklander uint32_t pkcs11_object2handle(struct pkcs11_object *obj,
43b56b3d07SJens Wiklander 			      struct pkcs11_session *session);
44b56b3d07SJens Wiklander 
45b56b3d07SJens Wiklander struct pkcs11_object *create_token_object(struct obj_attrs *head,
46*bc555ee0SVesa Jääskeläinen 					  TEE_UUID *uuid,
47*bc555ee0SVesa Jääskeläinen 					  struct ck_token *token);
48b56b3d07SJens Wiklander 
49b56b3d07SJens Wiklander enum pkcs11_rc create_object(void *session, struct obj_attrs *attributes,
50b56b3d07SJens Wiklander 			     uint32_t *handle);
51b56b3d07SJens Wiklander 
527f12c782SRobin van der Gracht void cleanup_persistent_object(struct pkcs11_object *obj,
537f12c782SRobin van der Gracht 			       struct ck_token *token);
547f12c782SRobin van der Gracht 
55b56b3d07SJens Wiklander void destroy_object(struct pkcs11_session *session,
56b56b3d07SJens Wiklander 		    struct pkcs11_object *object, bool session_object_only);
57b56b3d07SJens Wiklander 
58b56b3d07SJens Wiklander /*
59b56b3d07SJens Wiklander  * Entry function called from the PKCS11 command parser
60b56b3d07SJens Wiklander  */
61b56b3d07SJens Wiklander enum pkcs11_rc entry_create_object(struct pkcs11_client *client,
62b56b3d07SJens Wiklander 				   uint32_t ptypes, TEE_Param *params);
63b56b3d07SJens Wiklander 
64b56b3d07SJens Wiklander enum pkcs11_rc entry_destroy_object(struct pkcs11_client *client,
65b56b3d07SJens Wiklander 				    uint32_t ptypes, TEE_Param *params);
66dc99b202SRuchika Gupta 
67dc99b202SRuchika Gupta enum pkcs11_rc entry_find_objects_init(struct pkcs11_client *client,
68dc99b202SRuchika Gupta 				       uint32_t ptypes, TEE_Param *params);
69dc99b202SRuchika Gupta 
70dc99b202SRuchika Gupta enum pkcs11_rc entry_find_objects(struct pkcs11_client *client,
71dc99b202SRuchika Gupta 				  uint32_t ptypes, TEE_Param *params);
72dc99b202SRuchika Gupta 
73dc99b202SRuchika Gupta enum pkcs11_rc entry_find_objects_final(struct pkcs11_client *client,
74dc99b202SRuchika Gupta 					uint32_t ptypes, TEE_Param *params);
75dc99b202SRuchika Gupta 
76783c1515SRuchika Gupta enum pkcs11_rc entry_get_attribute_value(struct pkcs11_client *client,
77783c1515SRuchika Gupta 					 uint32_t ptypes, TEE_Param *params);
78783c1515SRuchika Gupta 
79783c1515SRuchika Gupta enum pkcs11_rc entry_get_object_size(struct pkcs11_client *client,
80783c1515SRuchika Gupta 				     uint32_t ptypes, TEE_Param *params);
81783c1515SRuchika Gupta 
822d25a9bcSRuchika Gupta enum pkcs11_rc entry_set_attribute_value(struct pkcs11_client *client,
832d25a9bcSRuchika Gupta 					 uint32_t ptypes, TEE_Param *params);
842d25a9bcSRuchika Gupta 
85bc09507cSRuchika Gupta enum pkcs11_rc entry_copy_object(struct pkcs11_client *client, uint32_t ptypes,
86bc09507cSRuchika Gupta 				 TEE_Param *params);
87bc09507cSRuchika Gupta 
88dc99b202SRuchika Gupta void release_session_find_obj_context(struct pkcs11_session *session);
89dc99b202SRuchika Gupta 
90b56b3d07SJens Wiklander #endif /*PKCS11_TA_OBJECT_H*/
91