xref: /optee_os/core/drivers/crypto/hisilicon/hpre_rsa.h (revision 4f75eab013a2bfcefc24d8d877300795e5e87568)
1*4f75eab0Syuzexi /* SPDX-License-Identifier: BSD-2-Clause */
2*4f75eab0Syuzexi /*
3*4f75eab0Syuzexi  * Copyright (c) 2024, HiSilicon Technologies Co., Ltd.
4*4f75eab0Syuzexi  */
5*4f75eab0Syuzexi 
6*4f75eab0Syuzexi #ifndef __HPRE_RSA_H__
7*4f75eab0Syuzexi #define __HPRE_RSA_H__
8*4f75eab0Syuzexi 
9*4f75eab0Syuzexi #include <stdint.h>
10*4f75eab0Syuzexi #include <tee_api_types.h>
11*4f75eab0Syuzexi #include <types_ext.h>
12*4f75eab0Syuzexi 
13*4f75eab0Syuzexi #define PKCS_V1_5_MSG_MIN_LEN			11
14*4f75eab0Syuzexi #define PKCS_V1_5_PS_MIN_LEN			8
15*4f75eab0Syuzexi #define PKCS_V1_5_PS_POS			2
16*4f75eab0Syuzexi #define PKCS_V1_5_FIXED_LEN			3
17*4f75eab0Syuzexi #define PKCS_V1_5_PS_DATA			0x5a
18*4f75eab0Syuzexi #define OAEP_MAX_HASH_LEN			64
19*4f75eab0Syuzexi #define OAEP_MAX_DB_LEN				512
20*4f75eab0Syuzexi #define PRIME_QUALITY_FLAG			1024
21*4f75eab0Syuzexi #define HPRE_RSA_CRT_TOTAL_BUF_SIZE(kbytes)	((kbytes) * 6)
22*4f75eab0Syuzexi #define HPRE_RSA_CRT_KEY_BUF_SIZE(kbytes)	((kbytes) >> 10)
23*4f75eab0Syuzexi #define HPRE_RSA_NCRT_TOTAL_BUF_SIZE(kbytes)	((kbytes) * 4)
24*4f75eab0Syuzexi 
25*4f75eab0Syuzexi enum pkcs_v1_5_pad_type {
26*4f75eab0Syuzexi 	SIGN_PAD = 1,
27*4f75eab0Syuzexi 	ENCRYPT_PAD = 2
28*4f75eab0Syuzexi };
29*4f75eab0Syuzexi 
30*4f75eab0Syuzexi /*
31*4f75eab0Syuzexi  * When the mode is encrypt, the size of the buffer is
32*4f75eab0Syuzexi  * HPRE_RSA_NCRT_TOTAL_BUF_SIZE(kbytes) for both crt and ncrt;
33*4f75eab0Syuzexi  * when the mode is decrypt, the size of the buffer is
34*4f75eab0Syuzexi  * HPRE_RSA_CRT_TOTAL_BUF_SIZE(kbytes) for crt and
35*4f75eab0Syuzexi  * HPRE_RSA_NCRT_TOTAL_BUF_SIZE(kbytes) for ncrt.
36*4f75eab0Syuzexi  */
37*4f75eab0Syuzexi struct hpre_rsa_msg {
38*4f75eab0Syuzexi 	uint8_t *pubkey;
39*4f75eab0Syuzexi 	paddr_t pubkey_dma;
40*4f75eab0Syuzexi 	uint8_t *prikey;
41*4f75eab0Syuzexi 	paddr_t prikey_dma;
42*4f75eab0Syuzexi 	uint8_t *in;
43*4f75eab0Syuzexi 	paddr_t in_dma;
44*4f75eab0Syuzexi 	uint8_t *out;
45*4f75eab0Syuzexi 	paddr_t out_dma;
46*4f75eab0Syuzexi 	uint32_t alg_type;
47*4f75eab0Syuzexi 	uint32_t key_bytes;
48*4f75eab0Syuzexi 	bool is_private;    /* True if private key */
49*4f75eab0Syuzexi };
50*4f75eab0Syuzexi 
51*4f75eab0Syuzexi #endif
52