1*0c05871eSleisen /* SPDX-License-Identifier: BSD-2-Clause */ 2*0c05871eSleisen /* Copyright (c) 2022-2024 HiSilicon Limited. */ 3*0c05871eSleisen 4*0c05871eSleisen #ifndef __SEC_AUTHENC_H__ 5*0c05871eSleisen #define __SEC_AUTHENC_H__ 6*0c05871eSleisen 7*0c05871eSleisen #include <stdbool.h> 8*0c05871eSleisen #include <stdint.h> 9*0c05871eSleisen 10*0c05871eSleisen #include "hisi_qm.h" 11*0c05871eSleisen 12*0c05871eSleisen #define SEC_MAX_AEAD_LENGTH 16777199 13*0c05871eSleisen #define SEC_MIN_AEAD_LENGTH 4 14*0c05871eSleisen #define SEC_TAG_ERR 0x2 15*0c05871eSleisen #define SEC_MIN_GCM_TAG_LEN 8 16*0c05871eSleisen #define SEC_MIN_CCM_TAG_LEN 4 17*0c05871eSleisen #define SEC_MAX_TAG_LEN 16 18*0c05871eSleisen #define SEC_CIPHER_THEN_DIGEST 0 19*0c05871eSleisen #define SEC_DIGEST_THEN_CIPHER 1 20*0c05871eSleisen 21*0c05871eSleisen #define MAX_GCM_AAD_SIZE 65535 22*0c05871eSleisen #define MAX_CCM_AAD_SIZE 65279 23*0c05871eSleisen #define GCM_IV_SIZE 12 24*0c05871eSleisen #define MAX_CCM_NONCE_SIZE 12 25*0c05871eSleisen #define MIN_CCM_NONCE_SIZE 7 26*0c05871eSleisen #define TAG_ALIGN 2 27*0c05871eSleisen #define MAX_KEY_SIZE 32 28*0c05871eSleisen #define MAX_IV_SIZE 16 29*0c05871eSleisen #define NONCE_OFFSET 1 30*0c05871eSleisen #define IV_LAST_BYTE1 15 31*0c05871eSleisen #define IV_LAST_BYTE2 14 32*0c05871eSleisen #define IV_LAST_BYTE3 13 33*0c05871eSleisen #define IV_CTR_INIT 1 34*0c05871eSleisen #define IV_CL_CAL_NUM 14 35*0c05871eSleisen #define IV_CM_CAL_NUM 2 36*0c05871eSleisen #define IV_CL_MASK 0x7 37*0c05871eSleisen #define IV_FLAGS_OFFSET 0x6 38*0c05871eSleisen #define IV_CM_OFFSET 0x3 39*0c05871eSleisen #define IV_LAST_BYTE_MASK 0xFF 40*0c05871eSleisen #define IV_BYTE_OFFSET 0x8 41*0c05871eSleisen #define AAD_NOT_NULL 1 42*0c05871eSleisen 43*0c05871eSleisen struct authenc_ctx { 44*0c05871eSleisen struct hisi_qp *qp; 45*0c05871eSleisen bool encrypt; 46*0c05871eSleisen uint8_t civ[MAX_IV_SIZE]; 47*0c05871eSleisen uint8_t aiv[MAX_IV_SIZE]; 48*0c05871eSleisen uint8_t key[MAX_KEY_SIZE]; 49*0c05871eSleisen uint8_t tag[SEC_MAX_TAG_LEN]; 50*0c05871eSleisen struct drvcrypt_buf aad; 51*0c05871eSleisen struct drvcrypt_buf src; 52*0c05871eSleisen struct drvcrypt_buf dst; 53*0c05871eSleisen 54*0c05871eSleisen uint8_t algo; 55*0c05871eSleisen uint8_t mode; 56*0c05871eSleisen uint32_t result; 57*0c05871eSleisen bool is_hw_supported; 58*0c05871eSleisen struct crypto_authenc_ctx *ae_soft_ctx; 59*0c05871eSleisen size_t src_offset; 60*0c05871eSleisen size_t payload_len; 61*0c05871eSleisen size_t key_len; 62*0c05871eSleisen size_t civ_len; 63*0c05871eSleisen size_t tag_len; 64*0c05871eSleisen uint8_t c_key_len; 65*0c05871eSleisen 66*0c05871eSleisen /* aead dma */ 67*0c05871eSleisen paddr_t key_dma; 68*0c05871eSleisen paddr_t civ_dma; 69*0c05871eSleisen paddr_t aiv_dma; 70*0c05871eSleisen paddr_t src_dma; 71*0c05871eSleisen paddr_t dst_dma; 72*0c05871eSleisen paddr_t tag_dma; 73*0c05871eSleisen }; 74*0c05871eSleisen #endif /* __SEC_AUTHENC_H__ */ 75