xref: /dpdk/drivers/crypto/nitrox/nitrox_sym_ctx.h (revision 60531a2c53f4d2b4b96ebb10ca813f62d0a5508d)
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