1b32598bfSZexi Yu /* SPDX-License-Identifier: BSD-2-Clause */ 2b32598bfSZexi Yu /* 3b32598bfSZexi Yu * Copyright (c) 2022-2024, HiSilicon Technologies Co., Ltd. 4b32598bfSZexi Yu */ 5b32598bfSZexi Yu 6b32598bfSZexi Yu #ifndef __HPRE_ECC_H__ 7b32598bfSZexi Yu #define __HPRE_ECC_H__ 8b32598bfSZexi Yu 9b32598bfSZexi Yu #include <stdbool.h> 10b32598bfSZexi Yu #include <stdint.h> 11b32598bfSZexi Yu #include <tee_api_types.h> 12b32598bfSZexi Yu #include <types_ext.h> 13b32598bfSZexi Yu 14*b5203cb1Syuzexi enum ecc_verify_status { 15*b5203cb1Syuzexi ECC_VERIFY_ERR = 0, 16*b5203cb1Syuzexi ECC_VERIFY_SUCCESS = 1, 17*b5203cb1Syuzexi }; 18*b5203cb1Syuzexi 19b32598bfSZexi Yu struct hpre_ecc_dh { 20b32598bfSZexi Yu uint32_t d_bytes; 21b32598bfSZexi Yu uint32_t x_bytes; 22b32598bfSZexi Yu uint32_t y_bytes; 23b32598bfSZexi Yu uint32_t rx_bytes; 24b32598bfSZexi Yu uint32_t ry_bytes; 25b32598bfSZexi Yu }; 26b32598bfSZexi Yu 27b32598bfSZexi Yu struct hpre_ecc_sign { 28b32598bfSZexi Yu uint32_t d_bytes; 29b32598bfSZexi Yu uint32_t e_bytes; 30b32598bfSZexi Yu uint32_t k_bytes; 31b32598bfSZexi Yu uint32_t r_bytes; 32b32598bfSZexi Yu uint32_t s_bytes; 33b32598bfSZexi Yu }; 34b32598bfSZexi Yu 35b32598bfSZexi Yu struct hpre_ecc_verify { 36b32598bfSZexi Yu uint32_t pubx_bytes; 37b32598bfSZexi Yu uint32_t puby_bytes; 38b32598bfSZexi Yu uint32_t e_bytes; 39b32598bfSZexi Yu uint32_t s_bytes; 40b32598bfSZexi Yu uint32_t r_bytes; 41b32598bfSZexi Yu }; 42b32598bfSZexi Yu 43b32598bfSZexi Yu struct hpre_sm2_enc { 44b32598bfSZexi Yu uint32_t pubx_bytes; 45b32598bfSZexi Yu uint32_t puby_bytes; 46b32598bfSZexi Yu uint32_t k_bytes; 47b32598bfSZexi Yu uint32_t m_bytes; 48b32598bfSZexi Yu uint32_t c1x_bytes; 49b32598bfSZexi Yu uint32_t c1y_bytes; 50b32598bfSZexi Yu uint32_t c2_bytes; 51b32598bfSZexi Yu uint32_t c3_bytes; 52b32598bfSZexi Yu }; 53b32598bfSZexi Yu 54b32598bfSZexi Yu struct hpre_sm2_dec { 55b32598bfSZexi Yu uint32_t d_bytes; 56b32598bfSZexi Yu uint32_t c1x_bytes; 57b32598bfSZexi Yu uint32_t c1y_bytes; 58b32598bfSZexi Yu uint32_t c2_bytes; 59b32598bfSZexi Yu uint32_t c3_bytes; 60b32598bfSZexi Yu uint32_t m_bytes; 61b32598bfSZexi Yu }; 62b32598bfSZexi Yu 63b32598bfSZexi Yu struct hpre_ecc_msg { 64b32598bfSZexi Yu uint8_t *key; 65b32598bfSZexi Yu paddr_t key_dma; 66b32598bfSZexi Yu uint8_t *in; 67b32598bfSZexi Yu paddr_t in_dma; 68b32598bfSZexi Yu uint8_t *out; 69b32598bfSZexi Yu paddr_t out_dma; 70b32598bfSZexi Yu uint8_t alg_type; 71b32598bfSZexi Yu uint32_t key_bytes; 72b32598bfSZexi Yu uint32_t curve_bytes; 73b32598bfSZexi Yu uint32_t result; 74b32598bfSZexi Yu uint32_t sm2_mlen; 75b32598bfSZexi Yu bool sm2_sp; 76b32598bfSZexi Yu union { 77b32598bfSZexi Yu struct hpre_ecc_dh ecc_dh; 78b32598bfSZexi Yu struct hpre_ecc_sign ecc_sign; 79b32598bfSZexi Yu struct hpre_ecc_verify ecc_verify; 80b32598bfSZexi Yu struct hpre_sm2_enc sm2_enc; 81b32598bfSZexi Yu struct hpre_sm2_dec sm2_dec; 82b32598bfSZexi Yu } param_size; 83b32598bfSZexi Yu }; 84b32598bfSZexi Yu 85b32598bfSZexi Yu #endif 86