xref: /optee_os/ta/pkcs11/src/processing.h (revision 77bdbf67c42209142ef43129e01113d29d9c62f6)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2017-2020, Linaro Limited
4  */
5 
6 #ifndef PKCS11_TA_PROCESSING_H
7 #define PKCS11_TA_PROCESSING_H
8 
9 #include <pkcs11_attributes.h>
10 #include <tee_internal_api.h>
11 
12 struct pkcs11_client;
13 struct pkcs11_session;
14 struct pkcs11_object;
15 struct active_processing;
16 
17 /*
18  * Entry points from PKCS11 TA invocation commands
19  */
20 
21 enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client,
22 				     uint32_t ptypes, TEE_Param *params);
23 
24 enum pkcs11_rc entry_processing_init(struct pkcs11_client *client,
25 				     uint32_t ptypes, TEE_Param *params,
26 				     enum processing_func function);
27 
28 enum pkcs11_rc entry_processing_step(struct pkcs11_client *client,
29 				     uint32_t ptypes, TEE_Param *params,
30 				     enum processing_func function,
31 				     enum processing_step step);
32 
33 enum pkcs11_rc entry_processing_key(struct pkcs11_client *client,
34 				    uint32_t ptypes, TEE_Param *params,
35 				    enum processing_func function);
36 
37 enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client,
38 					       uint32_t ptypes,
39 					       TEE_Param *params);
40 
41 /*
42  * Util
43  */
44 size_t get_object_key_bit_size(struct pkcs11_object *obj);
45 
46 void release_active_processing(struct pkcs11_session *session);
47 
48 /*
49  * Symmetric crypto algorithm specific functions
50  */
51 bool processing_is_tee_symm(uint32_t proc_id);
52 
53 enum pkcs11_rc init_symm_operation(struct pkcs11_session *session,
54 				   enum processing_func function,
55 				   struct pkcs11_attribute_head *proc_params,
56 				   struct pkcs11_object *key);
57 
58 enum pkcs11_rc step_symm_operation(struct pkcs11_session *session,
59 				   enum processing_func function,
60 				   enum processing_step step,
61 				   uint32_t ptypes, TEE_Param *params);
62 
63 enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing,
64 				      void *proc_params, size_t params_size);
65 
66 enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session,
67 				      void **out_buf, uint32_t *out_sz);
68 
69 /* Digest specific functions */
70 bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id);
71 
72 enum pkcs11_rc
73 init_digest_operation(struct pkcs11_session *session,
74 		      struct pkcs11_attribute_head *proc_params);
75 
76 enum pkcs11_rc step_digest_operation(struct pkcs11_session *session,
77 				     enum processing_step step,
78 				     struct pkcs11_object *obj,
79 				     uint32_t ptypes, TEE_Param *params);
80 
81 #endif /*PKCS11_TA_PROCESSING_H*/
82