blob: 4f5cd90e0e0afa18a21a77bd69e709078bf921d0 [file] [log] [blame]
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +01001From f80c7d78790db53422cf7d2347187033e7fbfd42 Mon Sep 17 00:00:00 2001
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01002From: Antonio de Angelis <Antonio.deAngelis@arm.com>
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +01003Date: Sat, 30 Sep 2023 22:51:48 +0100
4Subject: [PATCH 5/6] Hardcode CC3XX entry points
Antonio de Angelis86b98312021-12-17 21:42:40 +01005
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01006Manually hardcode PSA driver entry points for the CC3XX driver
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +01007into psa crypto driver wrappers file (and provide missing entry point
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01008definitions if any). This is a temporary solution until the codegen
9framework is available for automatic integration.
Summer Qin36f79f72022-07-05 14:53:35 +080010
Antonio de Angelis86b98312021-12-17 21:42:40 +010011Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
12---
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010013 .../psa/crypto_driver_contexts_composites.h | 10 +
14 .../psa/crypto_driver_contexts_primitives.h | 10 +
15 library/psa_crypto_driver_wrappers.h | 421 ++++++++++++++++--
16 .../psa_crypto_driver_wrappers_no_static.c | 24 +
17 4 files changed, 435 insertions(+), 30 deletions(-)
Antonio de Angelis86b98312021-12-17 21:42:40 +010018
19diff --git a/include/psa/crypto_driver_contexts_composites.h b/include/psa/crypto_driver_contexts_composites.h
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010020index d0188647..9da29765 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010021--- a/include/psa/crypto_driver_contexts_composites.h
22+++ b/include/psa/crypto_driver_contexts_composites.h
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010023@@ -42,6 +42,10 @@
Antonio de Angelis86b98312021-12-17 21:42:40 +010024 /* Include the context structure definitions for those drivers that were
25 * declared during the autogeneration process. */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010026
Antonio de Angelis86b98312021-12-17 21:42:40 +010027+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
28+#include "cc3xx_crypto_primitives_private.h"
29+#endif
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010030+
Antonio de Angelis86b98312021-12-17 21:42:40 +010031 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
32 #include <libtestdriver1/include/psa/crypto.h>
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010033 #endif
34@@ -130,6 +134,9 @@ typedef union {
Antonio de Angelis86b98312021-12-17 21:42:40 +010035 mbedtls_transparent_test_driver_mac_operation_t transparent_test_driver_ctx;
36 mbedtls_opaque_test_driver_mac_operation_t opaque_test_driver_ctx;
37 #endif
38+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
39+ cc3xx_mac_operation_t cc3xx_driver_ctx;
40+#endif
41 } psa_driver_mac_context_t;
42
43 typedef union {
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010044@@ -138,6 +145,9 @@ typedef union {
Antonio de Angelis86b98312021-12-17 21:42:40 +010045 #if defined(PSA_CRYPTO_DRIVER_TEST)
46 mbedtls_transparent_test_driver_aead_operation_t transparent_test_driver_ctx;
47 #endif
48+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
49+ cc3xx_aead_operation_t cc3xx_driver_ctx;
50+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
51 } psa_driver_aead_context_t;
52
Summer Qind635cd02023-03-31 18:07:38 +080053 typedef union {
Antonio de Angelis86b98312021-12-17 21:42:40 +010054diff --git a/include/psa/crypto_driver_contexts_primitives.h b/include/psa/crypto_driver_contexts_primitives.h
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010055index b27a768e..dd657029 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010056--- a/include/psa/crypto_driver_contexts_primitives.h
57+++ b/include/psa/crypto_driver_contexts_primitives.h
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010058@@ -41,6 +41,10 @@
Antonio de Angelis86b98312021-12-17 21:42:40 +010059 /* Include the context structure definitions for those drivers that were
60 * declared during the autogeneration process. */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010061
Antonio de Angelis86b98312021-12-17 21:42:40 +010062+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
63+#include "cc3xx_crypto_primitives_private.h"
64+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010065+
Antonio de Angelis86b98312021-12-17 21:42:40 +010066 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
67 #include <libtestdriver1/include/psa/crypto.h>
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010068 #endif
69@@ -102,6 +106,9 @@ typedef union {
Antonio de Angelis86b98312021-12-17 21:42:40 +010070 #if defined(PSA_CRYPTO_DRIVER_TEST)
71 mbedtls_transparent_test_driver_hash_operation_t test_driver_ctx;
72 #endif
73+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
74+ cc3xx_hash_operation_t cc3xx_driver_ctx;
75+#endif
76 } psa_driver_hash_context_t;
77
78 typedef union {
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010079@@ -111,6 +118,9 @@ typedef union {
Antonio de Angelis86b98312021-12-17 21:42:40 +010080 mbedtls_transparent_test_driver_cipher_operation_t transparent_test_driver_ctx;
81 mbedtls_opaque_test_driver_cipher_operation_t opaque_test_driver_ctx;
82 #endif
83+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
84+ cc3xx_cipher_operation_t cc3xx_driver_ctx;
85+#endif
86 } psa_driver_cipher_context_t;
87
88 #endif /* PSA_CRYPTO_DRIVER_CONTEXTS_PRIMITIVES_H */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010089diff --git a/library/psa_crypto_driver_wrappers.h b/library/psa_crypto_driver_wrappers.h
90index 8b468b46..bdaa25ca 100644
91--- a/library/psa_crypto_driver_wrappers.h
92+++ b/library/psa_crypto_driver_wrappers.h
93@@ -65,6 +65,16 @@
94 #include "tfm_builtin_key_loader.h"
95 #endif /* PSA_CRYPTO_DRIVER_TFM_BUILTIN_KEY_LOADER */
Antonio de Angelis86b98312021-12-17 21:42:40 +010096
97+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
98+#ifndef PSA_CRYPTO_DRIVER_PRESENT
99+#define PSA_CRYPTO_DRIVER_PRESENT
100+#endif
101+#ifndef PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
102+#define PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
103+#endif
104+#include "cc3xx.h"
105+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
106+
Summer Qin614002c2023-01-19 15:22:39 +0800107 /* END-driver headers */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100108
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100109 /* Auto-generated values depending on which drivers are registered.
110@@ -79,6 +89,9 @@ enum {
111 #if defined(PSA_CRYPTO_DRIVER_TFM_BUILTIN_KEY_LOADER)
112 PSA_CRYPTO_TFM_BUILTIN_KEY_LOADER_DRIVER_ID,
113 #endif /* PSA_CRYPTO_DRIVER_TFM_BUILTIN_KEY_LOADER */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100114+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100115+ PSA_CRYPTO_CC3XX_DRIVER_ID,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100116+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100117 };
Summer Qin614002c2023-01-19 15:22:39 +0800118
119 /* END-driver id */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100120@@ -123,6 +136,11 @@ static inline psa_status_t psa_driver_wrapper_init( void )
121 return( status );
122 #endif
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100123
124+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
125+ status = cc3xx_init();
126+ if (status != PSA_SUCCESS)
127+ return ( status );
128+#endif
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100129 (void) status;
130 return( PSA_SUCCESS );
131 }
132@@ -139,6 +157,10 @@ static inline void psa_driver_wrapper_free( void )
133 mbedtls_test_transparent_free( );
134 mbedtls_test_opaque_free( );
135 #endif
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100136+
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100137+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
138+ (void)cc3xx_free();
139+#endif
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100140 }
141
142 /* Start delegation functions */
143@@ -181,8 +203,29 @@ static inline psa_status_t psa_driver_wrapper_sign_message(
Raef Coles2350f722022-07-19 15:19:56 +0100144 if( status != PSA_ERROR_NOT_SUPPORTED )
145 return( status );
146 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100147-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
148- break;
Antonio de Angelis86b98312021-12-17 21:42:40 +0100149+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
150+ status = cc3xx_sign_message(
151+ attributes,
152+ key_buffer,
153+ key_buffer_size,
154+ alg,
155+ input,
156+ input_length,
157+ signature,
158+ signature_size,
159+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100160+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100161+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100162+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Summer Qin36f79f72022-07-05 14:53:35 +0800163+ return( psa_sign_message_builtin( attributes,
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100164+ key_buffer,
165+ key_buffer_size,
166+ alg,
167+ input,
168+ input_length,
169+ signature,
170+ signature_size,
171+ signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800172
173 /* Add cases for opaque driver here */
174 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100175@@ -206,18 +249,8 @@ static inline psa_status_t psa_driver_wrapper_sign_message(
Summer Qin36f79f72022-07-05 14:53:35 +0800176 default:
177 /* Key is declared with a lifetime not known to us */
178 (void)status;
179- break;
180+ return( PSA_ERROR_INVALID_ARGUMENT );
181 }
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100182-
Summer Qin36f79f72022-07-05 14:53:35 +0800183- return( psa_sign_message_builtin( attributes,
184- key_buffer,
185- key_buffer_size,
186- alg,
187- input,
188- input_length,
189- signature,
190- signature_size,
191- signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800192 }
193
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100194 static inline psa_status_t psa_driver_wrapper_verify_message(
195@@ -257,8 +290,27 @@ static inline psa_status_t psa_driver_wrapper_verify_message(
Raef Coles2350f722022-07-19 15:19:56 +0100196 if( status != PSA_ERROR_NOT_SUPPORTED )
197 return( status );
198 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100199+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
200+ status = cc3xx_verify_message(
201+ attributes,
202+ key_buffer,
203+ key_buffer_size,
204+ alg,
205+ input,
206+ input_length,
207+ signature,
208+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100209+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100210+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100211 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
212- break;
Summer Qin36f79f72022-07-05 14:53:35 +0800213+ return( psa_verify_message_builtin( attributes,
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100214+ key_buffer,
215+ key_buffer_size,
216+ alg,
217+ input,
218+ input_length,
219+ signature,
220+ signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800221
222 /* Add cases for opaque driver here */
223 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100224@@ -281,17 +333,8 @@ static inline psa_status_t psa_driver_wrapper_verify_message(
Summer Qin36f79f72022-07-05 14:53:35 +0800225 default:
226 /* Key is declared with a lifetime not known to us */
227 (void)status;
228- break;
229+ return( PSA_ERROR_INVALID_ARGUMENT );
230 }
231-
232- return( psa_verify_message_builtin( attributes,
233- key_buffer,
234- key_buffer_size,
235- alg,
236- input,
237- input_length,
238- signature,
239- signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800240 }
241
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100242 static inline psa_status_t psa_driver_wrapper_sign_hash(
243@@ -347,6 +390,18 @@ static inline psa_status_t psa_driver_wrapper_sign_hash(
Raef Coles2350f722022-07-19 15:19:56 +0100244 if( status != PSA_ERROR_NOT_SUPPORTED )
245 return( status );
246 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100247+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
248+ status = cc3xx_sign_hash( attributes,
249+ key_buffer,
250+ key_buffer_size,
251+ alg,
252+ hash,
253+ hash_length,
254+ signature,
255+ signature_size,
256+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100257+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100258+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100259 #if defined (MBEDTLS_PSA_P256M_DRIVER_ENABLED)
260 if( PSA_KEY_TYPE_IS_ECC( attributes->core.type ) &&
261 PSA_ALG_IS_ECDSA(alg) &&
262@@ -454,6 +509,17 @@ static inline psa_status_t psa_driver_wrapper_verify_hash(
263 if( status != PSA_ERROR_NOT_SUPPORTED )
264 return( status );
265 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100266+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
267+ status = cc3xx_verify_hash( attributes,
268+ key_buffer,
269+ key_buffer_size,
270+ alg,
271+ hash,
272+ hash_length,
273+ signature,
274+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100275+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100276+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100277 #if defined (MBEDTLS_PSA_P256M_DRIVER_ENABLED)
278 if( PSA_KEY_TYPE_IS_ECC( attributes->core.type ) &&
279 PSA_ALG_IS_ECDSA(alg) &&
280@@ -821,6 +887,12 @@ static inline psa_status_t psa_driver_wrapper_generate_key(
281 if( status != PSA_ERROR_NOT_SUPPORTED )
282 break;
283 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100284+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
Summer Qin36f79f72022-07-05 14:53:35 +0800285+ status = cc3xx_generate_key(
286+ attributes, key_buffer, key_buffer_size,
287+ key_buffer_length );
Raef Coles2350f722022-07-19 15:19:56 +0100288+ break;
Antonio de Angelis86b98312021-12-17 21:42:40 +0100289+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100290 #if defined(MBEDTLS_PSA_P256M_DRIVER_ENABLED)
291 if( PSA_KEY_TYPE_IS_ECC( attributes->core.type ) &&
292 attributes->core.type == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1) &&
293@@ -1143,6 +1215,20 @@ static inline psa_status_t psa_driver_wrapper_cipher_encrypt(
Summer Qin36f79f72022-07-05 14:53:35 +0800294 if( status != PSA_ERROR_NOT_SUPPORTED )
295 return( status );
296 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100297+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
298+ status = cc3xx_cipher_encrypt( attributes,
299+ key_buffer,
300+ key_buffer_size,
301+ alg,
302+ iv,
303+ iv_length,
304+ input,
305+ input_length,
306+ output,
307+ output_size,
308+ output_length );
Raef Coles2350f722022-07-19 15:19:56 +0100309+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100310+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100311 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100312
Raef Coles2350f722022-07-19 15:19:56 +0100313 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100314@@ -1234,6 +1320,18 @@ static inline psa_status_t psa_driver_wrapper_cipher_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100315 if( status != PSA_ERROR_NOT_SUPPORTED )
316 return( status );
317 #endif /* PSA_CRYPTO_DRIVER_TEST */
318+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
319+ status = cc3xx_cipher_decrypt( attributes,
320+ key_buffer,
321+ key_buffer_size,
322+ alg,
323+ input,
324+ input_length,
325+ output,
326+ output_size,
327+ output_length );
Raef Coles2350f722022-07-19 15:19:56 +0100328+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100329+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100330 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100331
Raef Coles2350f722022-07-19 15:19:56 +0100332 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100333@@ -1314,6 +1412,16 @@ static inline psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100334 if( status != PSA_ERROR_NOT_SUPPORTED )
335 return( status );
336 #endif /* PSA_CRYPTO_DRIVER_TEST */
337+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
338+ status = cc3xx_cipher_encrypt_setup(
339+ &operation->ctx.cc3xx_driver_ctx,
340+ attributes,
341+ key_buffer,
342+ key_buffer_size,
343+ alg );
Raef Coles2350f722022-07-19 15:19:56 +0100344+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
345+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100346+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100347 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
348 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100349 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100350@@ -1390,6 +1498,16 @@ static inline psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100351 if( status != PSA_ERROR_NOT_SUPPORTED )
352 return( status );
353 #endif /* PSA_CRYPTO_DRIVER_TEST */
354+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
355+ status = cc3xx_cipher_decrypt_setup(
356+ &operation->ctx.cc3xx_driver_ctx,
357+ attributes,
358+ key_buffer,
359+ key_buffer_size,
360+ alg );
Raef Coles2350f722022-07-19 15:19:56 +0100361+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
362+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100363+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100364 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
365 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100366 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100367@@ -1459,6 +1577,12 @@ static inline psa_status_t psa_driver_wrapper_cipher_set_iv(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100368 &operation->ctx.opaque_test_driver_ctx,
369 iv, iv_length ) );
370 #endif /* PSA_CRYPTO_DRIVER_TEST */
371+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
372+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
373+ return( cc3xx_cipher_set_iv(
374+ &operation->ctx.cc3xx_driver_ctx,
375+ iv, iv_length ) );
376+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
377 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
378 }
379
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100380@@ -1502,6 +1626,13 @@ static inline psa_status_t psa_driver_wrapper_cipher_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100381 input, input_length,
382 output, output_size, output_length ) );
383 #endif /* PSA_CRYPTO_DRIVER_TEST */
384+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
385+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
386+ return( cc3xx_cipher_update(
387+ &operation->ctx.cc3xx_driver_ctx,
388+ input, input_length,
389+ output, output_size, output_length ) );
390+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
391 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
392 }
393
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100394@@ -1542,6 +1673,12 @@ static inline psa_status_t psa_driver_wrapper_cipher_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100395 &operation->ctx.opaque_test_driver_ctx,
396 output, output_size, output_length ) );
397 #endif /* PSA_CRYPTO_DRIVER_TEST */
398+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
399+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
400+ return( cc3xx_cipher_finish(
401+ &operation->ctx.cc3xx_driver_ctx,
402+ output, output_size, output_length ) );
403+#endif /* PSA_CRYPTO_DRIVER_CC3XX*/
404 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
405 }
406
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100407@@ -1582,6 +1719,15 @@ static inline psa_status_t psa_driver_wrapper_cipher_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100408 sizeof( operation->ctx.opaque_test_driver_ctx ) );
409 return( status );
410 #endif /* PSA_CRYPTO_DRIVER_TEST */
411+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
412+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
413+ status = cc3xx_cipher_abort(
414+ &operation->ctx.cc3xx_driver_ctx );
415+ mbedtls_platform_zeroize(
416+ &operation->ctx.cc3xx_driver_ctx,
417+ sizeof( operation->ctx.cc3xx_driver_ctx ) );
418+ return( status );
419+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
420 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
421 }
422
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100423@@ -1603,12 +1749,19 @@ static inline psa_status_t psa_driver_wrapper_hash_compute(
Summer Qin36f79f72022-07-05 14:53:35 +0800424 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
425
426 /* Try accelerators first */
427+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
428 #if defined(PSA_CRYPTO_DRIVER_TEST)
429 status = mbedtls_test_transparent_hash_compute(
430 alg, input, input_length, hash, hash_size, hash_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100431 if( status != PSA_ERROR_NOT_SUPPORTED )
432 return( status );
Raef Coles2350f722022-07-19 15:19:56 +0100433-#endif
Raef Coles2350f722022-07-19 15:19:56 +0100434+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100435+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
436+ status = cc3xx_hash_compute(alg, input, input_length, hash, hash_size,
437+ hash_length);
Raef Coles2350f722022-07-19 15:19:56 +0100438+ return status;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100439+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100440+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100441
Antonio de Angelis86b98312021-12-17 21:42:40 +0100442 /* If software fallback is compiled in, try fallback */
Raef Coles2350f722022-07-19 15:19:56 +0100443 #if defined(MBEDTLS_PSA_BUILTIN_HASH)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100444@@ -1635,6 +1788,7 @@ static inline psa_status_t psa_driver_wrapper_hash_setup(
Summer Qin36f79f72022-07-05 14:53:35 +0800445 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
446
447 /* Try setup on accelerators first */
448+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
449 #if defined(PSA_CRYPTO_DRIVER_TEST)
450 status = mbedtls_test_transparent_hash_setup(
451 &operation->ctx.test_driver_ctx, alg );
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100452@@ -1643,7 +1797,13 @@ static inline psa_status_t psa_driver_wrapper_hash_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100453
Raef Coles2350f722022-07-19 15:19:56 +0100454 if( status != PSA_ERROR_NOT_SUPPORTED )
455 return( status );
456-#endif
457+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100458+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
459+ status = cc3xx_hash_setup(&operation->ctx.cc3xx_driver_ctx, alg);
Raef Coles2350f722022-07-19 15:19:56 +0100460+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
461+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100462+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100463+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
464
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100465 /* If software fallback is compiled in, try fallback */
Raef Coles2350f722022-07-19 15:19:56 +0100466 #if defined(MBEDTLS_PSA_BUILTIN_HASH)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100467@@ -1673,13 +1833,23 @@ static inline psa_status_t psa_driver_wrapper_hash_clone(
468 return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
469 &target_operation->ctx.mbedtls_ctx ) );
470 #endif
Summer Qin36f79f72022-07-05 14:53:35 +0800471+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
472 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800473 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
474 target_operation->id = MBEDTLS_TEST_TRANSPARENT_DRIVER_ID;
Summer Qin36f79f72022-07-05 14:53:35 +0800475 return( mbedtls_test_transparent_hash_clone(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100476 &source_operation->ctx.test_driver_ctx,
477 &target_operation->ctx.test_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100478-#endif
479+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100480+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
481+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
482+ target_operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
483+ return( cc3xx_hash_clone(
484+ &source_operation->ctx.cc3xx_driver_ctx,
485+ &target_operation->ctx.cc3xx_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100486+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100487+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100488+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100489 default:
490 (void) target_operation;
Raef Coles2350f722022-07-19 15:19:56 +0100491 return( PSA_ERROR_BAD_STATE );
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100492@@ -1698,12 +1868,20 @@ static inline psa_status_t psa_driver_wrapper_hash_update(
493 return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
494 input, input_length ) );
495 #endif
Summer Qin36f79f72022-07-05 14:53:35 +0800496+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
497 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800498 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
Summer Qin36f79f72022-07-05 14:53:35 +0800499 return( mbedtls_test_transparent_hash_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100500 &operation->ctx.test_driver_ctx,
501 input, input_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100502-#endif
503+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100504+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
505+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
506+ return( cc3xx_hash_update(
507+ &operation->ctx.cc3xx_driver_ctx,
508+ input, input_length ) );
509+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100510+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100511 default:
512 (void) input;
Raef Coles2350f722022-07-19 15:19:56 +0100513 (void) input_length;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100514@@ -1724,12 +1902,20 @@ static inline psa_status_t psa_driver_wrapper_hash_finish(
515 return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
516 hash, hash_size, hash_length ) );
517 #endif
Summer Qin36f79f72022-07-05 14:53:35 +0800518+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
519 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800520 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
Summer Qin36f79f72022-07-05 14:53:35 +0800521 return( mbedtls_test_transparent_hash_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100522 &operation->ctx.test_driver_ctx,
523 hash, hash_size, hash_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100524-#endif
525+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100526+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
527+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
528+ return( cc3xx_hash_finish(
529+ &operation->ctx.cc3xx_driver_ctx,
530+ hash, hash_size, hash_length ) );
531+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100532+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100533 default:
534 (void) hash;
Raef Coles2350f722022-07-19 15:19:56 +0100535 (void) hash_size;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100536@@ -1747,11 +1933,18 @@ static inline psa_status_t psa_driver_wrapper_hash_abort(
537 case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
538 return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
539 #endif
Summer Qin36f79f72022-07-05 14:53:35 +0800540+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
541 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800542 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
Antonio de Angelis86b98312021-12-17 21:42:40 +0100543 return( mbedtls_test_transparent_hash_abort(
544 &operation->ctx.test_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100545-#endif
546+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100547+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
548+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
549+ return( cc3xx_hash_abort(
550+ &operation->ctx.cc3xx_driver_ctx ) );
551+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100552+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100553 default:
554 return( PSA_ERROR_BAD_STATE );
Raef Coles2350f722022-07-19 15:19:56 +0100555 }
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100556@@ -1792,6 +1985,17 @@ static inline psa_status_t psa_driver_wrapper_aead_encrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100557 if( status != PSA_ERROR_NOT_SUPPORTED )
558 return( status );
559 #endif /* PSA_CRYPTO_DRIVER_TEST */
560+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
561+ status = cc3xx_aead_encrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100562+ attributes, key_buffer, key_buffer_size,
563+ alg,
564+ nonce, nonce_length,
565+ additional_data, additional_data_length,
566+ plaintext, plaintext_length,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100567+ ciphertext, ciphertext_size, ciphertext_length );
568+
Raef Coles2350f722022-07-19 15:19:56 +0100569+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100570+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100571 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100572
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100573 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100574@@ -1847,6 +2051,17 @@ static inline psa_status_t psa_driver_wrapper_aead_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100575 if( status != PSA_ERROR_NOT_SUPPORTED )
576 return( status );
577 #endif /* PSA_CRYPTO_DRIVER_TEST */
578+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
579+ status = cc3xx_aead_decrypt(
580+ attributes, key_buffer, key_buffer_size,
581+ alg,
582+ nonce, nonce_length,
583+ additional_data, additional_data_length,
584+ ciphertext, ciphertext_length,
585+ plaintext, plaintext_size, plaintext_length );
586+
Raef Coles2350f722022-07-19 15:19:56 +0100587+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100588+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100589 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100590
591 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100592@@ -1898,6 +2113,15 @@ static inline psa_status_t psa_driver_wrapper_aead_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100593 if( status != PSA_ERROR_NOT_SUPPORTED )
594 return( status );
595 #endif /* PSA_CRYPTO_DRIVER_TEST */
596+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
597+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
598+ status = cc3xx_aead_encrypt_setup(
599+ &operation->ctx.cc3xx_driver_ctx,
600+ attributes, key_buffer, key_buffer_size,
601+ alg );
602+
Raef Coles2350f722022-07-19 15:19:56 +0100603+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100604+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100605 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100606
607 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100608@@ -1950,6 +2174,16 @@ static inline psa_status_t psa_driver_wrapper_aead_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100609 if( status != PSA_ERROR_NOT_SUPPORTED )
610 return( status );
611 #endif /* PSA_CRYPTO_DRIVER_TEST */
612+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
613+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
614+ status = cc3xx_aead_decrypt_setup(
615+ &operation->ctx.cc3xx_driver_ctx,
616+ attributes,
617+ key_buffer, key_buffer_size,
618+ alg );
619+
Raef Coles2350f722022-07-19 15:19:56 +0100620+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100621+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100622 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100623
624 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100625@@ -1996,6 +2230,12 @@ static inline psa_status_t psa_driver_wrapper_aead_set_nonce(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100626 /* Add cases for opaque driver here */
627
628 #endif /* PSA_CRYPTO_DRIVER_TEST */
629+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
630+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
631+ return( cc3xx_aead_set_nonce(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100632+ &operation->ctx.cc3xx_driver_ctx,
633+ nonce, nonce_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100634+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
635 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
636 }
637
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100638@@ -2030,6 +2270,12 @@ static inline psa_status_t psa_driver_wrapper_aead_set_lengths(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100639 /* Add cases for opaque driver here */
640
641 #endif /* PSA_CRYPTO_DRIVER_TEST */
642+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
643+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
644+ return( cc3xx_aead_set_lengths(
645+ &operation->ctx.cc3xx_driver_ctx,
646+ ad_length, plaintext_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100647+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
648 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
649 }
650
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100651@@ -2064,6 +2310,12 @@ static inline psa_status_t psa_driver_wrapper_aead_update_ad(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100652 /* Add cases for opaque driver here */
653
654 #endif /* PSA_CRYPTO_DRIVER_TEST */
655+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
656+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
657+ return( cc3xx_aead_update_ad(
658+ &operation->ctx.cc3xx_driver_ctx,
659+ input, input_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100660+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
661 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
662 }
663
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100664@@ -2103,6 +2355,13 @@ static inline psa_status_t psa_driver_wrapper_aead_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100665 /* Add cases for opaque driver here */
666
667 #endif /* PSA_CRYPTO_DRIVER_TEST */
668+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
669+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
670+ return( cc3xx_aead_update(
671+ &operation->ctx.cc3xx_driver_ctx,
672+ input, input_length, output, output_size,
673+ output_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100674+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
675 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
676 }
677
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100678@@ -2147,6 +2406,13 @@ static inline psa_status_t psa_driver_wrapper_aead_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100679 /* Add cases for opaque driver here */
680
681 #endif /* PSA_CRYPTO_DRIVER_TEST */
682+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
683+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
684+ return( cc3xx_aead_finish(
685+ &operation->ctx.cc3xx_driver_ctx,
686+ ciphertext, ciphertext_size,
687+ ciphertext_length, tag, tag_size, tag_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100688+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
689 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
690 }
691
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100692@@ -2211,6 +2477,13 @@ static inline psa_status_t psa_driver_wrapper_aead_verify(
Raef Coles2350f722022-07-19 15:19:56 +0100693 /* Add cases for opaque driver here */
694
695 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100696+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
697+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
698+ return( cc3xx_aead_verify(
699+ &operation->ctx.cc3xx_driver_ctx,
700+ plaintext, plaintext_size,
701+ plaintext_length, tag, tag_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100702+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
703 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
704 }
705
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100706@@ -2243,6 +2516,11 @@ static inline psa_status_t psa_driver_wrapper_aead_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100707 /* Add cases for opaque driver here */
708
709 #endif /* PSA_CRYPTO_DRIVER_TEST */
710+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100711+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
712+ return( cc3xx_aead_abort(
713+ &operation->ctx.cc3xx_driver_ctx ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100714+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
715 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
716 }
717
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100718@@ -2285,6 +2563,12 @@ static inline psa_status_t psa_driver_wrapper_mac_compute(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100719 if( status != PSA_ERROR_NOT_SUPPORTED )
720 return( status );
721 #endif /* PSA_CRYPTO_DRIVER_TEST */
722+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
723+ status = cc3xx_mac_compute(attributes, key_buffer, key_buffer_size, alg,
724+ input, input_length,
725+ mac, mac_size, mac_length);
Raef Coles2350f722022-07-19 15:19:56 +0100726+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100727+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100728 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
729 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100730 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100731@@ -2356,6 +2640,15 @@ static inline psa_status_t psa_driver_wrapper_mac_sign_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100732 if( status != PSA_ERROR_NOT_SUPPORTED )
733 return( status );
734 #endif /* PSA_CRYPTO_DRIVER_TEST */
735+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
736+ status = cc3xx_mac_sign_setup(
737+ &operation->ctx.cc3xx_driver_ctx,
738+ attributes,
739+ key_buffer, key_buffer_size,
740+ alg);
Raef Coles2350f722022-07-19 15:19:56 +0100741+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
742+ return status;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100743+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100744 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
745 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100746 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100747@@ -2431,6 +2724,15 @@ static inline psa_status_t psa_driver_wrapper_mac_verify_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100748 if( status != PSA_ERROR_NOT_SUPPORTED )
749 return( status );
750 #endif /* PSA_CRYPTO_DRIVER_TEST */
751+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
752+ status = cc3xx_mac_verify_setup(
753+ &operation->ctx.cc3xx_driver_ctx,
754+ attributes,
755+ key_buffer, key_buffer_size,
756+ alg);
Raef Coles2350f722022-07-19 15:19:56 +0100757+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
758+ return status;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100759+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100760 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
761 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100762 /* Fell through, meaning no accelerator supports this operation */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100763@@ -2498,6 +2800,10 @@ static inline psa_status_t psa_driver_wrapper_mac_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100764 &operation->ctx.opaque_test_driver_ctx,
765 input, input_length ) );
766 #endif /* PSA_CRYPTO_DRIVER_TEST */
767+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
768+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
769+ return(cc3xx_mac_update(&operation->ctx.cc3xx_driver_ctx, input, input_length));
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100770+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100771 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
772 default:
773 (void) input;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100774@@ -2532,6 +2838,11 @@ static inline psa_status_t psa_driver_wrapper_mac_sign_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100775 &operation->ctx.opaque_test_driver_ctx,
776 mac, mac_size, mac_length ) );
777 #endif /* PSA_CRYPTO_DRIVER_TEST */
778+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
779+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
780+ return(cc3xx_mac_sign_finish(&operation->ctx.cc3xx_driver_ctx,
781+ mac, mac_size, mac_length));
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100782+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100783 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
784 default:
785 (void) mac;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100786@@ -2566,6 +2877,12 @@ static inline psa_status_t psa_driver_wrapper_mac_verify_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100787 &operation->ctx.opaque_test_driver_ctx,
788 mac, mac_length ) );
789 #endif /* PSA_CRYPTO_DRIVER_TEST */
790+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
791+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
792+ return(cc3xx_mac_verify_finish(
793+ &operation->ctx.cc3xx_driver_ctx,
794+ mac, mac_length));
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100795+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100796 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
797 default:
798 (void) mac;
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100799@@ -2593,6 +2910,10 @@ static inline psa_status_t psa_driver_wrapper_mac_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100800 return( mbedtls_test_opaque_mac_abort(
801 &operation->ctx.opaque_test_driver_ctx ) );
802 #endif /* PSA_CRYPTO_DRIVER_TEST */
803+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
804+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
805+ return(cc3xx_mac_abort(&operation->ctx.cc3xx_driver_ctx));
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100806+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100807 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
808 default:
809 return( PSA_ERROR_INVALID_ARGUMENT );
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100810@@ -2630,6 +2951,20 @@ static inline psa_status_t psa_driver_wrapper_asymmetric_encrypt(
811 if( status != PSA_ERROR_NOT_SUPPORTED )
812 return( status );
813 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100814+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
815+ status = cc3xx_asymmetric_encrypt( attributes,
816+ key_buffer,
817+ key_buffer_size,
818+ alg,
819+ input,
820+ input_length,
821+ salt,
822+ salt_length,
823+ output,
824+ output_size,
825+ output_length );
826+ return( status );
827+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100828 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
829 return( mbedtls_psa_asymmetric_encrypt( attributes,
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100830 key_buffer, key_buffer_size, alg, input, input_length,
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100831@@ -2691,6 +3026,20 @@ static inline psa_status_t psa_driver_wrapper_asymmetric_decrypt(
832 if( status != PSA_ERROR_NOT_SUPPORTED )
833 return( status );
834 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100835+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
836+ status = cc3xx_asymmetric_decrypt( attributes,
837+ key_buffer,
838+ key_buffer_size,
839+ alg,
840+ input,
841+ input_length,
842+ salt,
843+ salt_length,
844+ output,
845+ output_size,
846+ output_length );
847+ return( status );
848+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100849 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
850 return( mbedtls_psa_asymmetric_decrypt( attributes,
851 key_buffer, key_buffer_size, alg,input, input_length,
852@@ -2758,6 +3107,18 @@ static inline psa_status_t psa_driver_wrapper_key_agreement(
Summer Qin614002c2023-01-19 15:22:39 +0800853 if( status != PSA_ERROR_NOT_SUPPORTED )
854 return( status );
855 #endif /* PSA_CRYPTO_DRIVER_TEST */
856+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
857+ status = cc3xx_key_agreement( attributes,
858+ key_buffer,
859+ key_buffer_size,
860+ peer_key,
861+ peer_key_length,
862+ shared_secret,
863+ shared_secret_size,
864+ shared_secret_length,
865+ alg );
866+ return( status );
867+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100868 #if defined(MBEDTLS_PSA_P256M_DRIVER_ENABLED)
869 if( PSA_KEY_TYPE_IS_ECC( attributes->core.type ) &&
870 PSA_ALG_IS_ECDH(alg) &&
871diff --git a/library/psa_crypto_driver_wrappers_no_static.c b/library/psa_crypto_driver_wrappers_no_static.c
872index af677746..a9df9a0a 100644
873--- a/library/psa_crypto_driver_wrappers_no_static.c
874+++ b/library/psa_crypto_driver_wrappers_no_static.c
875@@ -64,6 +64,16 @@
876 #include "tfm_builtin_key_loader.h"
877 #endif /* PSA_CRYPTO_DRIVER_TFM_BUILTIN_KEY_LOADER */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100878
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100879+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
880+#ifndef PSA_CRYPTO_DRIVER_PRESENT
881+#define PSA_CRYPTO_DRIVER_PRESENT
882+#endif
883+#ifndef PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
884+#define PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
885+#endif
886+#include "cc3xx.h"
887+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
888+
889 /* END-driver headers */
890
891 /* Auto-generated values depending on which drivers are registered.
892@@ -78,6 +88,9 @@ enum {
893 #if defined(PSA_CRYPTO_DRIVER_TFM_BUILTIN_KEY_LOADER)
894 PSA_CRYPTO_TFM_BUILTIN_KEY_LOADER_DRIVER_ID,
895 #endif /* PSA_CRYPTO_DRIVER_TFM_BUILTIN_KEY_LOADER */
896+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
897+ PSA_CRYPTO_CC3XX_DRIVER_ID,
898+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
899 };
900
901 /* END-driver id */
902@@ -208,6 +221,17 @@ psa_status_t psa_driver_wrapper_export_public_key(
903 return( status );
904 #endif
905
906+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
907+ status = cc3xx_export_public_key(
908+ attributes,
909+ key_buffer,
910+ key_buffer_size,
911+ data,
912+ data_size,
913+ data_length );
914+ return( status );
915+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
916+
917 #if (defined(MBEDTLS_PSA_P256M_DRIVER_ENABLED) )
918 status = p256_transparent_export_public_key
919 (attributes,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100920--
Antonio de Angelis2718b582022-08-23 14:58:40 +01009212.25.1
Antonio de Angelis86b98312021-12-17 21:42:40 +0100922