1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2020 Broadcom
6 #ifndef _BCMFS_SYM_ENGINE_H_
7 #define _BCMFS_SYM_ENGINE_H_
9 #include <rte_crypto_sym.h>
11 #include "bcmfs_dev_msg.h"
12 #include "bcmfs_sym_defs.h"
13 #include "bcmfs_sym_req.h"
15 /* structure to hold element's attributes */
22 #define fsattr_va(__ptr) ((__ptr)->va)
23 #define fsattr_pa(__ptr) ((__ptr)->pa)
24 #define fsattr_sz(__ptr) ((__ptr)->sz)
27 * Macros for Crypto h/w constraints
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
34 #define BCMFS_CRYPTO_DES_BLOCK_SIZE 8
35 #define BCMFS_CRYPTO_DES_KEY_SIZE 8
37 #define BCMFS_CRYPTO_3DES_BLOCK_SIZE 8
38 #define BCMFS_CRYPTO_3DES_KEY_SIZE (3 * 8)
40 #define BCMFS_CRYPTO_MD5_DIGEST_SIZE 16
41 #define BCMFS_CRYPTO_MD5_BLOCK_SIZE 64
43 #define BCMFS_CRYPTO_SHA1_DIGEST_SIZE 20
44 #define BCMFS_CRYPTO_SHA1_BLOCK_SIZE 64
46 #define BCMFS_CRYPTO_SHA224_DIGEST_SIZE 28
47 #define BCMFS_CRYPTO_SHA224_BLOCK_SIZE 64
49 #define BCMFS_CRYPTO_SHA256_DIGEST_SIZE 32
50 #define BCMFS_CRYPTO_SHA256_BLOCK_SIZE 64
52 #define BCMFS_CRYPTO_SHA384_DIGEST_SIZE 48
53 #define BCMFS_CRYPTO_SHA384_BLOCK_SIZE 128
55 #define BCMFS_CRYPTO_SHA512_DIGEST_SIZE 64
56 #define BCMFS_CRYPTO_SHA512_BLOCK_SIZE 128
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)
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)
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)
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)
74 enum bcmfs_crypto_aes_cipher_key {
75 BCMFS_CRYPTO_AES128 = 16,
76 BCMFS_CRYPTO_AES192 = 24,
77 BCMFS_CRYPTO_AES256 = 32,
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);
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,
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);
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);
115 #endif /* _BCMFS_SYM_ENGINE_H_ */