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 enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client, 45 uint32_t ptypes, TEE_Param *params); 46 47 /* 48 * Util 49 */ 50 size_t get_object_key_bit_size(struct pkcs11_object *obj); 51 52 void release_active_processing(struct pkcs11_session *session); 53 54 enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj, 55 uint32_t attribute, 56 void **data, size_t *size); 57 58 enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head, 59 uint32_t pkcs11_id, 60 TEE_ObjectHandle tee_obj, 61 uint32_t tee_id); 62 63 /* Asymmetric key operations util */ 64 bool processing_is_tee_asymm(uint32_t proc_id); 65 66 enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session, 67 enum processing_func function, 68 struct pkcs11_attribute_head *proc_params, 69 struct pkcs11_object *obj); 70 71 enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session, 72 enum processing_func function, 73 enum processing_step step, 74 uint32_t ptypes, TEE_Param *params); 75 76 /* 77 * Symmetric crypto algorithm specific functions 78 */ 79 bool processing_is_tee_symm(uint32_t proc_id); 80 81 enum pkcs11_rc init_symm_operation(struct pkcs11_session *session, 82 enum processing_func function, 83 struct pkcs11_attribute_head *proc_params, 84 struct pkcs11_object *key); 85 86 enum pkcs11_rc step_symm_operation(struct pkcs11_session *session, 87 enum processing_func function, 88 enum processing_step step, 89 uint32_t ptypes, TEE_Param *params); 90 91 enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing, 92 void *proc_params, size_t params_size); 93 94 enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session, 95 void **out_buf, uint32_t *out_sz); 96 97 enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session, 98 void *data, uint32_t data_sz, 99 void *out_buf, uint32_t *out_sz); 100 101 enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data, 102 uint32_t data_sz, void **out_buf, 103 uint32_t *out_sz); 104 105 /* Digest specific functions */ 106 bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id); 107 108 enum pkcs11_rc 109 init_digest_operation(struct pkcs11_session *session, 110 struct pkcs11_attribute_head *proc_params); 111 112 enum pkcs11_rc step_digest_operation(struct pkcs11_session *session, 113 enum processing_step step, 114 struct pkcs11_object *obj, 115 uint32_t ptypes, TEE_Param *params); 116 117 /* 118 * Elliptic curve crypto algorithm specific functions 119 */ 120 enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs, 121 size_t *tee_count, 122 struct pkcs11_object *obj); 123 124 size_t ec_params2tee_keysize(void *attr, size_t size); 125 126 uint32_t ec_params2tee_curve(void *attr, size_t size); 127 128 enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id, 129 struct pkcs11_attribute_head *proc_params, 130 struct pkcs11_object *obj); 131 132 enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params, 133 struct obj_attrs **pub_head, 134 struct obj_attrs **priv_head); 135 136 size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op); 137 138 /* 139 * RSA crypto algorithm specific functions 140 */ 141 enum pkcs11_rc load_tee_rsa_key_attrs(TEE_Attribute **tee_attrs, 142 size_t *tee_count, 143 struct pkcs11_object *obj); 144 145 enum pkcs11_rc generate_rsa_keys(struct pkcs11_attribute_head *proc_params, 146 struct obj_attrs **pub_head, 147 struct obj_attrs **priv_head); 148 149 size_t rsa_get_input_max_byte_size(TEE_OperationHandle op); 150 151 #endif /*PKCS11_TA_PROCESSING_H*/ 152