/* SPDX-License-Identifier: BSD-3-Clause * Copyright(C) 2019 Marvell International Ltd. */ #ifndef _NITROX_SYM_CTX_H_ #define _NITROX_SYM_CTX_H_ #include #include #define AES_MAX_KEY_SIZE 32 #define AES_BLOCK_SIZE 16 #define AES_GCM_SALT_SIZE 4 enum nitrox_chain { NITROX_CHAIN_CIPHER_ONLY, NITROX_CHAIN_CIPHER_AUTH, NITROX_CHAIN_AUTH_CIPHER, NITROX_CHAIN_COMBINED, NITROX_CHAIN_NOT_SUPPORTED }; enum nitrox_op { NITROX_OP_ENCRYPT, NITROX_OP_DECRYPT, }; struct crypto_keys { uint8_t key[AES_MAX_KEY_SIZE]; uint8_t iv[AES_BLOCK_SIZE]; }; struct auth_keys { uint8_t ipad[64]; uint8_t opad[64]; }; struct flexi_crypto_context { union { uint64_t flags; struct { #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN uint64_t cipher_type : 4; uint64_t reserved_59 : 1; uint64_t aes_keylen : 2; uint64_t iv_source : 1; uint64_t hash_type : 4; uint64_t reserved_49_51 : 3; uint64_t auth_input_type : 1; uint64_t mac_len : 8; uint64_t reserved_0_39 : 40; #else uint64_t reserved_0_39 : 40; uint64_t mac_len : 8; uint64_t auth_input_type : 1; uint64_t reserved_49_51 : 3; uint64_t hash_type : 4; uint64_t iv_source : 1; uint64_t aes_keylen : 2; uint64_t reserved_59 : 1; uint64_t cipher_type : 4; #endif } w0; }; struct crypto_keys crypto; struct auth_keys auth; }; struct nitrox_crypto_ctx { struct flexi_crypto_context fctx; enum nitrox_chain nitrox_chain; struct { uint16_t offset; uint16_t length; } iv; rte_iova_t iova; uint8_t salt[AES_GCM_SALT_SIZE]; uint16_t digest_length; uint16_t aad_length; uint8_t opcode; uint8_t req_op; }; #endif /* _NITROX_SYM_CTX_H_ */