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 1013668310bSRuchika Gupta enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data, 1023668310bSRuchika Gupta uint32_t data_sz, void **out_buf, 1033668310bSRuchika Gupta uint32_t *out_sz); 1043668310bSRuchika 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 138*86922832SVesa Jääskeläinen /* 139*86922832SVesa Jääskeläinen * RSA crypto algorithm specific functions 140*86922832SVesa Jääskeläinen */ 141*86922832SVesa Jääskeläinen enum pkcs11_rc generate_rsa_keys(struct pkcs11_attribute_head *proc_params, 142*86922832SVesa Jääskeläinen struct obj_attrs **pub_head, 143*86922832SVesa Jääskeläinen struct obj_attrs **priv_head); 144*86922832SVesa Jääskeläinen 145512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/ 146