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> 10d9af50bcSVesa 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 18d9af50bcSVesa Jääskeläinen /** 19d9af50bcSVesa Jääskeläinen * RSA PSS processing context 20d9af50bcSVesa Jääskeläinen * 21d9af50bcSVesa Jääskeläinen * @hash_alg: Hash algorithm mechanism 22d9af50bcSVesa Jääskeläinen * @mgf_type: Mask generator function 23d9af50bcSVesa Jääskeläinen * @salt_len: Length of the salt in bytes 24d9af50bcSVesa Jääskeläinen */ 25d9af50bcSVesa Jääskeläinen struct rsa_pss_processing_ctx { 26d9af50bcSVesa Jääskeläinen enum pkcs11_mechanism_id hash_alg; 27d9af50bcSVesa Jääskeläinen enum pkcs11_mgf_id mgf_type; 28d9af50bcSVesa Jääskeläinen uint32_t salt_len; 29d9af50bcSVesa Jääskeläinen }; 30d9af50bcSVesa Jääskeläinen 31*dc8c77fcSVesa Jääskeläinen /** 32*dc8c77fcSVesa Jääskeläinen * RSA OAEP processing context 33*dc8c77fcSVesa Jääskeläinen * 34*dc8c77fcSVesa Jääskeläinen * @hash_alg: Hash algorithm mechanism 35*dc8c77fcSVesa Jääskeläinen * @mgf_type: Mask generator function 36*dc8c77fcSVesa Jääskeläinen * @source_type: Type of source. 37*dc8c77fcSVesa Jääskeläinen * @source_data_len: Length of the source data. 38*dc8c77fcSVesa Jääskeläinen * @source_data: Source data. 39*dc8c77fcSVesa Jääskeläinen */ 40*dc8c77fcSVesa Jääskeläinen struct rsa_oaep_processing_ctx { 41*dc8c77fcSVesa Jääskeläinen enum pkcs11_mechanism_id hash_alg; 42*dc8c77fcSVesa Jääskeläinen enum pkcs11_mgf_id mgf_type; 43*dc8c77fcSVesa Jääskeläinen uint32_t source_type; 44*dc8c77fcSVesa Jääskeläinen uint32_t source_data_len; 45*dc8c77fcSVesa Jääskeläinen uint8_t source_data[]; 46*dc8c77fcSVesa Jääskeläinen }; 47*dc8c77fcSVesa Jääskeläinen 48512cbf1dSJens Wiklander /* 49512cbf1dSJens Wiklander * Entry points from PKCS11 TA invocation commands 50512cbf1dSJens Wiklander */ 51512cbf1dSJens Wiklander 52fa247a2aSRuchika Gupta enum pkcs11_rc entry_generate_secret(struct pkcs11_client *client, 53fa247a2aSRuchika Gupta uint32_t ptypes, TEE_Param *params); 54fa247a2aSRuchika Gupta 55013934d8SVesa Jääskeläinen enum pkcs11_rc entry_generate_key_pair(struct pkcs11_client *client, 56013934d8SVesa Jääskeläinen uint32_t ptypes, TEE_Param *params); 57013934d8SVesa Jääskeläinen 58512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_init(struct pkcs11_client *client, 59512cbf1dSJens Wiklander uint32_t ptypes, TEE_Param *params, 60512cbf1dSJens Wiklander enum processing_func function); 61512cbf1dSJens Wiklander 62512cbf1dSJens Wiklander enum pkcs11_rc entry_processing_step(struct pkcs11_client *client, 63512cbf1dSJens Wiklander uint32_t ptypes, TEE_Param *params, 64512cbf1dSJens Wiklander enum processing_func function, 65512cbf1dSJens Wiklander enum processing_step step); 66512cbf1dSJens Wiklander 674dad6642SRuchika Gupta enum pkcs11_rc entry_processing_key(struct pkcs11_client *client, 684dad6642SRuchika Gupta uint32_t ptypes, TEE_Param *params, 694dad6642SRuchika Gupta enum processing_func function); 7048799892SRuchika Gupta 71eb6141b6SVesa Jääskeläinen enum pkcs11_rc entry_release_active_processing(struct pkcs11_client *client, 72eb6141b6SVesa Jääskeläinen uint32_t ptypes, 73eb6141b6SVesa Jääskeläinen TEE_Param *params); 74eb6141b6SVesa Jääskeläinen 755f80f270SRuchika Gupta enum pkcs11_rc entry_wrap_key(struct pkcs11_client *client, 765f80f270SRuchika Gupta uint32_t ptypes, TEE_Param *params); 775f80f270SRuchika Gupta 78512cbf1dSJens Wiklander /* 79512cbf1dSJens Wiklander * Util 80512cbf1dSJens Wiklander */ 81512cbf1dSJens Wiklander size_t get_object_key_bit_size(struct pkcs11_object *obj); 82512cbf1dSJens Wiklander 83512cbf1dSJens Wiklander void release_active_processing(struct pkcs11_session *session); 84512cbf1dSJens Wiklander 85013934d8SVesa Jääskeläinen enum pkcs11_rc alloc_get_tee_attribute_data(TEE_ObjectHandle tee_obj, 86013934d8SVesa Jääskeläinen uint32_t attribute, 87013934d8SVesa Jääskeläinen void **data, size_t *size); 88013934d8SVesa Jääskeläinen 89013934d8SVesa Jääskeläinen enum pkcs11_rc tee2pkcs_add_attribute(struct obj_attrs **head, 90013934d8SVesa Jääskeläinen uint32_t pkcs11_id, 91013934d8SVesa Jääskeläinen TEE_ObjectHandle tee_obj, 92013934d8SVesa Jääskeläinen uint32_t tee_id); 93013934d8SVesa Jääskeläinen 94fb279d8bSVesa Jääskeläinen /* Asymmetric key operations util */ 95fb279d8bSVesa Jääskeläinen bool processing_is_tee_asymm(uint32_t proc_id); 96fb279d8bSVesa Jääskeläinen 97fb279d8bSVesa Jääskeläinen enum pkcs11_rc init_asymm_operation(struct pkcs11_session *session, 98fb279d8bSVesa Jääskeläinen enum processing_func function, 99fb279d8bSVesa Jääskeläinen struct pkcs11_attribute_head *proc_params, 100fb279d8bSVesa Jääskeläinen struct pkcs11_object *obj); 101fb279d8bSVesa Jääskeläinen 102fb279d8bSVesa Jääskeläinen enum pkcs11_rc step_asymm_operation(struct pkcs11_session *session, 103fb279d8bSVesa Jääskeläinen enum processing_func function, 104fb279d8bSVesa Jääskeläinen enum processing_step step, 105fb279d8bSVesa Jääskeläinen uint32_t ptypes, TEE_Param *params); 106fb279d8bSVesa Jääskeläinen 107512cbf1dSJens Wiklander /* 108512cbf1dSJens Wiklander * Symmetric crypto algorithm specific functions 109512cbf1dSJens Wiklander */ 110512cbf1dSJens Wiklander bool processing_is_tee_symm(uint32_t proc_id); 111512cbf1dSJens Wiklander 112512cbf1dSJens Wiklander enum pkcs11_rc init_symm_operation(struct pkcs11_session *session, 113512cbf1dSJens Wiklander enum processing_func function, 114512cbf1dSJens Wiklander struct pkcs11_attribute_head *proc_params, 115512cbf1dSJens Wiklander struct pkcs11_object *key); 116512cbf1dSJens Wiklander 117512cbf1dSJens Wiklander enum pkcs11_rc step_symm_operation(struct pkcs11_session *session, 118512cbf1dSJens Wiklander enum processing_func function, 119512cbf1dSJens Wiklander enum processing_step step, 120512cbf1dSJens Wiklander uint32_t ptypes, TEE_Param *params); 121512cbf1dSJens Wiklander 122512cbf1dSJens Wiklander enum pkcs11_rc tee_init_ctr_operation(struct active_processing *processing, 123512cbf1dSJens Wiklander void *proc_params, size_t params_size); 12448799892SRuchika Gupta 12548799892SRuchika Gupta enum pkcs11_rc derive_key_by_symm_enc(struct pkcs11_session *session, 1268c499324SRuchika Gupta void **out_buf, uint32_t *out_sz); 12748799892SRuchika Gupta 1285f80f270SRuchika Gupta enum pkcs11_rc wrap_data_by_symm_enc(struct pkcs11_session *session, 1295f80f270SRuchika Gupta void *data, uint32_t data_sz, 1305f80f270SRuchika Gupta void *out_buf, uint32_t *out_sz); 1315f80f270SRuchika Gupta 1323668310bSRuchika Gupta enum pkcs11_rc unwrap_key_by_symm(struct pkcs11_session *session, void *data, 1333668310bSRuchika Gupta uint32_t data_sz, void **out_buf, 1343668310bSRuchika Gupta uint32_t *out_sz); 1353668310bSRuchika Gupta 1369e91a619SVesa Jääskeläinen /* Digest specific functions */ 1379e91a619SVesa Jääskeläinen bool processing_is_tee_digest(enum pkcs11_mechanism_id mecha_id); 1389e91a619SVesa Jääskeläinen 1399e91a619SVesa Jääskeläinen enum pkcs11_rc 1409e91a619SVesa Jääskeläinen init_digest_operation(struct pkcs11_session *session, 1419e91a619SVesa Jääskeläinen struct pkcs11_attribute_head *proc_params); 1429e91a619SVesa Jääskeläinen 1439e91a619SVesa Jääskeläinen enum pkcs11_rc step_digest_operation(struct pkcs11_session *session, 1449e91a619SVesa Jääskeläinen enum processing_step step, 1459e91a619SVesa Jääskeläinen struct pkcs11_object *obj, 1469e91a619SVesa Jääskeläinen uint32_t ptypes, TEE_Param *params); 1479e91a619SVesa Jääskeläinen 14802b16804SVesa Jääskeläinen /* 14902b16804SVesa Jääskeläinen * Elliptic curve crypto algorithm specific functions 15002b16804SVesa Jääskeläinen */ 151fb279d8bSVesa Jääskeläinen enum pkcs11_rc load_tee_ec_key_attrs(TEE_Attribute **tee_attrs, 152fb279d8bSVesa Jääskeläinen size_t *tee_count, 153fb279d8bSVesa Jääskeläinen struct pkcs11_object *obj); 154fb279d8bSVesa Jääskeläinen 15502b16804SVesa Jääskeläinen size_t ec_params2tee_keysize(void *attr, size_t size); 15602b16804SVesa Jääskeläinen 15702b16804SVesa Jääskeläinen uint32_t ec_params2tee_curve(void *attr, size_t size); 15802b16804SVesa Jääskeläinen 159fb279d8bSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_ecdsa(uint32_t *tee_id, 160fb279d8bSVesa Jääskeläinen struct pkcs11_attribute_head *proc_params, 161fb279d8bSVesa Jääskeläinen struct pkcs11_object *obj); 162fb279d8bSVesa Jääskeläinen 16302b16804SVesa Jääskeläinen enum pkcs11_rc generate_ec_keys(struct pkcs11_attribute_head *proc_params, 16402b16804SVesa Jääskeläinen struct obj_attrs **pub_head, 16502b16804SVesa Jääskeläinen struct obj_attrs **priv_head); 16602b16804SVesa Jääskeläinen 167fb279d8bSVesa Jääskeläinen size_t ecdsa_get_input_max_byte_size(TEE_OperationHandle op); 168fb279d8bSVesa Jääskeläinen 16986922832SVesa Jääskeläinen /* 17086922832SVesa Jääskeläinen * RSA crypto algorithm specific functions 17186922832SVesa Jääskeläinen */ 1720442c956SVesa Jääskeläinen enum pkcs11_rc load_tee_rsa_key_attrs(TEE_Attribute **tee_attrs, 1730442c956SVesa Jääskeläinen size_t *tee_count, 1740442c956SVesa Jääskeläinen struct pkcs11_object *obj); 1750442c956SVesa Jääskeläinen 176d9af50bcSVesa Jääskeläinen enum pkcs11_rc 177d9af50bcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_pss(struct active_processing *proc, 178d9af50bcSVesa Jääskeläinen struct pkcs11_attribute_head *proc_params); 179d9af50bcSVesa Jääskeläinen 180d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_validate_rsa_pss(struct active_processing *proc, 181d9af50bcSVesa Jääskeläinen struct pkcs11_object *obj); 182d9af50bcSVesa Jääskeläinen 183d9af50bcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_pss(uint32_t *tee_id, 184d9af50bcSVesa Jääskeläinen struct pkcs11_attribute_head *params); 185d9af50bcSVesa Jääskeläinen 186*dc8c77fcSVesa Jääskeläinen enum pkcs11_rc 187*dc8c77fcSVesa Jääskeläinen pkcs2tee_proc_params_rsa_oaep(struct active_processing *proc, 188*dc8c77fcSVesa Jääskeläinen struct pkcs11_attribute_head *proc_params); 189*dc8c77fcSVesa Jääskeläinen 190*dc8c77fcSVesa Jääskeläinen enum pkcs11_rc pkcs2tee_algo_rsa_oaep(uint32_t *tee_id, uint32_t *tee_hash_id, 191*dc8c77fcSVesa Jääskeläinen struct pkcs11_attribute_head *params); 192*dc8c77fcSVesa Jääskeläinen 19386922832SVesa Jääskeläinen enum pkcs11_rc generate_rsa_keys(struct pkcs11_attribute_head *proc_params, 19486922832SVesa Jääskeläinen struct obj_attrs **pub_head, 19586922832SVesa Jääskeläinen struct obj_attrs **priv_head); 19686922832SVesa Jääskeläinen 1970442c956SVesa Jääskeläinen size_t rsa_get_input_max_byte_size(TEE_OperationHandle op); 1980442c956SVesa Jääskeläinen 199512cbf1dSJens Wiklander #endif /*PKCS11_TA_PROCESSING_H*/ 200