1cafd2703SNagadheeraj Rottela /* SPDX-License-Identifier: BSD-3-Clause 2cafd2703SNagadheeraj Rottela * Copyright(C) 2019 Marvell International Ltd. 3cafd2703SNagadheeraj Rottela */ 4cafd2703SNagadheeraj Rottela 5cafd2703SNagadheeraj Rottela #ifndef _NITROX_SYM_CTX_H_ 6cafd2703SNagadheeraj Rottela #define _NITROX_SYM_CTX_H_ 7cafd2703SNagadheeraj Rottela 8cafd2703SNagadheeraj Rottela #include <stdbool.h> 9cafd2703SNagadheeraj Rottela 10cafd2703SNagadheeraj Rottela #include <rte_crypto.h> 11cafd2703SNagadheeraj Rottela 12cafd2703SNagadheeraj Rottela #define AES_MAX_KEY_SIZE 32 13cafd2703SNagadheeraj Rottela #define AES_BLOCK_SIZE 16 1493ba4a6eSNagadheeraj Rottela #define AES_GCM_SALT_SIZE 4 15cafd2703SNagadheeraj Rottela 16cafd2703SNagadheeraj Rottela enum nitrox_chain { 17cafd2703SNagadheeraj Rottela NITROX_CHAIN_CIPHER_ONLY, 18cafd2703SNagadheeraj Rottela NITROX_CHAIN_CIPHER_AUTH, 19cafd2703SNagadheeraj Rottela NITROX_CHAIN_AUTH_CIPHER, 20cafd2703SNagadheeraj Rottela NITROX_CHAIN_COMBINED, 21cafd2703SNagadheeraj Rottela NITROX_CHAIN_NOT_SUPPORTED 22cafd2703SNagadheeraj Rottela }; 23cafd2703SNagadheeraj Rottela 24cafd2703SNagadheeraj Rottela enum nitrox_op { 25cafd2703SNagadheeraj Rottela NITROX_OP_ENCRYPT, 26cafd2703SNagadheeraj Rottela NITROX_OP_DECRYPT, 27cafd2703SNagadheeraj Rottela }; 28cafd2703SNagadheeraj Rottela 29cafd2703SNagadheeraj Rottela struct crypto_keys { 30cafd2703SNagadheeraj Rottela uint8_t key[AES_MAX_KEY_SIZE]; 31cafd2703SNagadheeraj Rottela uint8_t iv[AES_BLOCK_SIZE]; 32cafd2703SNagadheeraj Rottela }; 33cafd2703SNagadheeraj Rottela 34cafd2703SNagadheeraj Rottela struct auth_keys { 35cafd2703SNagadheeraj Rottela uint8_t ipad[64]; 36cafd2703SNagadheeraj Rottela uint8_t opad[64]; 37cafd2703SNagadheeraj Rottela }; 38cafd2703SNagadheeraj Rottela 39cafd2703SNagadheeraj Rottela struct flexi_crypto_context { 40cafd2703SNagadheeraj Rottela union { 41cafd2703SNagadheeraj Rottela uint64_t flags; 42cafd2703SNagadheeraj Rottela struct { 43cafd2703SNagadheeraj Rottela #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN 44cafd2703SNagadheeraj Rottela uint64_t cipher_type : 4; 45cafd2703SNagadheeraj Rottela uint64_t reserved_59 : 1; 46cafd2703SNagadheeraj Rottela uint64_t aes_keylen : 2; 47cafd2703SNagadheeraj Rottela uint64_t iv_source : 1; 48cafd2703SNagadheeraj Rottela uint64_t hash_type : 4; 49cafd2703SNagadheeraj Rottela uint64_t reserved_49_51 : 3; 50cafd2703SNagadheeraj Rottela uint64_t auth_input_type : 1; 51cafd2703SNagadheeraj Rottela uint64_t mac_len : 8; 52cafd2703SNagadheeraj Rottela uint64_t reserved_0_39 : 40; 53cafd2703SNagadheeraj Rottela #else 54cafd2703SNagadheeraj Rottela uint64_t reserved_0_39 : 40; 55cafd2703SNagadheeraj Rottela uint64_t mac_len : 8; 56cafd2703SNagadheeraj Rottela uint64_t auth_input_type : 1; 57cafd2703SNagadheeraj Rottela uint64_t reserved_49_51 : 3; 58cafd2703SNagadheeraj Rottela uint64_t hash_type : 4; 59cafd2703SNagadheeraj Rottela uint64_t iv_source : 1; 60cafd2703SNagadheeraj Rottela uint64_t aes_keylen : 2; 61cafd2703SNagadheeraj Rottela uint64_t reserved_59 : 1; 62cafd2703SNagadheeraj Rottela uint64_t cipher_type : 4; 63cafd2703SNagadheeraj Rottela #endif 64cafd2703SNagadheeraj Rottela } w0; 65cafd2703SNagadheeraj Rottela }; 66cafd2703SNagadheeraj Rottela struct crypto_keys crypto; 67cafd2703SNagadheeraj Rottela struct auth_keys auth; 68cafd2703SNagadheeraj Rottela }; 69cafd2703SNagadheeraj Rottela 70cafd2703SNagadheeraj Rottela struct nitrox_crypto_ctx { 71cafd2703SNagadheeraj Rottela struct flexi_crypto_context fctx; 72cafd2703SNagadheeraj Rottela enum nitrox_chain nitrox_chain; 73*60531a2cSNagadheeraj Rottela enum rte_crypto_aead_algorithm aead_algo; 74cafd2703SNagadheeraj Rottela struct { 75cafd2703SNagadheeraj Rottela uint16_t offset; 76cafd2703SNagadheeraj Rottela uint16_t length; 77cafd2703SNagadheeraj Rottela } iv; 78cafd2703SNagadheeraj Rottela rte_iova_t iova; 7993ba4a6eSNagadheeraj Rottela uint8_t salt[AES_GCM_SALT_SIZE]; 80cafd2703SNagadheeraj Rottela uint16_t digest_length; 8193ba4a6eSNagadheeraj Rottela uint16_t aad_length; 82cafd2703SNagadheeraj Rottela uint8_t opcode; 83cafd2703SNagadheeraj Rottela uint8_t req_op; 84cafd2703SNagadheeraj Rottela }; 85cafd2703SNagadheeraj Rottela 86cafd2703SNagadheeraj Rottela #endif /* _NITROX_SYM_CTX_H_ */ 87