xref: /optee_os/ta/pkcs11/src/processing.h (revision 3668310bd696b9c71a32a0f8f6d834a111661ba3)
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>
10512cbf1dSJens Wiklander #include <tee_internal_api.h>
11512cbf1dSJens Wiklander 
12512cbf1dSJens Wiklander struct pkcs11_client;
13512cbf1dSJens Wiklander struct pkcs11_session;
14512cbf1dSJens Wiklander struct pkcs11_object;
15512cbf1dSJens Wiklander struct active_processing;
16512cbf1dSJens Wiklander 
17512cbf1dSJens Wiklander /*
18512cbf1dSJens Wiklander  * Entry points from PKCS11 TA invocation commands
19512cbf1dSJens Wiklander  */
20512cbf1dSJens Wiklander 
21fa247a2aSRuchika Gupta enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client,
22fa247a2aSRuchika Gupta 				     uint32_t ptypes, TEE_Param *params);
23fa247a2aSRuchika Gupta 
24013934d8SVesa Jääskeläinen enum pkcs11_rc entry_generate_key_pair(struct pkcs11_client *client,
25013934d8SVesa Jääskeläinen 				       uint32_t ptypes, TEE_Param *params);
26013934d8SVesa Jääskeläinen 
27512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_init(struct pkcs11_client *client,
28512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
29512cbf1dSJens Wiklander 				     enum processing_func function);
30512cbf1dSJens Wiklander 
31512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_step(struct pkcs11_client *client,
32512cbf1dSJens Wiklander 				     uint32_t ptypes, TEE_Param *params,
33512cbf1dSJens Wiklander 				     enum processing_func function,
34512cbf1dSJens Wiklander 				     enum processing_step step);
35512cbf1dSJens Wiklander 
364dad6642SRuchika Gupta enum pkcs11_rc entry_processing_key(struct pkcs11_client *client,
374dad6642SRuchika Gupta 				    uint32_t ptypes, TEE_Param *params,
384dad6642SRuchika Gupta 				    enum processing_func function);
3948799892SRuchika Gupta 
40eb6141b6SVesa Jääskeläinen enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client,
41eb6141b6SVesa Jääskeläinen 					       uint32_t ptypes,
42eb6141b6SVesa Jääskeläinen 					       TEE_Param *params);
43eb6141b6SVesa Jääskeläinen 
445f80f270SRuchika Gupta enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client,
455f80f270SRuchika Gupta 			      uint32_t ptypes, TEE_Param *params);
465f80f270SRuchika Gupta 
47512cbf1dSJens Wiklander /*
48512cbf1dSJens Wiklander  * Util
49512cbf1dSJens Wiklander  */
50512cbf1dSJens Wiklander size_t get_object_key_bit_size(struct pkcs11_object *obj);
51512cbf1dSJens Wiklander 
52512cbf1dSJens Wiklander void release_active_processing(struct pkcs11_session *session);
53512cbf1dSJens Wiklander 
54013934d8SVesa Jääskeläinen enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj,
55013934d8SVesa Jääskeläinen 					    uint32_t attribute,
56013934d8SVesa Jääskeläinen 					    void **data, size_t *size);
57013934d8SVesa Jääskeläinen 
58013934d8SVesa Jääskeläinen enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head,
59013934d8SVesa Jääskeläinen 				      uint32_t pkcs11_id,
60013934d8SVesa Jääskeläinen 				      TEE_ObjectHandle tee_obj,
61013934d8SVesa Jääskeläinen 				      uint32_t tee_id);
62013934d8SVesa Jääskeläinen 
63fb279d8bSVesa Jääskeläinen /* Asymmetric key operations util */
64fb279d8bSVesa Jääskeläinen bool processing_is_tee_asymm(uint32_t proc_id);
65fb279d8bSVesa Jääskeläinen 
66fb279d8bSVesa Jääskeläinen enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session,
67fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
68fb279d8bSVesa Jääskeläinen 				    struct pkcs11_attribute_head *proc_params,
69fb279d8bSVesa Jääskeläinen 				    struct pkcs11_object *obj);
70fb279d8bSVesa Jääskeläinen 
71fb279d8bSVesa Jääskeläinen enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session,
72fb279d8bSVesa Jääskeläinen 				    enum processing_func function,
73fb279d8bSVesa Jääskeläinen 				    enum processing_step step,
74fb279d8bSVesa Jääskeläinen 				    uint32_t ptypes, TEE_Param *params);
75fb279d8bSVesa Jääskeläinen 
76512cbf1dSJens Wiklander /*
77512cbf1dSJens Wiklander  * Symmetric crypto algorithm specific functions
78512cbf1dSJens Wiklander  */
79512cbf1dSJens Wiklander bool processing_is_tee_symm(uint32_t proc_id);
80512cbf1dSJens Wiklander 
81512cbf1dSJens Wiklander enum pkcs11_rc init_symm_operation(struct pkcs11_session *session,
82512cbf1dSJens Wiklander 				   enum processing_func function,
83512cbf1dSJens Wiklander 				   struct pkcs11_attribute_head *proc_params,
84512cbf1dSJens Wiklander 				   struct pkcs11_object *key);
85512cbf1dSJens Wiklander 
86512cbf1dSJens Wiklander enum pkcs11_rc step_symm_operation(struct pkcs11_session *session,
87512cbf1dSJens Wiklander 				   enum processing_func function,
88512cbf1dSJens Wiklander 				   enum processing_step step,
89512cbf1dSJens Wiklander 				   uint32_t ptypes, TEE_Param *params);
90512cbf1dSJens Wiklander 
91512cbf1dSJens Wiklander enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing,
92512cbf1dSJens Wiklander 				      void *proc_params, size_t params_size);
9348799892SRuchika Gupta 
9448799892SRuchika Gupta enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session,
958c499324SRuchika Gupta 				      void **out_buf, uint32_t *out_sz);
9648799892SRuchika Gupta 
975f80f270SRuchika Gupta enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session,
985f80f270SRuchika Gupta 				     void *data, uint32_t data_sz,
995f80f270SRuchika Gupta 				     void *out_buf, uint32_t *out_sz);
1005f80f270SRuchika Gupta 
101*3668310bSRuchika Gupta enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data,
102*3668310bSRuchika Gupta 				  uint32_t data_sz, void **out_buf,
103*3668310bSRuchika Gupta 				  uint32_t *out_sz);
104*3668310bSRuchika Gupta 
1059e91a619SVesa Jääskeläinen /* Digest specific functions */
1069e91a619SVesa Jääskeläinen bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id);
1079e91a619SVesa Jääskeläinen 
1089e91a619SVesa Jääskeläinen enum pkcs11_rc
1099e91a619SVesa Jääskeläinen init_digest_operation(struct pkcs11_session *session,
1109e91a619SVesa Jääskeläinen 		      struct pkcs11_attribute_head *proc_params);
1119e91a619SVesa Jääskeläinen 
1129e91a619SVesa Jääskeläinen enum pkcs11_rc step_digest_operation(struct pkcs11_session *session,
1139e91a619SVesa Jääskeläinen 				     enum processing_step step,
1149e91a619SVesa Jääskeläinen 				     struct pkcs11_object *obj,
1159e91a619SVesa Jääskeläinen 				     uint32_t ptypes, TEE_Param *params);
1169e91a619SVesa Jääskeläinen 
11702b16804SVesa Jääskeläinen /*
11802b16804SVesa Jääskeläinen  * Elliptic curve crypto algorithm specific functions
11902b16804SVesa Jääskeläinen  */
120fb279d8bSVesa Jääskeläinen enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs,
121fb279d8bSVesa Jääskeläinen 				     size_t *tee_count,
122fb279d8bSVesa Jääskeläinen 				     struct pkcs11_object *obj);
123fb279d8bSVesa Jääskeläinen 
12402b16804SVesa Jääskeläinen size_t ec_params2tee_keysize(void *attr, size_t size);
12502b16804SVesa Jääskeläinen 
12602b16804SVesa Jääskeläinen uint32_t ec_params2tee_curve(void *attr, size_t size);
12702b16804SVesa Jääskeläinen 
128fb279d8bSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id,
129fb279d8bSVesa Jääskeläinen 				   struct pkcs11_attribute_head *proc_params,
130fb279d8bSVesa Jääskeläinen 				   struct pkcs11_object *obj);
131fb279d8bSVesa Jääskeläinen 
13202b16804SVesa Jääskeläinen enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params,
13302b16804SVesa Jääskeläinen 				struct obj_attrs **pub_head,
13402b16804SVesa Jääskeläinen 				struct obj_attrs **priv_head);
13502b16804SVesa Jääskeläinen 
136fb279d8bSVesa Jääskeläinen size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op);
137fb279d8bSVesa Jääskeläinen 
138512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/
139