xref: /optee_os/ta/pkcs11/src/processing.h (revision 03e07432b68f9d78dbad4b9a8af50705948e7893)
1512cbf1dSJens Wiklander /* SPDX-License-Identifier: BSD-2-Clause */
2512cbf1dSJens Wiklander /*
3512cbf1dSJens Wiklander  * Copyright (c) 2017-2020, Linaro Limited
4512cbf1dSJens Wiklander  */
5512cbf1dSJens Wiklander 
6512cbf1dSJens Wiklander #ifndef PKCS11_TA_PROCESSING_H
7512cbf1dSJens Wiklander #define PKCS11_TA_PROCESSING_H
8512cbf1dSJens Wiklander 
9512cbf1dSJens Wiklander #include <pkcs11_attributes.h>
10d9af50bcSVesa Jääskeläinen #include <pkcs11_ta.h>
11512cbf1dSJens Wiklander #include <tee_internal_api.h>
12512cbf1dSJens Wiklander 
13512cbf1dSJens Wiklander struct pkcs11_client;
14512cbf1dSJens Wiklander struct pkcs11_session;
15512cbf1dSJens Wiklander struct pkcs11_object;
16512cbf1dSJens Wiklander struct active_processing;
17512cbf1dSJens Wiklander 
18d9af50bcSVesa Jääskeläinen /**
19d9af50bcSVesa Jääskeläinen  * RSA PSS processing context
20d9af50bcSVesa Jääskeläinen  *
21d9af50bcSVesa Jääskeläinen  * @hash_alg: Hash algorithm mechanism
22d9af50bcSVesa Jääskeläinen  * @mgf_type: Mask generator function
23d9af50bcSVesa Jääskeläinen  * @salt_len: Length of the salt in bytes
24d9af50bcSVesa Jääskeläinen  */
25d9af50bcSVesa Jääskeläinen struct rsa_pss_processing_ctx {
26d9af50bcSVesa Jääskeläinen 	enum pkcs11_mechanism_id hash_alg;
27d9af50bcSVesa Jääskeläinen 	enum pkcs11_mgf_id mgf_type;
28d9af50bcSVesa Jääskeläinen 	uint32_t salt_len;
29d9af50bcSVesa Jääskeläinen };
30d9af50bcSVesa Jääskeläinen 
31dc8c77fcSVesa Jääskeläinen /**
32dc8c77fcSVesa Jääskeläinen  * RSA OAEP processing context
33dc8c77fcSVesa Jääskeläinen  *
34dc8c77fcSVesa Jääskeläinen  * @hash_alg: Hash algorithm mechanism
35dc8c77fcSVesa Jääskeläinen  * @mgf_type: Mask generator function
36dc8c77fcSVesa Jääskeläinen  * @source_type: Type of source.
37dc8c77fcSVesa Jääskeläinen  * @source_data_len: Length of the source data.
38dc8c77fcSVesa Jääskeläinen  * @source_data: Source data.
39dc8c77fcSVesa Jääskeläinen  */
40dc8c77fcSVesa Jääskeläinen struct rsa_oaep_processing_ctx {
41dc8c77fcSVesa Jääskeläinen 	enum pkcs11_mechanism_id hash_alg;
42dc8c77fcSVesa Jääskeläinen 	enum pkcs11_mgf_id mgf_type;
43dc8c77fcSVesa Jääskeläinen 	uint32_t source_type;
44dc8c77fcSVesa Jääskeläinen 	uint32_t source_data_len;
45dc8c77fcSVesa Jääskeläinen 	uint8_t source_data[];
46dc8c77fcSVesa Jääskeläinen };
47dc8c77fcSVesa Jääskeläinen 
48*03e07432SValerii Chubar /**
49*03e07432SValerii Chubar  * EDDSA processing context
50*03e07432SValerii Chubar  *
51*03e07432SValerii Chubar  * @flag: Prehash flag
52*03e07432SValerii Chubar  * @ctx_len: Length of the context data
53*03e07432SValerii Chubar  * @ctx: Context data
54*03e07432SValerii Chubar  */
55*03e07432SValerii Chubar struct eddsa_processing_ctx {
56*03e07432SValerii Chubar 	uint32_t flag;
57*03e07432SValerii Chubar 	uint32_t ctx_len;
58*03e07432SValerii Chubar 	uint8_t ctx[];
59*03e07432SValerii Chubar };
60*03e07432SValerii Chubar 
61512cbf1dSJens Wiklander /*
62512cbf1dSJens Wiklander  * Entry points from PKCS11 TA invocation commands
63512cbf1dSJens Wiklander  */
64512cbf1dSJens Wiklander 
65fa247a2aSRuchika Gupta enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client,
66fa247a2aSRuchika Gupta 				     uint32_t ptypes, TEE_Param *params);
67fa247a2aSRuchika Gupta 
68013934d8SVesa Jääskeläinen enum pkcs11_rc entry_generate_key_pair(struct pkcs11_client *client,
69013934d8SVesa Jääskeläinen 				       uint32_t ptypes, TEE_Param *params);
70013934d8SVesa Jääskeläinen 
71512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_init(struct pkcs11_client *client,
72512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
73512cbf1dSJens Wiklander 				     enum processing_func function);
74512cbf1dSJens Wiklander 
75512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_step(struct pkcs11_client *client,
76512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
77512cbf1dSJens Wiklander 				     enum processing_func function,
78512cbf1dSJens Wiklander 				     enum processing_step step);
79512cbf1dSJens Wiklander 
804dad6642SRuchika Gupta enum pkcs11_rc entry_processing_key(struct pkcs11_client *client,
814dad6642SRuchika Gupta 				    uint32_t ptypes, TEE_Param *params,
824dad6642SRuchika Gupta 				    enum processing_func function);
8348799892SRuchika Gupta 
84eb6141b6SVesa Jääskeläinen enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client,
85eb6141b6SVesa Jääskeläinen 					       uint32_t ptypes,
86eb6141b6SVesa Jääskeläinen 					       TEE_Param *params);
87eb6141b6SVesa Jääskeläinen 
885f80f270SRuchika Gupta enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client,
895f80f270SRuchika Gupta 			      uint32_t ptypes, TEE_Param *params);
905f80f270SRuchika Gupta 
91512cbf1dSJens Wiklander /*
92512cbf1dSJens Wiklander  * Util
93512cbf1dSJens Wiklander  */
94512cbf1dSJens Wiklander size_t get_object_key_bit_size(struct pkcs11_object *obj);
95512cbf1dSJens Wiklander 
96512cbf1dSJens Wiklander void release_active_processing(struct pkcs11_session *session);
97512cbf1dSJens Wiklander 
98013934d8SVesa Jääskeläinen enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj,
99013934d8SVesa Jääskeläinen 					    uint32_t attribute,
100013934d8SVesa Jääskeläinen 					    void **data, size_t *size);
101013934d8SVesa Jääskeläinen 
102013934d8SVesa Jääskeläinen enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head,
103013934d8SVesa Jääskeläinen 				      uint32_t pkcs11_id,
104013934d8SVesa Jääskeläinen 				      TEE_ObjectHandle tee_obj,
105013934d8SVesa Jääskeläinen 				      uint32_t tee_id);
106013934d8SVesa Jääskeläinen 
107fb279d8bSVesa Jääskeläinen /* Asymmetric key operations util */
108fb279d8bSVesa Jääskeläinen bool processing_is_tee_asymm(uint32_t proc_id);
109fb279d8bSVesa Jääskeläinen 
110fb279d8bSVesa Jääskeläinen enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session,
111fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
112fb279d8bSVesa Jääskeläinen 				    struct pkcs11_attribute_head *proc_params,
113fb279d8bSVesa Jääskeläinen 				    struct pkcs11_object *obj);
114fb279d8bSVesa Jääskeläinen 
115fb279d8bSVesa Jääskeläinen enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session,
116fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
117fb279d8bSVesa Jääskeläinen 				    enum processing_step step,
118fb279d8bSVesa Jääskeläinen 				    uint32_t ptypes, TEE_Param *params);
119fb279d8bSVesa Jääskeläinen 
120512cbf1dSJens Wiklander /*
121512cbf1dSJens Wiklander  * Symmetric crypto algorithm specific functions
122512cbf1dSJens Wiklander  */
123512cbf1dSJens Wiklander bool processing_is_tee_symm(uint32_t proc_id);
124512cbf1dSJens Wiklander 
125512cbf1dSJens Wiklander enum pkcs11_rc init_symm_operation(struct pkcs11_session *session,
126512cbf1dSJens Wiklander 				   enum processing_func function,
127512cbf1dSJens Wiklander 				   struct pkcs11_attribute_head *proc_params,
128512cbf1dSJens Wiklander 				   struct pkcs11_object *key);
129512cbf1dSJens Wiklander 
130512cbf1dSJens Wiklander enum pkcs11_rc step_symm_operation(struct pkcs11_session *session,
131512cbf1dSJens Wiklander 				   enum processing_func function,
132512cbf1dSJens Wiklander 				   enum processing_step step,
133512cbf1dSJens Wiklander 				   uint32_t ptypes, TEE_Param *params);
134512cbf1dSJens Wiklander 
135512cbf1dSJens Wiklander enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing,
136512cbf1dSJens Wiklander 				      void *proc_params, size_t params_size);
13748799892SRuchika Gupta 
13848799892SRuchika Gupta enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session,
1398c499324SRuchika Gupta 				      void **out_buf, uint32_t *out_sz);
14048799892SRuchika Gupta 
1415f80f270SRuchika Gupta enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session,
1425f80f270SRuchika Gupta 				     void *data, uint32_t data_sz,
1435f80f270SRuchika Gupta 				     void *out_buf, uint32_t *out_sz);
1445f80f270SRuchika Gupta 
1453668310bSRuchika Gupta enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data,
1463668310bSRuchika Gupta 				  uint32_t data_sz, void **out_buf,
1473668310bSRuchika Gupta 				  uint32_t *out_sz);
1483668310bSRuchika Gupta 
1499e91a619SVesa Jääskeläinen /* Digest specific functions */
1509e91a619SVesa Jääskeläinen bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id);
1519e91a619SVesa Jääskeläinen 
1529e91a619SVesa Jääskeläinen enum pkcs11_rc
1539e91a619SVesa Jääskeläinen init_digest_operation(struct pkcs11_session *session,
1549e91a619SVesa Jääskeläinen 		      struct pkcs11_attribute_head *proc_params);
1559e91a619SVesa Jääskeläinen 
1569e91a619SVesa Jääskeläinen enum pkcs11_rc step_digest_operation(struct pkcs11_session *session,
1579e91a619SVesa Jääskeläinen 				     enum processing_step step,
1589e91a619SVesa Jääskeläinen 				     struct pkcs11_object *obj,
1599e91a619SVesa Jääskeläinen 				     uint32_t ptypes, TEE_Param *params);
1609e91a619SVesa Jääskeläinen 
16102b16804SVesa Jääskeläinen /*
16202b16804SVesa Jääskeläinen  * Elliptic curve crypto algorithm specific functions
16302b16804SVesa Jääskeläinen  */
164fb279d8bSVesa Jääskeläinen enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs,
165fb279d8bSVesa Jääskeläinen 				     size_t *tee_count,
166fb279d8bSVesa Jääskeläinen 				     struct pkcs11_object *obj);
167fb279d8bSVesa Jääskeläinen 
168*03e07432SValerii Chubar enum pkcs11_rc load_tee_eddsa_key_attrs(TEE_Attribute **tee_attrs,
169*03e07432SValerii Chubar 					size_t *tee_count,
170*03e07432SValerii Chubar 					struct pkcs11_object *obj);
171*03e07432SValerii Chubar 
17202b16804SVesa Jääskeläinen size_t ec_params2tee_keysize(void *attr, size_t size);
17302b16804SVesa Jääskeläinen 
17402b16804SVesa Jääskeläinen uint32_t ec_params2tee_curve(void *attr, size_t size);
17502b16804SVesa Jääskeläinen 
176fb279d8bSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id,
177fb279d8bSVesa Jääskeläinen 				   struct pkcs11_attribute_head *proc_params,
178fb279d8bSVesa Jääskeläinen 				   struct pkcs11_object *obj);
179fb279d8bSVesa Jääskeläinen 
18002b16804SVesa Jääskeläinen enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params,
18102b16804SVesa Jääskeläinen 				struct obj_attrs **pub_head,
18202b16804SVesa Jääskeläinen 				struct obj_attrs **priv_head);
18302b16804SVesa Jääskeläinen 
184*03e07432SValerii Chubar enum pkcs11_rc generate_eddsa_keys(struct pkcs11_attribute_head *proc_params,
185*03e07432SValerii Chubar 				   struct obj_attrs **pub_head,
186*03e07432SValerii Chubar 				   struct obj_attrs **priv_head);
187*03e07432SValerii Chubar 
188fb279d8bSVesa Jääskeläinen size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op);
189fb279d8bSVesa Jääskeläinen 
19086922832SVesa Jääskeläinen /*
19186922832SVesa Jääskeläinen  * RSA crypto algorithm specific functions
19286922832SVesa Jääskeläinen  */
1930442c956SVesa Jääskeläinen enum pkcs11_rc load_tee_rsa_key_attrs(TEE_Attribute **tee_attrs,
1940442c956SVesa Jääskeläinen 				      size_t *tee_count,
1950442c956SVesa Jääskeläinen 				      struct pkcs11_object *obj);
1960442c956SVesa Jääskeläinen 
197d9af50bcSVesa Jääskeläinen enum pkcs11_rc
198d9af50bcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_pss(struct active_processing *proc,
199d9af50bcSVesa Jääskeläinen 			     struct pkcs11_attribute_head *proc_params);
200d9af50bcSVesa Jääskeläinen 
201d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_validate_rsa_pss(struct active_processing *proc,
202d9af50bcSVesa Jääskeläinen 					 struct pkcs11_object *obj);
203d9af50bcSVesa Jääskeläinen 
204d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_pss(uint32_t *tee_id,
205d9af50bcSVesa Jääskeläinen 				     struct pkcs11_attribute_head *params);
206d9af50bcSVesa Jääskeläinen 
207dc8c77fcSVesa Jääskeläinen enum pkcs11_rc
208dc8c77fcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_oaep(struct active_processing *proc,
209dc8c77fcSVesa Jääskeläinen 			      struct pkcs11_attribute_head *proc_params);
210dc8c77fcSVesa Jääskeläinen 
211*03e07432SValerii Chubar enum pkcs11_rc
212*03e07432SValerii Chubar pkcs2tee_proc_params_eddsa(struct active_processing *proc,
213*03e07432SValerii Chubar 			   struct pkcs11_attribute_head *proc_params);
214*03e07432SValerii Chubar 
215dc8c77fcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_oaep(uint32_t *tee_id, uint32_t *tee_hash_id,
216dc8c77fcSVesa Jääskeläinen 				      struct pkcs11_attribute_head *params);
217dc8c77fcSVesa Jääskeläinen 
21886922832SVesa Jääskeläinen enum pkcs11_rc generate_rsa_keys(struct pkcs11_attribute_head *proc_params,
21986922832SVesa Jääskeläinen 				 struct obj_attrs **pub_head,
22086922832SVesa Jääskeläinen 				 struct obj_attrs **priv_head);
22186922832SVesa Jääskeläinen 
2220442c956SVesa Jääskeläinen size_t rsa_get_input_max_byte_size(TEE_OperationHandle op);
2230442c956SVesa Jääskeläinen 
224cc062b46SJorge Ramirez-Ortiz enum pkcs11_rc do_asymm_derivation(struct pkcs11_session *session,
225cc062b46SJorge Ramirez-Ortiz 				   struct pkcs11_attribute_head *proc_params,
226cc062b46SJorge Ramirez-Ortiz 				   struct obj_attrs **head);
227cc062b46SJorge Ramirez-Ortiz 
228cc062b46SJorge Ramirez-Ortiz enum pkcs11_rc pkcs2tee_param_ecdh(struct pkcs11_attribute_head *proc_params,
229cc062b46SJorge Ramirez-Ortiz 				   void **pub_data, size_t *pub_size);
230cc062b46SJorge Ramirez-Ortiz 
231cc062b46SJorge Ramirez-Ortiz enum pkcs11_rc pkcs2tee_algo_ecdh(uint32_t *tee_id,
232cc062b46SJorge Ramirez-Ortiz 				  struct pkcs11_attribute_head *proc_params,
233cc062b46SJorge Ramirez-Ortiz 				  struct pkcs11_object *obj);
234cc062b46SJorge Ramirez-Ortiz 
235512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/
236