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