xref: /dpdk/drivers/crypto/bcmfs/bcmfs_sym_engine.h (revision 7be78d027918dbc846e502780faf94d5acdf5f75)
1492a19a0SVikas Gupta /* SPDX-License-Identifier: BSD-3-Clause
2492a19a0SVikas Gupta  * Copyright(c) 2020 Broadcom
3492a19a0SVikas Gupta  * All rights reserved.
4492a19a0SVikas Gupta  */
5492a19a0SVikas Gupta 
6492a19a0SVikas Gupta #ifndef _BCMFS_SYM_ENGINE_H_
7492a19a0SVikas Gupta #define _BCMFS_SYM_ENGINE_H_
8492a19a0SVikas Gupta 
9492a19a0SVikas Gupta #include <rte_crypto_sym.h>
10492a19a0SVikas Gupta 
11492a19a0SVikas Gupta #include "bcmfs_dev_msg.h"
12492a19a0SVikas Gupta #include "bcmfs_sym_defs.h"
13492a19a0SVikas Gupta #include "bcmfs_sym_req.h"
14492a19a0SVikas Gupta 
15*7be78d02SJosh Soref /* structure to hold element's attributes */
16492a19a0SVikas Gupta struct fsattr {
17492a19a0SVikas Gupta 	void *va;
18492a19a0SVikas Gupta 	uint64_t pa;
19492a19a0SVikas Gupta 	uint64_t sz;
20492a19a0SVikas Gupta };
21492a19a0SVikas Gupta 
22492a19a0SVikas Gupta #define fsattr_va(__ptr)      ((__ptr)->va)
23492a19a0SVikas Gupta #define fsattr_pa(__ptr)      ((__ptr)->pa)
24492a19a0SVikas Gupta #define fsattr_sz(__ptr)      ((__ptr)->sz)
25492a19a0SVikas Gupta 
26492a19a0SVikas Gupta /*
27492a19a0SVikas Gupta  *  Macros for Crypto h/w constraints
28492a19a0SVikas Gupta  */
29492a19a0SVikas Gupta 
30492a19a0SVikas Gupta #define BCMFS_CRYPTO_AES_BLOCK_SIZE	16
31492a19a0SVikas Gupta #define BCMFS_CRYPTO_AES_MIN_KEY_SIZE	16
32492a19a0SVikas Gupta #define BCMFS_CRYPTO_AES_MAX_KEY_SIZE	32
33492a19a0SVikas Gupta 
34492a19a0SVikas Gupta #define BCMFS_CRYPTO_DES_BLOCK_SIZE	8
35492a19a0SVikas Gupta #define BCMFS_CRYPTO_DES_KEY_SIZE	8
36492a19a0SVikas Gupta 
37492a19a0SVikas Gupta #define BCMFS_CRYPTO_3DES_BLOCK_SIZE	8
38492a19a0SVikas Gupta #define BCMFS_CRYPTO_3DES_KEY_SIZE	(3 * 8)
39492a19a0SVikas Gupta 
40492a19a0SVikas Gupta #define BCMFS_CRYPTO_MD5_DIGEST_SIZE	16
41492a19a0SVikas Gupta #define BCMFS_CRYPTO_MD5_BLOCK_SIZE	64
42492a19a0SVikas Gupta 
43492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA1_DIGEST_SIZE	20
44492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA1_BLOCK_SIZE	64
45492a19a0SVikas Gupta 
46492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA224_DIGEST_SIZE	28
47492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA224_BLOCK_SIZE	64
48492a19a0SVikas Gupta 
49492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA256_DIGEST_SIZE	32
50492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA256_BLOCK_SIZE	64
51492a19a0SVikas Gupta 
52492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA384_DIGEST_SIZE	48
53492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA384_BLOCK_SIZE	128
54492a19a0SVikas Gupta 
55492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA512_DIGEST_SIZE	64
56492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA512_BLOCK_SIZE	128
57492a19a0SVikas Gupta 
58492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE	(224 / 8)
59492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_224_BLOCK_SIZE	(200 - 2 * \
60492a19a0SVikas Gupta 					BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE)
61492a19a0SVikas Gupta 
62492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE	(256 / 8)
63492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_256_BLOCK_SIZE	(200 - 2 * \
64492a19a0SVikas Gupta 					BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE)
65492a19a0SVikas Gupta 
66492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE	(384 / 8)
67492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_384_BLOCK_SIZE	(200 - 2 * \
68492a19a0SVikas Gupta 					BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE)
69492a19a0SVikas Gupta 
70492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE	(512 / 8)
71492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_512_BLOCK_SIZE	(200 - 2 * \
72492a19a0SVikas Gupta 					BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE)
73492a19a0SVikas Gupta 
74492a19a0SVikas Gupta enum bcmfs_crypto_aes_cipher_key {
75492a19a0SVikas Gupta 	BCMFS_CRYPTO_AES128 = 16,
76492a19a0SVikas Gupta 	BCMFS_CRYPTO_AES192 = 24,
77492a19a0SVikas Gupta 	BCMFS_CRYPTO_AES256 = 32,
78492a19a0SVikas Gupta };
79492a19a0SVikas Gupta 
80492a19a0SVikas Gupta int
81492a19a0SVikas Gupta bcmfs_crypto_build_cipher_req(struct bcmfs_sym_request *req,
82492a19a0SVikas Gupta 			      enum rte_crypto_cipher_algorithm c_algo,
83492a19a0SVikas Gupta 			      enum rte_crypto_cipher_operation cop,
84492a19a0SVikas Gupta 			      struct fsattr *src, struct fsattr *dst,
85492a19a0SVikas Gupta 			      struct fsattr *key, struct fsattr *iv);
86492a19a0SVikas Gupta 
87492a19a0SVikas Gupta int
88492a19a0SVikas Gupta bcmfs_crypto_build_auth_req(struct bcmfs_sym_request *req,
89492a19a0SVikas Gupta 			    enum rte_crypto_auth_algorithm a_algo,
90492a19a0SVikas Gupta 			    enum rte_crypto_auth_operation aop,
91492a19a0SVikas Gupta 			    struct fsattr *src, struct fsattr *dst,
92492a19a0SVikas Gupta 			    struct fsattr *mac, struct fsattr *key,
93492a19a0SVikas Gupta 			    struct fsattr *iv);
94492a19a0SVikas Gupta 
95492a19a0SVikas Gupta int
96492a19a0SVikas Gupta bcmfs_crypto_build_chain_request(struct bcmfs_sym_request *req,
97492a19a0SVikas Gupta 				 enum rte_crypto_cipher_algorithm c_algo,
98492a19a0SVikas Gupta 				 enum rte_crypto_cipher_operation cop,
99492a19a0SVikas Gupta 				 enum rte_crypto_auth_algorithm a_algo,
100492a19a0SVikas Gupta 				 enum rte_crypto_auth_operation aop,
101492a19a0SVikas Gupta 				 struct fsattr *src, struct fsattr *dst,
102492a19a0SVikas Gupta 				 struct fsattr *cipher_key,
103492a19a0SVikas Gupta 				 struct fsattr *auth_key,
104492a19a0SVikas Gupta 				 struct fsattr *iv, struct fsattr *aad,
105492a19a0SVikas Gupta 				 struct fsattr *digest, bool cipher_first);
106492a19a0SVikas Gupta 
107492a19a0SVikas Gupta int
108492a19a0SVikas Gupta bcmfs_crypto_build_aead_request(struct bcmfs_sym_request *req,
109492a19a0SVikas Gupta 				enum rte_crypto_aead_algorithm ae_algo,
110492a19a0SVikas Gupta 				enum rte_crypto_aead_operation aeop,
111492a19a0SVikas Gupta 				struct fsattr *src, struct fsattr *dst,
112492a19a0SVikas Gupta 				struct fsattr *key, struct fsattr *iv,
113492a19a0SVikas Gupta 				struct fsattr *aad, struct fsattr *digest);
114492a19a0SVikas Gupta 
115492a19a0SVikas Gupta #endif /* _BCMFS_SYM_ENGINE_H_ */
116