blob: b8cb4ffb107c0f789da3f4c964695d2b9328bde2 [file] [log] [blame]
Antonio de Angelis8bb98512024-01-16 14:13:36 +00001From bb55d3718baa1c2d787cf996da8f01d85c99b00b 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 Angelis8bb98512024-01-16 14:13:36 +00003Date: Thu, 21 Mar 2024 12:58:37 +0000
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +01004Subject: [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 +
Antonio de Angelis8bb98512024-01-16 14:13:36 +000017 4 files changed, 436 insertions(+), 29 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 Angelis8bb98512024-01-16 14:13:36 +000020index d717c5190..f6a54aefd 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 Angelis8bb98512024-01-16 14:13:36 +000023@@ -30,6 +30,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
Antonio de Angelis8bb98512024-01-16 14:13:36 +000034@@ -118,6 +122,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 Angelis8bb98512024-01-16 14:13:36 +000044@@ -126,6 +133,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 Angelis8bb98512024-01-16 14:13:36 +000055index c90a5fbe7..3f00006f8 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 Angelis8bb98512024-01-16 14:13:36 +000058@@ -29,6 +29,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
Antonio de Angelis8bb98512024-01-16 14:13:36 +000069@@ -90,6 +94,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 Angelis8bb98512024-01-16 14:13:36 +000079@@ -99,6 +106,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
Antonio de Angelis8bb98512024-01-16 14:13:36 +000090index 2ea6358f9..3fa4583b7 100644
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010091--- a/library/psa_crypto_driver_wrappers.h
92+++ b/library/psa_crypto_driver_wrappers.h
Antonio de Angelis8bb98512024-01-16 14:13:36 +000093@@ -53,6 +53,16 @@
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +010094 #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.
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000110@@ -67,6 +77,9 @@ enum {
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100111 #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 Angelis8bb98512024-01-16 14:13:36 +0000120@@ -111,6 +124,12 @@ static inline psa_status_t psa_driver_wrapper_init( void )
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100121 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 Angelis8bb98512024-01-16 14:13:36 +0000129+
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100130 (void) status;
131 return( PSA_SUCCESS );
132 }
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000133@@ -127,6 +146,10 @@ static inline void psa_driver_wrapper_free( void )
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100134 mbedtls_test_transparent_free( );
135 mbedtls_test_opaque_free( );
136 #endif
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100137+
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100138+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
139+ (void)cc3xx_free();
140+#endif
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100141 }
142
143 /* Start delegation functions */
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000144@@ -169,7 +192,29 @@ static inline psa_status_t psa_driver_wrapper_sign_message(
Raef Coles2350f722022-07-19 15:19:56 +0100145 if( status != PSA_ERROR_NOT_SUPPORTED )
146 return( status );
147 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100148-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
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 ) );
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000172 break;
Summer Qin36f79f72022-07-05 14:53:35 +0800173
174 /* Add cases for opaque driver here */
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000175@@ -194,18 +239,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(
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000195@@ -245,8 +280,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 Angelis8bb98512024-01-16 14:13:36 +0000224@@ -269,17 +323,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(
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000243@@ -335,6 +380,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)
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000260 if( PSA_KEY_TYPE_IS_ECC( psa_get_key_type(attributes) ) &&
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100261 PSA_ALG_IS_ECDSA(alg) &&
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000262@@ -442,6 +499,17 @@ static inline psa_status_t psa_driver_wrapper_verify_hash(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100263 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)
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000278 if( PSA_KEY_TYPE_IS_ECC( psa_get_key_type(attributes) ) &&
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100279 PSA_ALG_IS_ECDSA(alg) &&
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000280@@ -834,6 +902,12 @@ static inline psa_status_t psa_driver_wrapper_generate_key(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100281 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)
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000291 if( PSA_KEY_TYPE_IS_ECC( psa_get_key_type(attributes) ) &&
292 psa_get_key_type(attributes) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1) &&
293@@ -1157,6 +1231,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 Angelis8bb98512024-01-16 14:13:36 +0000314@@ -1248,6 +1336,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 Angelis8bb98512024-01-16 14:13:36 +0000333@@ -1328,6 +1428,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 Angelis8bb98512024-01-16 14:13:36 +0000350@@ -1404,6 +1514,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 Angelis8bb98512024-01-16 14:13:36 +0000367@@ -1473,6 +1593,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 Angelis8bb98512024-01-16 14:13:36 +0000380@@ -1516,6 +1642,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 Angelis8bb98512024-01-16 14:13:36 +0000394@@ -1556,6 +1689,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 Angelis8bb98512024-01-16 14:13:36 +0000407@@ -1596,6 +1735,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 Angelis8bb98512024-01-16 14:13:36 +0000423@@ -1617,12 +1765,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 Angelis8bb98512024-01-16 14:13:36 +0000444@@ -1649,6 +1804,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 Angelis8bb98512024-01-16 14:13:36 +0000452@@ -1657,7 +1813,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 Angelis8bb98512024-01-16 14:13:36 +0000467@@ -1687,13 +1849,23 @@ static inline psa_status_t psa_driver_wrapper_hash_clone(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100468 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 Angelis8bb98512024-01-16 14:13:36 +0000492@@ -1712,12 +1884,20 @@ static inline psa_status_t psa_driver_wrapper_hash_update(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100493 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 Angelis8bb98512024-01-16 14:13:36 +0000514@@ -1738,12 +1918,20 @@ static inline psa_status_t psa_driver_wrapper_hash_finish(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100515 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 Angelis8bb98512024-01-16 14:13:36 +0000536@@ -1761,11 +1949,18 @@ static inline psa_status_t psa_driver_wrapper_hash_abort(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100537 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 Angelis8bb98512024-01-16 14:13:36 +0000556@@ -1806,6 +2001,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 Angelis8bb98512024-01-16 14:13:36 +0000574@@ -1861,6 +2067,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 Angelis8bb98512024-01-16 14:13:36 +0000592@@ -1912,6 +2129,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 Angelis8bb98512024-01-16 14:13:36 +0000608@@ -1964,6 +2190,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 Angelis8bb98512024-01-16 14:13:36 +0000625@@ -2010,6 +2246,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 Angelis8bb98512024-01-16 14:13:36 +0000638@@ -2044,6 +2286,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 Angelis8bb98512024-01-16 14:13:36 +0000651@@ -2078,6 +2326,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 Angelis8bb98512024-01-16 14:13:36 +0000664@@ -2117,6 +2371,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 Angelis8bb98512024-01-16 14:13:36 +0000678@@ -2161,6 +2422,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 Angelis8bb98512024-01-16 14:13:36 +0000692@@ -2225,6 +2493,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 Angelis8bb98512024-01-16 14:13:36 +0000706@@ -2257,6 +2532,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 Angelis8bb98512024-01-16 14:13:36 +0000718@@ -2299,6 +2579,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 Angelis8bb98512024-01-16 14:13:36 +0000731@@ -2370,6 +2656,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 Angelis8bb98512024-01-16 14:13:36 +0000747@@ -2445,6 +2740,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 Angelis8bb98512024-01-16 14:13:36 +0000763@@ -2512,6 +2816,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 Angelis8bb98512024-01-16 14:13:36 +0000774@@ -2546,6 +2854,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 Angelis8bb98512024-01-16 14:13:36 +0000786@@ -2580,6 +2893,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 Angelis8bb98512024-01-16 14:13:36 +0000799@@ -2607,6 +2926,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 Angelis8bb98512024-01-16 14:13:36 +0000810@@ -2644,6 +2967,20 @@ static inline psa_status_t psa_driver_wrapper_asymmetric_encrypt(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100811 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 Angelis8bb98512024-01-16 14:13:36 +0000831@@ -2705,6 +3042,20 @@ static inline psa_status_t psa_driver_wrapper_asymmetric_decrypt(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100832 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,
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000852@@ -2772,6 +3123,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)
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000869 if( PSA_KEY_TYPE_IS_ECC( psa_get_key_type(attributes) ) &&
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100870 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
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000872index 436a650fc..bc65e2c7f 100644
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100873--- a/library/psa_crypto_driver_wrappers_no_static.c
874+++ b/library/psa_crypto_driver_wrappers_no_static.c
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000875@@ -52,6 +52,16 @@
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100876 #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.
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000892@@ -66,6 +76,9 @@ enum {
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100893 #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 */
Antonio de Angelis8bb98512024-01-16 14:13:36 +0000902@@ -196,6 +209,17 @@ psa_status_t psa_driver_wrapper_export_public_key(
Antonio de Angelis3fae3ae2023-10-01 00:28:56 +0100903 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 Angelis8bb98512024-01-16 14:13:36 +00009212.34.1
Antonio de Angelis86b98312021-12-17 21:42:40 +0100922