xref: /dpdk/drivers/crypto/bcmfs/bcmfs_sym_engine.h (revision 7be78d027918dbc846e502780faf94d5acdf5f75)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Broadcom
3  * All rights reserved.
4  */
5 
6 #ifndef _BCMFS_SYM_ENGINE_H_
7 #define _BCMFS_SYM_ENGINE_H_
8 
9 #include <rte_crypto_sym.h>
10 
11 #include "bcmfs_dev_msg.h"
12 #include "bcmfs_sym_defs.h"
13 #include "bcmfs_sym_req.h"
14 
15 /* structure to hold element's attributes */
16 struct fsattr {
17 	void *va;
18 	uint64_t pa;
19 	uint64_t sz;
20 };
21 
22 #define fsattr_va(__ptr)      ((__ptr)->va)
23 #define fsattr_pa(__ptr)      ((__ptr)->pa)
24 #define fsattr_sz(__ptr)      ((__ptr)->sz)
25 
26 /*
27  *  Macros for Crypto h/w constraints
28  */
29 
30 #define BCMFS_CRYPTO_AES_BLOCK_SIZE	16
31 #define BCMFS_CRYPTO_AES_MIN_KEY_SIZE	16
32 #define BCMFS_CRYPTO_AES_MAX_KEY_SIZE	32
33 
34 #define BCMFS_CRYPTO_DES_BLOCK_SIZE	8
35 #define BCMFS_CRYPTO_DES_KEY_SIZE	8
36 
37 #define BCMFS_CRYPTO_3DES_BLOCK_SIZE	8
38 #define BCMFS_CRYPTO_3DES_KEY_SIZE	(3 * 8)
39 
40 #define BCMFS_CRYPTO_MD5_DIGEST_SIZE	16
41 #define BCMFS_CRYPTO_MD5_BLOCK_SIZE	64
42 
43 #define BCMFS_CRYPTO_SHA1_DIGEST_SIZE	20
44 #define BCMFS_CRYPTO_SHA1_BLOCK_SIZE	64
45 
46 #define BCMFS_CRYPTO_SHA224_DIGEST_SIZE	28
47 #define BCMFS_CRYPTO_SHA224_BLOCK_SIZE	64
48 
49 #define BCMFS_CRYPTO_SHA256_DIGEST_SIZE	32
50 #define BCMFS_CRYPTO_SHA256_BLOCK_SIZE	64
51 
52 #define BCMFS_CRYPTO_SHA384_DIGEST_SIZE	48
53 #define BCMFS_CRYPTO_SHA384_BLOCK_SIZE	128
54 
55 #define BCMFS_CRYPTO_SHA512_DIGEST_SIZE	64
56 #define BCMFS_CRYPTO_SHA512_BLOCK_SIZE	128
57 
58 #define BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE	(224 / 8)
59 #define BCMFS_CRYPTO_SHA3_224_BLOCK_SIZE	(200 - 2 * \
60 					BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE)
61 
62 #define BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE	(256 / 8)
63 #define BCMFS_CRYPTO_SHA3_256_BLOCK_SIZE	(200 - 2 * \
64 					BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE)
65 
66 #define BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE	(384 / 8)
67 #define BCMFS_CRYPTO_SHA3_384_BLOCK_SIZE	(200 - 2 * \
68 					BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE)
69 
70 #define BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE	(512 / 8)
71 #define BCMFS_CRYPTO_SHA3_512_BLOCK_SIZE	(200 - 2 * \
72 					BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE)
73 
74 enum bcmfs_crypto_aes_cipher_key {
75 	BCMFS_CRYPTO_AES128 = 16,
76 	BCMFS_CRYPTO_AES192 = 24,
77 	BCMFS_CRYPTO_AES256 = 32,
78 };
79 
80 int
81 bcmfs_crypto_build_cipher_req(struct bcmfs_sym_request *req,
82 			      enum rte_crypto_cipher_algorithm c_algo,
83 			      enum rte_crypto_cipher_operation cop,
84 			      struct fsattr *src, struct fsattr *dst,
85 			      struct fsattr *key, struct fsattr *iv);
86 
87 int
88 bcmfs_crypto_build_auth_req(struct bcmfs_sym_request *req,
89 			    enum rte_crypto_auth_algorithm a_algo,
90 			    enum rte_crypto_auth_operation aop,
91 			    struct fsattr *src, struct fsattr *dst,
92 			    struct fsattr *mac, struct fsattr *key,
93 			    struct fsattr *iv);
94 
95 int
96 bcmfs_crypto_build_chain_request(struct bcmfs_sym_request *req,
97 				 enum rte_crypto_cipher_algorithm c_algo,
98 				 enum rte_crypto_cipher_operation cop,
99 				 enum rte_crypto_auth_algorithm a_algo,
100 				 enum rte_crypto_auth_operation aop,
101 				 struct fsattr *src, struct fsattr *dst,
102 				 struct fsattr *cipher_key,
103 				 struct fsattr *auth_key,
104 				 struct fsattr *iv, struct fsattr *aad,
105 				 struct fsattr *digest, bool cipher_first);
106 
107 int
108 bcmfs_crypto_build_aead_request(struct bcmfs_sym_request *req,
109 				enum rte_crypto_aead_algorithm ae_algo,
110 				enum rte_crypto_aead_operation aeop,
111 				struct fsattr *src, struct fsattr *dst,
112 				struct fsattr *key, struct fsattr *iv,
113 				struct fsattr *aad, struct fsattr *digest);
114 
115 #endif /* _BCMFS_SYM_ENGINE_H_ */
116