xref: /optee_os/core/drivers/crypto/hisilicon/sec_cipher.h (revision 562874beda99c45a47e8e1927a832ba33c65bc11)
1*562874beSleisen /* SPDX-License-Identifier: BSD-2-Clause */
2*562874beSleisen /* Copyright (c) 2022-2024 HiSilicon Limited. */
3*562874beSleisen 
4*562874beSleisen #ifndef __SEC_CIPHER_H__
5*562874beSleisen #define __SEC_CIPHER_H__
6*562874beSleisen 
7*562874beSleisen #include <stdbool.h>
8*562874beSleisen #include <stdint.h>
9*562874beSleisen 
10*562874beSleisen #include "hisi_qm.h"
11*562874beSleisen 
12*562874beSleisen #define DES_KEY_SIZE			8
13*562874beSleisen #define SEC_3DES_2KEY_SIZE		(2 * DES_KEY_SIZE)
14*562874beSleisen #define SEC_3DES_3KEY_SIZE		(3 * DES_KEY_SIZE)
15*562874beSleisen #define SEC_SM4_XTS_KEY_SIZE		32
16*562874beSleisen #define SEC_SM4_ECB_KEY_SIZE		16
17*562874beSleisen #define SEC_MAX_CIPHER_KEY_SIZE		64
18*562874beSleisen #define MAX_CIPHER_LENGTH		16776704
19*562874beSleisen #define MIN_CIPHER_LENGTH		16
20*562874beSleisen #define XTS_KEYSIZE_128			32
21*562874beSleisen #define XTS_KEYSIZE_256			64
22*562874beSleisen #define DES_CBC_IV_SIZE			8
23*562874beSleisen #define AES_SM4_IV_SIZE			16
24*562874beSleisen #define SEC_MAX_IV_SIZE			2
25*562874beSleisen #define CTR_MODE_LEN_SHIFT		4
26*562874beSleisen #define CTR_128BIT_COUNTER		16
27*562874beSleisen #define AES_SM4_BLOCK_SIZE		16
28*562874beSleisen #define LEFT_MOST_BIT			7
29*562874beSleisen #define CTR_SRC_ALIGN_MASK		0xf
30*562874beSleisen #define CTR_SRC_BLOCK_SIZE		0x10
31*562874beSleisen 
32*562874beSleisen #define CKEY_LEN_128_BIT		0x1
33*562874beSleisen #define CKEY_LEN_192_BIT		0x2
34*562874beSleisen #define CKEY_LEN_256_BIT		0x3
35*562874beSleisen #define CKEY_LEN_SM4			0x0
36*562874beSleisen #define CKEY_LEN_DES			0x1
37*562874beSleisen #define CKEY_LEN_3DES_3KEY		0x1
38*562874beSleisen #define CKEY_LEN_3DES_2KEY		0x3
39*562874beSleisen 
40*562874beSleisen enum sec_c_alg {
41*562874beSleisen 	C_ALG_DES = 0x0,
42*562874beSleisen 	C_ALG_3DES = 0x1,
43*562874beSleisen 	C_ALG_AES = 0x2,
44*562874beSleisen 	C_ALG_SM4 = 0x3,
45*562874beSleisen };
46*562874beSleisen 
47*562874beSleisen enum sec_c_mode {
48*562874beSleisen 	C_MODE_ECB = 0x0,
49*562874beSleisen 	C_MODE_CBC = 0x1,
50*562874beSleisen 	C_MODE_CFB = 0x2,
51*562874beSleisen 	C_MODE_OFB = 0x3,
52*562874beSleisen 	C_MODE_CTR = 0x4,
53*562874beSleisen 	C_MODE_CCM = 0x5,
54*562874beSleisen 	C_MODE_GCM = 0x6,
55*562874beSleisen 	C_MODE_XTS = 0x7,
56*562874beSleisen 	C_MODE_CTS = 0x9,
57*562874beSleisen };
58*562874beSleisen 
59*562874beSleisen enum sec_cipher_dir {
60*562874beSleisen 	NO_CIPHER,
61*562874beSleisen 	CIPHER_ENCRYPT,
62*562874beSleisen 	CIPHER_DECRYPT,
63*562874beSleisen 	HARDWARE_COPY,
64*562874beSleisen };
65*562874beSleisen 
66*562874beSleisen struct sec_cipher_ctx {
67*562874beSleisen 	uint8_t key[SEC_MAX_CIPHER_KEY_SIZE];
68*562874beSleisen 	uint64_t iv[SEC_MAX_IV_SIZE];
69*562874beSleisen 	uint64_t key_dma;
70*562874beSleisen 	uint64_t iv_dma;
71*562874beSleisen 	uint8_t *in;
72*562874beSleisen 	uint64_t in_dma;
73*562874beSleisen 	uint8_t *out;
74*562874beSleisen 	uint64_t out_dma;
75*562874beSleisen 	struct hisi_qp *qp;
76*562874beSleisen 	size_t offs;
77*562874beSleisen 	uint32_t len;
78*562874beSleisen 	uint8_t alg;
79*562874beSleisen 	uint8_t mode;
80*562874beSleisen 	uint8_t iv_len;
81*562874beSleisen 	uint8_t key_len;
82*562874beSleisen 	uint8_t c_key_len;
83*562874beSleisen 	bool encrypt;
84*562874beSleisen };
85*562874beSleisen #endif /* __SEC_CIPHER_H__ */
86