crypto/bcmfs: add crypto HW module
[dpdk.git] / drivers / crypto / bcmfs / bcmfs_sym_engine.h
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 arrtibutes */
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_ */