1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2017-2020, Linaro Limited 4 */ 5 6 #ifndef PKCS11_TA_PROCESSING_H 7 #define PKCS11_TA_PROCESSING_H 8 9 #include <pkcs11_attributes.h> 10 #include <tee_internal_api.h> 11 12 struct pkcs11_client; 13 struct pkcs11_session; 14 struct pkcs11_object; 15 struct active_processing; 16 17 /* 18 * Entry points from PKCS11 TA invocation commands 19 */ 20 21 enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client, 22 uint32_t ptypes, TEE_Param *params); 23 24 enum pkcs11_rc entry_generate_key_pair(struct pkcs11_client *client, 25 uint32_t ptypes, TEE_Param *params); 26 27 enum pkcs11_rc entry_processing_init(struct pkcs11_client *client, 28 uint32_t ptypes, TEE_Param *params, 29 enum processing_func function); 30 31 enum pkcs11_rc entry_processing_step(struct pkcs11_client *client, 32 uint32_t ptypes, TEE_Param *params, 33 enum processing_func function, 34 enum processing_step step); 35 36 enum pkcs11_rc entry_processing_key(struct pkcs11_client *client, 37 uint32_t ptypes, TEE_Param *params, 38 enum processing_func function); 39 40 enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client, 41 uint32_t ptypes, 42 TEE_Param *params); 43 44 /* 45 * Util 46 */ 47 size_t get_object_key_bit_size(struct pkcs11_object *obj); 48 49 void release_active_processing(struct pkcs11_session *session); 50 51 enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj, 52 uint32_t attribute, 53 void **data, size_t *size); 54 55 enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head, 56 uint32_t pkcs11_id, 57 TEE_ObjectHandle tee_obj, 58 uint32_t tee_id); 59 60 /* 61 * Symmetric crypto algorithm specific functions 62 */ 63 bool processing_is_tee_symm(uint32_t proc_id); 64 65 enum pkcs11_rc init_symm_operation(struct pkcs11_session *session, 66 enum processing_func function, 67 struct pkcs11_attribute_head *proc_params, 68 struct pkcs11_object *key); 69 70 enum pkcs11_rc step_symm_operation(struct pkcs11_session *session, 71 enum processing_func function, 72 enum processing_step step, 73 uint32_t ptypes, TEE_Param *params); 74 75 enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing, 76 void *proc_params, size_t params_size); 77 78 enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session, 79 void **out_buf, uint32_t *out_sz); 80 81 /* Digest specific functions */ 82 bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id); 83 84 enum pkcs11_rc 85 init_digest_operation(struct pkcs11_session *session, 86 struct pkcs11_attribute_head *proc_params); 87 88 enum pkcs11_rc step_digest_operation(struct pkcs11_session *session, 89 enum processing_step step, 90 struct pkcs11_object *obj, 91 uint32_t ptypes, TEE_Param *params); 92 93 #endif /*PKCS11_TA_PROCESSING_H*/ 94