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 44512cbf1dSJens Wiklander /* 45512cbf1dSJens Wiklander * Util 46512cbf1dSJens Wiklander */ 47512cbf1dSJens Wiklander size_t get_object_key_bit_size(struct pkcs11_object *obj); 48512cbf1dSJens Wiklander 49512cbf1dSJens Wiklander void release_active_processing(struct pkcs11_session *session); 50512cbf1dSJens Wiklander 51013934d8SVesa Jääskeläinen enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj, 52013934d8SVesa Jääskeläinen uint32_t attribute, 53013934d8SVesa Jääskeläinen void **data, size_t *size); 54013934d8SVesa Jääskeläinen 55013934d8SVesa Jääskeläinen enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head, 56013934d8SVesa Jääskeläinen uint32_t pkcs11_id, 57013934d8SVesa Jääskeläinen TEE_ObjectHandle tee_obj, 58013934d8SVesa Jääskeläinen uint32_t tee_id); 59013934d8SVesa Jääskeläinen 60512cbf1dSJens Wiklander /* 61512cbf1dSJens Wiklander * Symmetric crypto algorithm specific functions 62512cbf1dSJens Wiklander */ 63512cbf1dSJens Wiklander bool processing_is_tee_symm(uint32_t proc_id); 64512cbf1dSJens Wiklander 65512cbf1dSJens Wiklander enum pkcs11_rc init_symm_operation(struct pkcs11_session *session, 66512cbf1dSJens Wiklander enum processing_func function, 67512cbf1dSJens Wiklander struct pkcs11_attribute_head *proc_params, 68512cbf1dSJens Wiklander struct pkcs11_object *key); 69512cbf1dSJens Wiklander 70512cbf1dSJens Wiklander enum pkcs11_rc step_symm_operation(struct pkcs11_session *session, 71512cbf1dSJens Wiklander enum processing_func function, 72512cbf1dSJens Wiklander enum processing_step step, 73512cbf1dSJens Wiklander uint32_t ptypes, TEE_Param *params); 74512cbf1dSJens Wiklander 75512cbf1dSJens Wiklander enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing, 76512cbf1dSJens Wiklander void *proc_params, size_t params_size); 7748799892SRuchika Gupta 7848799892SRuchika Gupta enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session, 798c499324SRuchika Gupta void **out_buf, uint32_t *out_sz); 8048799892SRuchika Gupta 819e91a619SVesa Jääskeläinen /* Digest specific functions */ 829e91a619SVesa Jääskeläinen bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id); 839e91a619SVesa Jääskeläinen 849e91a619SVesa Jääskeläinen enum pkcs11_rc 859e91a619SVesa Jääskeläinen init_digest_operation(struct pkcs11_session *session, 869e91a619SVesa Jääskeläinen struct pkcs11_attribute_head *proc_params); 879e91a619SVesa Jääskeläinen 889e91a619SVesa Jääskeläinen enum pkcs11_rc step_digest_operation(struct pkcs11_session *session, 899e91a619SVesa Jääskeläinen enum processing_step step, 909e91a619SVesa Jääskeläinen struct pkcs11_object *obj, 919e91a619SVesa Jääskeläinen uint32_t ptypes, TEE_Param *params); 929e91a619SVesa Jääskeläinen 93*02b16804SVesa Jääskeläinen /* 94*02b16804SVesa Jääskeläinen * Elliptic curve crypto algorithm specific functions 95*02b16804SVesa Jääskeläinen */ 96*02b16804SVesa Jääskeläinen size_t ec_params2tee_keysize(void *attr, size_t size); 97*02b16804SVesa Jääskeläinen 98*02b16804SVesa Jääskeläinen uint32_t ec_params2tee_curve(void *attr, size_t size); 99*02b16804SVesa Jääskeläinen 100*02b16804SVesa Jääskeläinen enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params, 101*02b16804SVesa Jääskeläinen struct obj_attrs **pub_head, 102*02b16804SVesa Jääskeläinen struct obj_attrs **priv_head); 103*02b16804SVesa Jääskeläinen 104512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/ 105