xref: /optee_os/ta/pkcs11/src/processing.h (revision d9af50bc47024ff71fcd6a980d2503bd8cd9545b)
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>
10*d9af50bcSVesa 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 
18*d9af50bcSVesa Jääskeläinen /**
19*d9af50bcSVesa Jääskeläinen  * RSA PSS processing context
20*d9af50bcSVesa Jääskeläinen  *
21*d9af50bcSVesa Jääskeläinen  * @hash_alg: Hash algorithm mechanism
22*d9af50bcSVesa Jääskeläinen  * @mgf_type: Mask generator function
23*d9af50bcSVesa Jääskeläinen  * @salt_len: Length of the salt in bytes
24*d9af50bcSVesa Jääskeläinen  */
25*d9af50bcSVesa Jääskeläinen struct rsa_pss_processing_ctx {
26*d9af50bcSVesa Jääskeläinen 	enum pkcs11_mechanism_id hash_alg;
27*d9af50bcSVesa Jääskeläinen 	enum pkcs11_mgf_id mgf_type;
28*d9af50bcSVesa Jääskeläinen 	uint32_t salt_len;
29*d9af50bcSVesa Jääskeläinen };
30*d9af50bcSVesa Jääskeläinen 
31512cbf1dSJens Wiklander /*
32512cbf1dSJens Wiklander  * Entry points from PKCS11 TA invocation commands
33512cbf1dSJens Wiklander  */
34512cbf1dSJens Wiklander 
35fa247a2aSRuchika Gupta enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client,
36fa247a2aSRuchika Gupta 				     uint32_t ptypes, TEE_Param *params);
37fa247a2aSRuchika Gupta 
38013934d8SVesa Jääskeläinen enum pkcs11_rc entry_generate_key_pair(struct pkcs11_client *client,
39013934d8SVesa Jääskeläinen 				       uint32_t ptypes, TEE_Param *params);
40013934d8SVesa Jääskeläinen 
41512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_init(struct pkcs11_client *client,
42512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
43512cbf1dSJens Wiklander 				     enum processing_func function);
44512cbf1dSJens Wiklander 
45512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_step(struct pkcs11_client *client,
46512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
47512cbf1dSJens Wiklander 				     enum processing_func function,
48512cbf1dSJens Wiklander 				     enum processing_step step);
49512cbf1dSJens Wiklander 
504dad6642SRuchika Gupta enum pkcs11_rc entry_processing_key(struct pkcs11_client *client,
514dad6642SRuchika Gupta 				    uint32_t ptypes, TEE_Param *params,
524dad6642SRuchika Gupta 				    enum processing_func function);
5348799892SRuchika Gupta 
54eb6141b6SVesa Jääskeläinen enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client,
55eb6141b6SVesa Jääskeläinen 					       uint32_t ptypes,
56eb6141b6SVesa Jääskeläinen 					       TEE_Param *params);
57eb6141b6SVesa Jääskeläinen 
585f80f270SRuchika Gupta enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client,
595f80f270SRuchika Gupta 			      uint32_t ptypes, TEE_Param *params);
605f80f270SRuchika Gupta 
61512cbf1dSJens Wiklander /*
62512cbf1dSJens Wiklander  * Util
63512cbf1dSJens Wiklander  */
64512cbf1dSJens Wiklander size_t get_object_key_bit_size(struct pkcs11_object *obj);
65512cbf1dSJens Wiklander 
66512cbf1dSJens Wiklander void release_active_processing(struct pkcs11_session *session);
67512cbf1dSJens Wiklander 
68013934d8SVesa Jääskeläinen enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj,
69013934d8SVesa Jääskeläinen 					    uint32_t attribute,
70013934d8SVesa Jääskeläinen 					    void **data, size_t *size);
71013934d8SVesa Jääskeläinen 
72013934d8SVesa Jääskeläinen enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head,
73013934d8SVesa Jääskeläinen 				      uint32_t pkcs11_id,
74013934d8SVesa Jääskeläinen 				      TEE_ObjectHandle tee_obj,
75013934d8SVesa Jääskeläinen 				      uint32_t tee_id);
76013934d8SVesa Jääskeläinen 
77fb279d8bSVesa Jääskeläinen /* Asymmetric key operations util */
78fb279d8bSVesa Jääskeläinen bool processing_is_tee_asymm(uint32_t proc_id);
79fb279d8bSVesa Jääskeläinen 
80fb279d8bSVesa Jääskeläinen enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session,
81fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
82fb279d8bSVesa Jääskeläinen 				    struct pkcs11_attribute_head *proc_params,
83fb279d8bSVesa Jääskeläinen 				    struct pkcs11_object *obj);
84fb279d8bSVesa Jääskeläinen 
85fb279d8bSVesa Jääskeläinen enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session,
86fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
87fb279d8bSVesa Jääskeläinen 				    enum processing_step step,
88fb279d8bSVesa Jääskeläinen 				    uint32_t ptypes, TEE_Param *params);
89fb279d8bSVesa Jääskeläinen 
90512cbf1dSJens Wiklander /*
91512cbf1dSJens Wiklander  * Symmetric crypto algorithm specific functions
92512cbf1dSJens Wiklander  */
93512cbf1dSJens Wiklander bool processing_is_tee_symm(uint32_t proc_id);
94512cbf1dSJens Wiklander 
95512cbf1dSJens Wiklander enum pkcs11_rc init_symm_operation(struct pkcs11_session *session,
96512cbf1dSJens Wiklander 				   enum processing_func function,
97512cbf1dSJens Wiklander 				   struct pkcs11_attribute_head *proc_params,
98512cbf1dSJens Wiklander 				   struct pkcs11_object *key);
99512cbf1dSJens Wiklander 
100512cbf1dSJens Wiklander enum pkcs11_rc step_symm_operation(struct pkcs11_session *session,
101512cbf1dSJens Wiklander 				   enum processing_func function,
102512cbf1dSJens Wiklander 				   enum processing_step step,
103512cbf1dSJens Wiklander 				   uint32_t ptypes, TEE_Param *params);
104512cbf1dSJens Wiklander 
105512cbf1dSJens Wiklander enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing,
106512cbf1dSJens Wiklander 				      void *proc_params, size_t params_size);
10748799892SRuchika Gupta 
10848799892SRuchika Gupta enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session,
1098c499324SRuchika Gupta 				      void **out_buf, uint32_t *out_sz);
11048799892SRuchika Gupta 
1115f80f270SRuchika Gupta enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session,
1125f80f270SRuchika Gupta 				     void *data, uint32_t data_sz,
1135f80f270SRuchika Gupta 				     void *out_buf, uint32_t *out_sz);
1145f80f270SRuchika Gupta 
1153668310bSRuchika Gupta enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data,
1163668310bSRuchika Gupta 				  uint32_t data_sz, void **out_buf,
1173668310bSRuchika Gupta 				  uint32_t *out_sz);
1183668310bSRuchika Gupta 
1199e91a619SVesa Jääskeläinen /* Digest specific functions */
1209e91a619SVesa Jääskeläinen bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id);
1219e91a619SVesa Jääskeläinen 
1229e91a619SVesa Jääskeläinen enum pkcs11_rc
1239e91a619SVesa Jääskeläinen init_digest_operation(struct pkcs11_session *session,
1249e91a619SVesa Jääskeläinen 		      struct pkcs11_attribute_head *proc_params);
1259e91a619SVesa Jääskeläinen 
1269e91a619SVesa Jääskeläinen enum pkcs11_rc step_digest_operation(struct pkcs11_session *session,
1279e91a619SVesa Jääskeläinen 				     enum processing_step step,
1289e91a619SVesa Jääskeläinen 				     struct pkcs11_object *obj,
1299e91a619SVesa Jääskeläinen 				     uint32_t ptypes, TEE_Param *params);
1309e91a619SVesa Jääskeläinen 
13102b16804SVesa Jääskeläinen /*
13202b16804SVesa Jääskeläinen  * Elliptic curve crypto algorithm specific functions
13302b16804SVesa Jääskeläinen  */
134fb279d8bSVesa Jääskeläinen enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs,
135fb279d8bSVesa Jääskeläinen 				     size_t *tee_count,
136fb279d8bSVesa Jääskeläinen 				     struct pkcs11_object *obj);
137fb279d8bSVesa Jääskeläinen 
13802b16804SVesa Jääskeläinen size_t ec_params2tee_keysize(void *attr, size_t size);
13902b16804SVesa Jääskeläinen 
14002b16804SVesa Jääskeläinen uint32_t ec_params2tee_curve(void *attr, size_t size);
14102b16804SVesa Jääskeläinen 
142fb279d8bSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id,
143fb279d8bSVesa Jääskeläinen 				   struct pkcs11_attribute_head *proc_params,
144fb279d8bSVesa Jääskeläinen 				   struct pkcs11_object *obj);
145fb279d8bSVesa Jääskeläinen 
14602b16804SVesa Jääskeläinen enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params,
14702b16804SVesa Jääskeläinen 				struct obj_attrs **pub_head,
14802b16804SVesa Jääskeläinen 				struct obj_attrs **priv_head);
14902b16804SVesa Jääskeläinen 
150fb279d8bSVesa Jääskeläinen size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op);
151fb279d8bSVesa Jääskeläinen 
15286922832SVesa Jääskeläinen /*
15386922832SVesa Jääskeläinen  * RSA crypto algorithm specific functions
15486922832SVesa Jääskeläinen  */
1550442c956SVesa Jääskeläinen enum pkcs11_rc load_tee_rsa_key_attrs(TEE_Attribute **tee_attrs,
1560442c956SVesa Jääskeläinen 				      size_t *tee_count,
1570442c956SVesa Jääskeläinen 				      struct pkcs11_object *obj);
1580442c956SVesa Jääskeläinen 
159*d9af50bcSVesa Jääskeläinen enum pkcs11_rc
160*d9af50bcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_pss(struct active_processing *proc,
161*d9af50bcSVesa Jääskeläinen 			     struct pkcs11_attribute_head *proc_params);
162*d9af50bcSVesa Jääskeläinen 
163*d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_validate_rsa_pss(struct active_processing *proc,
164*d9af50bcSVesa Jääskeläinen 					 struct pkcs11_object *obj);
165*d9af50bcSVesa Jääskeläinen 
166*d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_pss(uint32_t *tee_id,
167*d9af50bcSVesa Jääskeläinen 				     struct pkcs11_attribute_head *params);
168*d9af50bcSVesa Jääskeläinen 
16986922832SVesa Jääskeläinen enum pkcs11_rc generate_rsa_keys(struct pkcs11_attribute_head *proc_params,
17086922832SVesa Jääskeläinen 				 struct obj_attrs **pub_head,
17186922832SVesa Jääskeläinen 				 struct obj_attrs **priv_head);
17286922832SVesa Jääskeläinen 
1730442c956SVesa Jääskeläinen size_t rsa_get_input_max_byte_size(TEE_OperationHandle op);
1740442c956SVesa Jääskeläinen 
175512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/
176