1 /***************************************************************************//**
2 * \file cy_crypto_config.h
3 * \version 2.120
4 *
5 * \brief
6 *  This file provides default configuration parameters
7 *  for the Crypto driver.
8 *
9 ********************************************************************************
10 * Copyright 2016-2022 Cypress Semiconductor Corporation
11 * SPDX-License-Identifier: Apache-2.0
12 *
13 * Licensed under the Apache License, Version 2.0 (the "License");
14 * you may not use this file except in compliance with the License.
15 * You may obtain a copy of the License at
16 *
17 *    http://www.apache.org/licenses/LICENSE-2.0
18 *
19 * Unless required by applicable law or agreed to in writing, software
20 * distributed under the License is distributed on an "AS IS" BASIS,
21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 * See the License for the specific language governing permissions and
23 * limitations under the License.
24 *******************************************************************************/
25 
26 
27 #if !defined(CY_CRYPTO_CONFIG_H)
28 #define CY_CRYPTO_CONFIG_H
29 
30 #include "cy_device.h"
31 #include "cy_device_headers.h"
32 
33 #if defined (CY_IP_MXCRYPTO)
34 
35 #include "cy_syslib.h"
36 
37 CY_MISRA_DEVIATE_BLOCK_START('MISRA C-2012 Rule 20.5', 2, \
38 'Since hardware configurations are decided by CRYPTO hardware IP version, use of #undef will not make it ambiguous that which macros exist at a particular point within a translation unit.')
39 
40 #if defined(CY_CRYPTO_USER_CONFIG_FILE)
41 #include CY_CRYPTO_USER_CONFIG_FILE
42 #else
43 
44 /*
45  * Use hardware specific model instead of PDL device agnostic model.
46  *   Disabled by default.
47  */
48 #define CY_CRYPTO_CFG_HW_USE_MPN_SPECIFIC
49 
50 /* CRYPTO hardware version 1 support */
51 #define CY_CRYPTO_CFG_HW_V1_ENABLE
52 
53 /* CRYPTO hardware version 2 support */
54 #define CY_CRYPTO_CFG_HW_V2_ENABLE
55 
56 /* Default configuration:
57  *
58  * - SHA1
59  * - SHA256
60  * - SHA512
61  * - HMAC
62  * - AES ECB
63  * - AES CBC
64  * - AES CFB
65  * - AES CTR
66  * - CMAC
67  * - CRC
68  * - PRNG
69  * - TRNG
70  * - DES/TDES
71  * - RSA encrypt/decrypt
72  * - RSA PKCS#1.l5 verification
73  * - ECP multiplication
74  * - ECDSA key generation
75  * - ECDSA sign
76  * - ECDSA verification
77  */
78 
79 #define CY_CRYPTO_CFG_CRC_C
80 #define CY_CRYPTO_CFG_DES_C
81 #define CY_CRYPTO_CFG_PRNG_C
82 #define CY_CRYPTO_CFG_TRNG_C
83 
84 /* Currently this driver supports CBC, CFB, CTR cipher modes */
85 #define CY_CRYPTO_CFG_AES_C
86 #define CY_CRYPTO_CFG_CMAC_C
87 #define CY_CRYPTO_CFG_GCM_C
88 #define CY_CRYPTO_CFG_CCM_C
89 #define CY_CRYPTO_CFG_CBC_MAC_C
90 
91 
92 /* AES Cipher modes */
93 #define CY_CRYPTO_CFG_CIPHER_MODE_CBC
94 #define CY_CRYPTO_CFG_CIPHER_MODE_CFB
95 #define CY_CRYPTO_CFG_CIPHER_MODE_CTR
96 
97 /* Currently OFB, XTS cipher modes are not implemented */
98 // #define CY_CRYPTO_CFG_CIPHER_MODE_OFB
99 // #define CY_CRYPTO_CFG_CIPHER_MODE_XTS
100 
101 #define CY_CRYPTO_CFG_SHA_C
102 #define CY_CRYPTO_CFG_HMAC_C
103 #define CY_CRYPTO_CFG_HKDF_C
104 
105 #define CY_CRYPTO_CFG_SHA1_ENABLED
106 #define CY_CRYPTO_CFG_SHA2_256_ENABLED
107 #define CY_CRYPTO_CFG_SHA2_512_ENABLED
108 #define CY_CRYPTO_CFG_SHA3_ENABLED
109 
110 /* RSA functionality */
111 #define CY_CRYPTO_CFG_RSA_C
112 /* RSA PKCS 1.5 verification */
113 #define CY_CRYPTO_CFG_RSA_VERIFY_ENABLED
114 
115 /* RSA PKCS 1.5 signing */
116 #define CY_CRYPTO_CFG_RSA_SIGN_ENABLED
117 
118 /* Only NIST-P curves are currently supported */
119 #define CY_CRYPTO_CFG_ECP_C
120 
121 #define CY_CRYPTO_CFG_ECP_DP_SECP192R1_ENABLED
122 #define CY_CRYPTO_CFG_ECP_DP_SECP224R1_ENABLED
123 #define CY_CRYPTO_CFG_ECP_DP_SECP256R1_ENABLED
124 #define CY_CRYPTO_CFG_ECP_DP_SECP384R1_ENABLED
125 #define CY_CRYPTO_CFG_ECP_DP_SECP521R1_ENABLED
126 #define CY_CRYPTO_CFG_ECP_DP_ED25519_ENABLED
127 
128 /* Currently CURVE25519 support is not implemented */
129 // #define CY_CRYPTO_CFG_ECP_DP_CURVE25519_ENABLED
130 
131 /* ECDSA functionality */
132 #define CY_CRYPTO_CFG_ECDSA_C
133 
134 /* ECDSA key generation */
135 #define CY_CRYPTO_CFG_ECDSA_GENKEY_C
136 /* ECDSA sign */
137 #define CY_CRYPTO_CFG_ECDSA_SIGN_C
138 /* ECDSA verification */
139 #define CY_CRYPTO_CFG_ECDSA_VERIFY_C
140 /* EDDSA functionality */
141 #define CY_CRYPTO_CFG_EDDSA_C
142 /* EDDSA sign */
143 #define CY_CRYPTO_CFG_EDDSA_SIGN_C
144 /* EDDSA verify */
145 #define CY_CRYPTO_CFG_EDDSA_VERIFY_C
146 /* EDDSA key generation */
147 #define CY_CRYPTO_CFG_EDDSA_GENKEY_C
148 
149 /* External memory use */
150 //#define CY_CRYPTO_CFG_EXTERNAL_MEMORY_ENABLE
151 
152 #if (CY_IP_MXCRYPTO_VERSION == 2u)
153 /* Disabled chacha20 functionality */
154 //#define CY_CRYPTO_CFG_CHACHA_ENABLED
155 
156 /* Disabled poly1305 functionality */
157 //#define CY_CRYPTO_CFG_POLY1305_ENABLED
158 #endif
159 
160 #endif
161 
162 /* Check hardware configuration */
163 #if defined(CY_CRYPTO_CFG_HW_USE_MPN_SPECIFIC)
164      #undef CY_CRYPTO_CFG_HW_V1_ENABLE
165      #undef CY_CRYPTO_CFG_HW_V2_ENABLE
166 
167      #if (CY_IP_MXCRYPTO_VERSION == 1u)
168      /* CRYPTO hardware version 1 support */
169      #define CY_CRYPTO_CFG_HW_V1_ENABLE
170      #endif
171 
172      #if (CY_IP_MXCRYPTO_VERSION == 2u)
173      /* CRYPTO hardware version 2 support */
174      #define CY_CRYPTO_CFG_HW_V2_ENABLE
175      #endif
176 #else
177      #if !defined(CY_CRYPTO_CFG_HW_V1_ENABLE) && !defined(CY_CRYPTO_CFG_HW_V2_ENABLE)
178      #error "Select proper hardware configuration (CY_CRYPTO_CFG_HW_V1_ENABLE or CY_CRYPTO_CFG_HW_V2_ENABLE)"
179      #endif /* !defined(CY_CRYPTO_CFG_HW_V1_ENABLE) && !defined(CY_CRYPTO_CFG_HW_V2_ENABLE) */
180 
181 #endif
182 
183 /* Check AES configuration */
184 #if (defined(CY_CRYPTO_CFG_CIPHER_MODE_CBC) || \
185      defined(CY_CRYPTO_CFG_CIPHER_MODE_CFB) || \
186      defined(CY_CRYPTO_CFG_CIPHER_MODE_CTR)) \
187      && !defined(CY_CRYPTO_CFG_AES_C)
188 #error "CY_CRYPTO_CFG_AES_C is not defined to use any AES ciphers"
189 #endif
190 
191 /* Check CMAC configuration */
192 #if defined(CY_CRYPTO_CFG_CMAC_C) && !defined(CY_CRYPTO_CFG_AES_C)
193 #error "CY_CRYPTO_CFG_AES_C is not defined to use CMAC calculation"
194 #endif /* defined(CY_CRYPTO_CFG_CMAC_C) && !defined(CY_CRYPTO_CFG_AES_C) */
195 
196 /* Check CBC-MAC configuration */
197 #if defined(CY_CRYPTO_CFG_CBC_MAC_C) && !defined(CY_CRYPTO_CFG_CIPHER_MODE_CBC)
198 #error "CY_CRYPTO_CFG_CIPHER_MODE_CBC is not defined to use CBC-MAC calculation"
199 #endif /* defined(CY_CRYPTO_CFG_CBC_MAC_C) && !defined(CY_CRYPTO_CFG_CIPHER_MODE_CBC) */
200 
201 /* Check GCM configuration */
202 #if defined(CY_CRYPTO_CFG_GCM_C) && !defined(CY_CRYPTO_CFG_AES_C)
203 #error "CY_CRYPTO_CFG_AES_C is not defined to use GCM calculation"
204 #endif /* defined(CY_CRYPTO_CFG_GCM_C) && !defined(CY_CRYPTO_CFG_AES_C) */
205 
206 /* Check SHA configuration */
207 #if (defined(CY_CRYPTO_CFG_SHA1_ENABLED) || \
208      defined(CY_CRYPTO_CFG_SHA2_256_ENABLED) || \
209      defined(CY_CRYPTO_CFG_SHA2_512_ENABLED) || \
210      defined(CY_CRYPTO_CFG_SHA3_ENABLED)) \
211      && !defined(CY_CRYPTO_CFG_SHA_C)
212 #error "CY_CRYPTO_CFG_SHA_C is not defined to use SHA digests"
213 #endif
214 
215 #if defined(CY_CRYPTO_CFG_SHA_C) && (!defined(CY_CRYPTO_CFG_SHA1_ENABLED) && \
216      !defined(CY_CRYPTO_CFG_SHA2_256_ENABLED) && !defined(CY_CRYPTO_CFG_SHA3_ENABLED)  &&\
217      !defined(CY_CRYPTO_CFG_SHA2_512_ENABLED))
218 #error "CY_CRYPTO_CFG_SHA_C is defined but no SHA mode is selected"
219 #endif
220 
221 
222 /* Check HMAC configuration */
223 #if defined(CY_CRYPTO_CFG_HMAC_C) && !defined(CY_CRYPTO_CFG_SHA_C)
224 #error "CY_CRYPTO_CFG_SHA_C is not defined to use HMAC calculation"
225 #endif /* defined(CY_CRYPTO_CFG_HMAC_C) && !defined(CY_CRYPTO_CFG_SHA_C) */
226 
227 /* Check HKDF configuration */
228 #if defined(CY_CRYPTO_CFG_HKDF_C) && (!defined(CY_CRYPTO_CFG_HMAC_C) || !defined(CY_CRYPTO_CFG_SHA_C))
229 #error "CY_CRYPTO_CFG_HMAC_C & CY_CRYPTO_CFG_SHA_C is not defined to use HKDF calculation"
230 #endif /* defined(CY_CRYPTO_CFG_HKDF_C) && (!defined(CY_CRYPTO_CFG_HMAC_C) || !defined(CY_CRYPTO_CFG_SHA_C)) */
231 
232 /* Check RSA verify configuration */
233 #if defined(CY_CRYPTO_CFG_RSA_VERIFY_ENABLED) && !defined(CY_CRYPTO_CFG_RSA_C)
234 #error "CY_CRYPTO_CFG_RSA_C is not defined to use RSA verification functionality"
235 #endif
236 
237 #if defined(CY_CRYPTO_CFG_RSA_VERIFY_ENABLED) && !defined(CY_CRYPTO_CFG_SHA_C)
238 #error "CY_CRYPTO_CFG_SHA_C is not defined to use RSA verification functionality"
239 #endif
240 
241 /* Check ECDSA configuration */
242 #if (defined(CY_CRYPTO_CFG_ECDSA_GENKEY_C) || defined(CY_CRYPTO_CFG_ECDSA_SIGN_C) || \
243      defined(CY_CRYPTO_CFG_ECDSA_VERIFY_C)) && !defined(CY_CRYPTO_CFG_ECDSA_C)
244 #error "CY_CRYPTO_CFG_ECDSA_C is not defined to use ECDSA functionalities"
245 #endif
246 
247 #if !(defined(CY_CRYPTO_CFG_ECDSA_GENKEY_C) || defined(CY_CRYPTO_CFG_ECDSA_SIGN_C) || \
248      defined(CY_CRYPTO_CFG_ECDSA_VERIFY_C)) && defined(CY_CRYPTO_CFG_ECDSA_C)
249 #error "CY_CRYPTO_CFG_ECDSA_C is defined but no ECDSA functionality is selected"
250 #endif
251 
252 #if defined(CY_CRYPTO_CFG_ECDSA_C) && !defined(CY_CRYPTO_CFG_ECP_C)
253 #define CY_CRYPTO_CFG_ECP_C
254 #endif /* defined(CY_CRYPTO_CFG_ECDSA_C) && !defined(CY_CRYPTO_CFG_ECP_C) */
255 
256 /* Check ECP configuration */
257 #if !(defined(CY_CRYPTO_CFG_ECP_DP_SECP192R1_ENABLED) || \
258      defined(CY_CRYPTO_CFG_ECP_DP_SECP224R1_ENABLED) || \
259      defined(CY_CRYPTO_CFG_ECP_DP_SECP256R1_ENABLED) || \
260      defined(CY_CRYPTO_CFG_ECP_DP_SECP384R1_ENABLED) || \
261      defined(CY_CRYPTO_CFG_ECP_DP_SECP521R1_ENABLED)) \
262      && defined(CY_CRYPTO_CFG_ECP_C)
263 #error "CY_CRYPTO_CFG_ECP_C is defined but no curve is selected"
264 #endif
265 
266 #if (defined(CY_CRYPTO_CFG_ECP_DP_SECP192R1_ENABLED) || \
267      defined(CY_CRYPTO_CFG_ECP_DP_SECP224R1_ENABLED) || \
268      defined(CY_CRYPTO_CFG_ECP_DP_SECP256R1_ENABLED) || \
269      defined(CY_CRYPTO_CFG_ECP_DP_SECP384R1_ENABLED) || \
270      defined(CY_CRYPTO_CFG_ECP_DP_SECP521R1_ENABLED)) \
271      && !defined(CY_CRYPTO_CFG_ECP_C)
272 #error "CY_CRYPTO_CFG_ECP_C is not defined to use ECP functionality"
273 #endif
274 
275 #if defined(CY_CRYPTO_CFG_CHACHA_ENABLED) && defined(CY_CRYPTO_CFG_HW_V1_ENABLE)
276 #error "CHACHA functionality is not available in HW_V1"
277 #endif
278 
279 CY_MISRA_BLOCK_END('MISRA C-2012 Rule 20.5')
280 
281 #endif /* CY_IP_MXCRYPTO */
282 
283 #endif /* #if !defined(CY_CRYPTO_CONFIG_H) */
284 
285 /* [] END OF FILE */
286