xref: /optee_os/core/drivers/crypto/hisilicon/hpre_ecc.h (revision b5203cb1b7db37616c901e110322d4994bb99507)
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