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