xref: /optee_os/ta/pkcs11/src/processing.h (revision 5f80f270b184180ead542642a54387abf8f246c3)
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_generate_key_pair(struct pkcs11_client *client,
25 				       uint32_t ptypes, TEE_Param *params);
26 
27 enum pkcs11_rc entry_processing_init(struct pkcs11_client *client,
28 				     uint32_t ptypes, TEE_Param *params,
29 				     enum processing_func function);
30 
31 enum pkcs11_rc entry_processing_step(struct pkcs11_client *client,
32 				     uint32_t ptypes, TEE_Param *params,
33 				     enum processing_func function,
34 				     enum processing_step step);
35 
36 enum pkcs11_rc entry_processing_key(struct pkcs11_client *client,
37 				    uint32_t ptypes, TEE_Param *params,
38 				    enum processing_func function);
39 
40 enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client,
41 					       uint32_t ptypes,
42 					       TEE_Param *params);
43 
44 enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client,
45 			      uint32_t ptypes, TEE_Param *params);
46 
47 /*
48  * Util
49  */
50 size_t get_object_key_bit_size(struct pkcs11_object *obj);
51 
52 void release_active_processing(struct pkcs11_session *session);
53 
54 enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj,
55 					    uint32_t attribute,
56 					    void **data, size_t *size);
57 
58 enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head,
59 				      uint32_t pkcs11_id,
60 				      TEE_ObjectHandle tee_obj,
61 				      uint32_t tee_id);
62 
63 /* Asymmetric key operations util */
64 bool processing_is_tee_asymm(uint32_t proc_id);
65 
66 enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session,
67 				    enum processing_func function,
68 				    struct pkcs11_attribute_head *proc_params,
69 				    struct pkcs11_object *obj);
70 
71 enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session,
72 				    enum processing_func function,
73 				    enum processing_step step,
74 				    uint32_t ptypes, TEE_Param *params);
75 
76 /*
77  * Symmetric crypto algorithm specific functions
78  */
79 bool processing_is_tee_symm(uint32_t proc_id);
80 
81 enum pkcs11_rc init_symm_operation(struct pkcs11_session *session,
82 				   enum processing_func function,
83 				   struct pkcs11_attribute_head *proc_params,
84 				   struct pkcs11_object *key);
85 
86 enum pkcs11_rc step_symm_operation(struct pkcs11_session *session,
87 				   enum processing_func function,
88 				   enum processing_step step,
89 				   uint32_t ptypes, TEE_Param *params);
90 
91 enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing,
92 				      void *proc_params, size_t params_size);
93 
94 enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session,
95 				      void **out_buf, uint32_t *out_sz);
96 
97 enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session,
98 				     void *data, uint32_t data_sz,
99 				     void *out_buf, uint32_t *out_sz);
100 
101 /* Digest specific functions */
102 bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id);
103 
104 enum pkcs11_rc
105 init_digest_operation(struct pkcs11_session *session,
106 		      struct pkcs11_attribute_head *proc_params);
107 
108 enum pkcs11_rc step_digest_operation(struct pkcs11_session *session,
109 				     enum processing_step step,
110 				     struct pkcs11_object *obj,
111 				     uint32_t ptypes, TEE_Param *params);
112 
113 /*
114  * Elliptic curve crypto algorithm specific functions
115  */
116 enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs,
117 				     size_t *tee_count,
118 				     struct pkcs11_object *obj);
119 
120 size_t ec_params2tee_keysize(void *attr, size_t size);
121 
122 uint32_t ec_params2tee_curve(void *attr, size_t size);
123 
124 enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id,
125 				   struct pkcs11_attribute_head *proc_params,
126 				   struct pkcs11_object *obj);
127 
128 enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params,
129 				struct obj_attrs **pub_head,
130 				struct obj_attrs **priv_head);
131 
132 size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op);
133 
134 #endif /*PKCS11_TA_PROCESSING_H*/
135