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