xref: /optee_os/ta/pkcs11/src/processing.h (revision dc8c77fcab32549c070544dd4944d4c3f874def3)
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 
31*dc8c77fcSVesa Jääskeläinen /**
32*dc8c77fcSVesa Jääskeläinen  * RSA OAEP processing context
33*dc8c77fcSVesa Jääskeläinen  *
34*dc8c77fcSVesa Jääskeläinen  * @hash_alg: Hash algorithm mechanism
35*dc8c77fcSVesa Jääskeläinen  * @mgf_type: Mask generator function
36*dc8c77fcSVesa Jääskeläinen  * @source_type: Type of source.
37*dc8c77fcSVesa Jääskeläinen  * @source_data_len: Length of the source data.
38*dc8c77fcSVesa Jääskeläinen  * @source_data: Source data.
39*dc8c77fcSVesa Jääskeläinen  */
40*dc8c77fcSVesa Jääskeläinen struct rsa_oaep_processing_ctx {
41*dc8c77fcSVesa Jääskeläinen 	enum pkcs11_mechanism_id hash_alg;
42*dc8c77fcSVesa Jääskeläinen 	enum pkcs11_mgf_id mgf_type;
43*dc8c77fcSVesa Jääskeläinen 	uint32_t source_type;
44*dc8c77fcSVesa Jääskeläinen 	uint32_t source_data_len;
45*dc8c77fcSVesa Jääskeläinen 	uint8_t source_data[];
46*dc8c77fcSVesa Jääskeläinen };
47*dc8c77fcSVesa Jääskeläinen 
48512cbf1dSJens Wiklander /*
49512cbf1dSJens Wiklander  * Entry points from PKCS11 TA invocation commands
50512cbf1dSJens Wiklander  */
51512cbf1dSJens Wiklander 
52fa247a2aSRuchika Gupta enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client,
53fa247a2aSRuchika Gupta 				     uint32_t ptypes, TEE_Param *params);
54fa247a2aSRuchika Gupta 
55013934d8SVesa Jääskeläinen enum pkcs11_rc entry_generate_key_pair(struct pkcs11_client *client,
56013934d8SVesa Jääskeläinen 				       uint32_t ptypes, TEE_Param *params);
57013934d8SVesa Jääskeläinen 
58512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_init(struct pkcs11_client *client,
59512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
60512cbf1dSJens Wiklander 				     enum processing_func function);
61512cbf1dSJens Wiklander 
62512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_step(struct pkcs11_client *client,
63512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
64512cbf1dSJens Wiklander 				     enum processing_func function,
65512cbf1dSJens Wiklander 				     enum processing_step step);
66512cbf1dSJens Wiklander 
674dad6642SRuchika Gupta enum pkcs11_rc entry_processing_key(struct pkcs11_client *client,
684dad6642SRuchika Gupta 				    uint32_t ptypes, TEE_Param *params,
694dad6642SRuchika Gupta 				    enum processing_func function);
7048799892SRuchika Gupta 
71eb6141b6SVesa Jääskeläinen enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client,
72eb6141b6SVesa Jääskeläinen 					       uint32_t ptypes,
73eb6141b6SVesa Jääskeläinen 					       TEE_Param *params);
74eb6141b6SVesa Jääskeläinen 
755f80f270SRuchika Gupta enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client,
765f80f270SRuchika Gupta 			      uint32_t ptypes, TEE_Param *params);
775f80f270SRuchika Gupta 
78512cbf1dSJens Wiklander /*
79512cbf1dSJens Wiklander  * Util
80512cbf1dSJens Wiklander  */
81512cbf1dSJens Wiklander size_t get_object_key_bit_size(struct pkcs11_object *obj);
82512cbf1dSJens Wiklander 
83512cbf1dSJens Wiklander void release_active_processing(struct pkcs11_session *session);
84512cbf1dSJens Wiklander 
85013934d8SVesa Jääskeläinen enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj,
86013934d8SVesa Jääskeläinen 					    uint32_t attribute,
87013934d8SVesa Jääskeläinen 					    void **data, size_t *size);
88013934d8SVesa Jääskeläinen 
89013934d8SVesa Jääskeläinen enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head,
90013934d8SVesa Jääskeläinen 				      uint32_t pkcs11_id,
91013934d8SVesa Jääskeläinen 				      TEE_ObjectHandle tee_obj,
92013934d8SVesa Jääskeläinen 				      uint32_t tee_id);
93013934d8SVesa Jääskeläinen 
94fb279d8bSVesa Jääskeläinen /* Asymmetric key operations util */
95fb279d8bSVesa Jääskeläinen bool processing_is_tee_asymm(uint32_t proc_id);
96fb279d8bSVesa Jääskeläinen 
97fb279d8bSVesa Jääskeläinen enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session,
98fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
99fb279d8bSVesa Jääskeläinen 				    struct pkcs11_attribute_head *proc_params,
100fb279d8bSVesa Jääskeläinen 				    struct pkcs11_object *obj);
101fb279d8bSVesa Jääskeläinen 
102fb279d8bSVesa Jääskeläinen enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session,
103fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
104fb279d8bSVesa Jääskeläinen 				    enum processing_step step,
105fb279d8bSVesa Jääskeläinen 				    uint32_t ptypes, TEE_Param *params);
106fb279d8bSVesa Jääskeläinen 
107512cbf1dSJens Wiklander /*
108512cbf1dSJens Wiklander  * Symmetric crypto algorithm specific functions
109512cbf1dSJens Wiklander  */
110512cbf1dSJens Wiklander bool processing_is_tee_symm(uint32_t proc_id);
111512cbf1dSJens Wiklander 
112512cbf1dSJens Wiklander enum pkcs11_rc init_symm_operation(struct pkcs11_session *session,
113512cbf1dSJens Wiklander 				   enum processing_func function,
114512cbf1dSJens Wiklander 				   struct pkcs11_attribute_head *proc_params,
115512cbf1dSJens Wiklander 				   struct pkcs11_object *key);
116512cbf1dSJens Wiklander 
117512cbf1dSJens Wiklander enum pkcs11_rc step_symm_operation(struct pkcs11_session *session,
118512cbf1dSJens Wiklander 				   enum processing_func function,
119512cbf1dSJens Wiklander 				   enum processing_step step,
120512cbf1dSJens Wiklander 				   uint32_t ptypes, TEE_Param *params);
121512cbf1dSJens Wiklander 
122512cbf1dSJens Wiklander enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing,
123512cbf1dSJens Wiklander 				      void *proc_params, size_t params_size);
12448799892SRuchika Gupta 
12548799892SRuchika Gupta enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session,
1268c499324SRuchika Gupta 				      void **out_buf, uint32_t *out_sz);
12748799892SRuchika Gupta 
1285f80f270SRuchika Gupta enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session,
1295f80f270SRuchika Gupta 				     void *data, uint32_t data_sz,
1305f80f270SRuchika Gupta 				     void *out_buf, uint32_t *out_sz);
1315f80f270SRuchika Gupta 
1323668310bSRuchika Gupta enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data,
1333668310bSRuchika Gupta 				  uint32_t data_sz, void **out_buf,
1343668310bSRuchika Gupta 				  uint32_t *out_sz);
1353668310bSRuchika Gupta 
1369e91a619SVesa Jääskeläinen /* Digest specific functions */
1379e91a619SVesa Jääskeläinen bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id);
1389e91a619SVesa Jääskeläinen 
1399e91a619SVesa Jääskeläinen enum pkcs11_rc
1409e91a619SVesa Jääskeläinen init_digest_operation(struct pkcs11_session *session,
1419e91a619SVesa Jääskeläinen 		      struct pkcs11_attribute_head *proc_params);
1429e91a619SVesa Jääskeläinen 
1439e91a619SVesa Jääskeläinen enum pkcs11_rc step_digest_operation(struct pkcs11_session *session,
1449e91a619SVesa Jääskeläinen 				     enum processing_step step,
1459e91a619SVesa Jääskeläinen 				     struct pkcs11_object *obj,
1469e91a619SVesa Jääskeläinen 				     uint32_t ptypes, TEE_Param *params);
1479e91a619SVesa Jääskeläinen 
14802b16804SVesa Jääskeläinen /*
14902b16804SVesa Jääskeläinen  * Elliptic curve crypto algorithm specific functions
15002b16804SVesa Jääskeläinen  */
151fb279d8bSVesa Jääskeläinen enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs,
152fb279d8bSVesa Jääskeläinen 				     size_t *tee_count,
153fb279d8bSVesa Jääskeläinen 				     struct pkcs11_object *obj);
154fb279d8bSVesa Jääskeläinen 
15502b16804SVesa Jääskeläinen size_t ec_params2tee_keysize(void *attr, size_t size);
15602b16804SVesa Jääskeläinen 
15702b16804SVesa Jääskeläinen uint32_t ec_params2tee_curve(void *attr, size_t size);
15802b16804SVesa Jääskeläinen 
159fb279d8bSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id,
160fb279d8bSVesa Jääskeläinen 				   struct pkcs11_attribute_head *proc_params,
161fb279d8bSVesa Jääskeläinen 				   struct pkcs11_object *obj);
162fb279d8bSVesa Jääskeläinen 
16302b16804SVesa Jääskeläinen enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params,
16402b16804SVesa Jääskeläinen 				struct obj_attrs **pub_head,
16502b16804SVesa Jääskeläinen 				struct obj_attrs **priv_head);
16602b16804SVesa Jääskeläinen 
167fb279d8bSVesa Jääskeläinen size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op);
168fb279d8bSVesa Jääskeläinen 
16986922832SVesa Jääskeläinen /*
17086922832SVesa Jääskeläinen  * RSA crypto algorithm specific functions
17186922832SVesa Jääskeläinen  */
1720442c956SVesa Jääskeläinen enum pkcs11_rc load_tee_rsa_key_attrs(TEE_Attribute **tee_attrs,
1730442c956SVesa Jääskeläinen 				      size_t *tee_count,
1740442c956SVesa Jääskeläinen 				      struct pkcs11_object *obj);
1750442c956SVesa Jääskeläinen 
176d9af50bcSVesa Jääskeläinen enum pkcs11_rc
177d9af50bcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_pss(struct active_processing *proc,
178d9af50bcSVesa Jääskeläinen 			     struct pkcs11_attribute_head *proc_params);
179d9af50bcSVesa Jääskeläinen 
180d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_validate_rsa_pss(struct active_processing *proc,
181d9af50bcSVesa Jääskeläinen 					 struct pkcs11_object *obj);
182d9af50bcSVesa Jääskeläinen 
183d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_pss(uint32_t *tee_id,
184d9af50bcSVesa Jääskeläinen 				     struct pkcs11_attribute_head *params);
185d9af50bcSVesa Jääskeläinen 
186*dc8c77fcSVesa Jääskeläinen enum pkcs11_rc
187*dc8c77fcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_oaep(struct active_processing *proc,
188*dc8c77fcSVesa Jääskeläinen 			      struct pkcs11_attribute_head *proc_params);
189*dc8c77fcSVesa Jääskeläinen 
190*dc8c77fcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_oaep(uint32_t *tee_id, uint32_t *tee_hash_id,
191*dc8c77fcSVesa Jääskeläinen 				      struct pkcs11_attribute_head *params);
192*dc8c77fcSVesa Jääskeläinen 
19386922832SVesa Jääskeläinen enum pkcs11_rc generate_rsa_keys(struct pkcs11_attribute_head *proc_params,
19486922832SVesa Jääskeläinen 				 struct obj_attrs **pub_head,
19586922832SVesa Jääskeläinen 				 struct obj_attrs **priv_head);
19686922832SVesa Jääskeläinen 
1970442c956SVesa Jääskeläinen size_t rsa_get_input_max_byte_size(TEE_OperationHandle op);
1980442c956SVesa Jääskeläinen 
199512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/
200