blob: 95cc8e7ee18fbd44a57b594efd1c3e49e7dc7330 [file] [log] [blame]
Summer Qin614002c2023-01-19 15:22:39 +08001From 6c54899b07c7cc9615e98eba30781500f4b906c6 Mon Sep 17 00:00:00 2001
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01002From: Antonio de Angelis <Antonio.deAngelis@arm.com>
3Date: Fri, 15 Jul 2022 12:41:34 +0100
Summer Qin614002c2023-01-19 15:22:39 +08004Subject: [PATCH 3/6] Driver wrapper entry points for CC3XX
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
7into psa_crypto_driver_wrappers.c (and provide missing entry point
8definitions if any). This is a temporary solution until the codegen
9framework is available for automatic integration.
Summer Qin36f79f72022-07-05 14:53:35 +080010
11Signed-off-by: Summer Qin <summer.qin@arm.com>
Antonio de Angelis86b98312021-12-17 21:42:40 +010012Signed-off-by: Salome Thirot <salome.thirot@arm.com>
13Signed-off-by: Abbas Bracken Ziad <abbas.brackenziad@arm.com>
14Signed-off-by: Georgios Vasilakis <georgios.vasilakis@nordicsemi.no>
15Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
16---
17 .../psa/crypto_driver_contexts_composites.h | 9 +
18 .../psa/crypto_driver_contexts_primitives.h | 9 +
Summer Qin614002c2023-01-19 15:22:39 +080019 library/psa_crypto_driver_wrappers.c | 486 ++++++++++++++++--
20 3 files changed, 452 insertions(+), 52 deletions(-)
Antonio de Angelis86b98312021-12-17 21:42:40 +010021
22diff --git a/include/psa/crypto_driver_contexts_composites.h b/include/psa/crypto_driver_contexts_composites.h
Summer Qin614002c2023-01-19 15:22:39 +080023index 3f1c8af4..2fdf9561 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010024--- a/include/psa/crypto_driver_contexts_composites.h
25+++ b/include/psa/crypto_driver_contexts_composites.h
26@@ -41,6 +41,9 @@
27
28 /* Include the context structure definitions for those drivers that were
29 * declared during the autogeneration process. */
30+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
31+#include "cc3xx_crypto_primitives_private.h"
32+#endif
33
34 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
35 #include <libtestdriver1/include/psa/crypto.h>
36@@ -104,6 +107,9 @@ typedef union {
37 mbedtls_transparent_test_driver_mac_operation_t transparent_test_driver_ctx;
38 mbedtls_opaque_test_driver_mac_operation_t opaque_test_driver_ctx;
39 #endif
40+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
41+ cc3xx_mac_operation_t cc3xx_driver_ctx;
42+#endif
43 } psa_driver_mac_context_t;
44
45 typedef union {
46@@ -112,6 +118,9 @@ typedef union {
47 #if defined(PSA_CRYPTO_DRIVER_TEST)
48 mbedtls_transparent_test_driver_aead_operation_t transparent_test_driver_ctx;
49 #endif
50+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
51+ cc3xx_aead_operation_t cc3xx_driver_ctx;
52+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
53 } psa_driver_aead_context_t;
54
55 #endif /* PSA_CRYPTO_DRIVER_CONTEXTS_COMPOSITES_H */
56diff --git a/include/psa/crypto_driver_contexts_primitives.h b/include/psa/crypto_driver_contexts_primitives.h
Summer Qin614002c2023-01-19 15:22:39 +080057index 2bb01ed4..2bc0bda7 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010058--- a/include/psa/crypto_driver_contexts_primitives.h
59+++ b/include/psa/crypto_driver_contexts_primitives.h
60@@ -40,6 +40,9 @@
61
62 /* Include the context structure definitions for those drivers that were
63 * declared during the autogeneration process. */
64+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
65+#include "cc3xx_crypto_primitives_private.h"
66+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
67
68 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
69 #include <libtestdriver1/include/psa/crypto.h>
70@@ -102,6 +105,9 @@ typedef union {
71 #if defined(PSA_CRYPTO_DRIVER_TEST)
72 mbedtls_transparent_test_driver_hash_operation_t test_driver_ctx;
73 #endif
74+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
75+ cc3xx_hash_operation_t cc3xx_driver_ctx;
76+#endif
77 } psa_driver_hash_context_t;
78
79 typedef union {
80@@ -111,6 +117,9 @@ typedef union {
81 mbedtls_transparent_test_driver_cipher_operation_t transparent_test_driver_ctx;
82 mbedtls_opaque_test_driver_cipher_operation_t opaque_test_driver_ctx;
83 #endif
84+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
85+ cc3xx_cipher_operation_t cc3xx_driver_ctx;
86+#endif
87 } psa_driver_cipher_context_t;
88
89 #endif /* PSA_CRYPTO_DRIVER_CONTEXTS_PRIMITIVES_H */
Antonio de Angelis86b98312021-12-17 21:42:40 +010090diff --git a/library/psa_crypto_driver_wrappers.c b/library/psa_crypto_driver_wrappers.c
Summer Qin614002c2023-01-19 15:22:39 +080091index 19819413..e822eef0 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010092--- a/library/psa_crypto_driver_wrappers.c
93+++ b/library/psa_crypto_driver_wrappers.c
Summer Qin614002c2023-01-19 15:22:39 +080094@@ -48,6 +48,16 @@
95
96 #endif
Antonio de Angelis86b98312021-12-17 21:42:40 +010097
98+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
99+#ifndef PSA_CRYPTO_DRIVER_PRESENT
100+#define PSA_CRYPTO_DRIVER_PRESENT
101+#endif
102+#ifndef PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
103+#define PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
104+#endif
105+#include "cc3xx.h"
106+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
107+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100108 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS */
Summer Qin614002c2023-01-19 15:22:39 +0800109 /* END-driver headers */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100110
Summer Qin614002c2023-01-19 15:22:39 +0800111@@ -58,6 +68,9 @@
112 #define PSA_CRYPTO_MBED_TLS_DRIVER_ID (1)
113 #define MBEDTLS_TEST_OPAQUE_DRIVER_ID (2)
114 #define MBEDTLS_TEST_TRANSPARENT_DRIVER_ID (3)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100115+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
116+#define PSA_CRYPTO_CC3XX_DRIVER_ID (4)
117+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin614002c2023-01-19 15:22:39 +0800118
119 /* END-driver id */
120
121@@ -79,6 +92,12 @@ psa_status_t psa_driver_wrapper_init( void )
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100122 {
123 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
124
125+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
126+ status = cc3xx_init();
127+ if (status != PSA_SUCCESS)
128+ return ( status );
129+#endif
130+
131 #if defined(MBEDTLS_PSA_CRYPTO_SE_C)
132 status = psa_init_all_se_drivers( );
133 if( status != PSA_SUCCESS )
Summer Qin614002c2023-01-19 15:22:39 +0800134@@ -101,6 +120,10 @@ psa_status_t psa_driver_wrapper_init( void )
Antonio de Angelis695d75b2022-08-22 15:06:24 +0100135
136 void psa_driver_wrapper_free( void )
137 {
138+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
139+ (void)cc3xx_free();
140+#endif
141+
142 #if defined(MBEDTLS_PSA_CRYPTO_SE_C)
143 /* Unregister all secure element drivers, so that we restart from
144 * a pristine state. */
Summer Qin614002c2023-01-19 15:22:39 +0800145@@ -150,8 +173,30 @@ psa_status_t psa_driver_wrapper_sign_message(
Raef Coles2350f722022-07-19 15:19:56 +0100146 if( status != PSA_ERROR_NOT_SUPPORTED )
147 return( status );
148 #endif /* PSA_CRYPTO_DRIVER_TEST */
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 */
Raef Coles2350f722022-07-19 15:19:56 +0100162 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
163- break;
Summer Qin36f79f72022-07-05 14:53:35 +0800164+ /* Fell through, meaning no accelerator supports this operation */
165+ return( psa_sign_message_builtin( attributes,
166+ key_buffer,
167+ key_buffer_size,
168+ alg,
169+ input,
170+ input_length,
171+ signature,
172+ signature_size,
173+ signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800174
175 /* Add cases for opaque driver here */
176 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Summer Qin614002c2023-01-19 15:22:39 +0800177@@ -175,18 +220,10 @@ psa_status_t psa_driver_wrapper_sign_message(
Summer Qin36f79f72022-07-05 14:53:35 +0800178 default:
179 /* Key is declared with a lifetime not known to us */
180 (void)status;
181- break;
182+ return( PSA_ERROR_INVALID_ARGUMENT );
183 }
Summer Qin614002c2023-01-19 15:22:39 +0800184
Summer Qin36f79f72022-07-05 14:53:35 +0800185- return( psa_sign_message_builtin( attributes,
186- key_buffer,
187- key_buffer_size,
188- alg,
189- input,
190- input_length,
191- signature,
192- signature_size,
193- signature_length ) );
194+ return status;
195 }
196
197 psa_status_t psa_driver_wrapper_verify_message(
Summer Qin614002c2023-01-19 15:22:39 +0800198@@ -223,8 +260,28 @@ psa_status_t psa_driver_wrapper_verify_message(
Raef Coles2350f722022-07-19 15:19:56 +0100199 if( status != PSA_ERROR_NOT_SUPPORTED )
200 return( status );
201 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100202+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
203+ status = cc3xx_verify_message(
204+ attributes,
205+ key_buffer,
206+ key_buffer_size,
207+ alg,
208+ input,
209+ input_length,
210+ signature,
211+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100212+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100213+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100214 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
215- break;
Summer Qin36f79f72022-07-05 14:53:35 +0800216+ /* Fell through, meaning no accelerator supports this operation */
217+ return( psa_verify_message_builtin( attributes,
218+ key_buffer,
219+ key_buffer_size,
220+ alg,
221+ input,
222+ input_length,
223+ signature,
224+ signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800225
226 /* Add cases for opaque driver here */
227 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Summer Qin614002c2023-01-19 15:22:39 +0800228@@ -247,17 +304,9 @@ psa_status_t psa_driver_wrapper_verify_message(
Summer Qin36f79f72022-07-05 14:53:35 +0800229 default:
230 /* Key is declared with a lifetime not known to us */
231 (void)status;
232- break;
233+ return( PSA_ERROR_INVALID_ARGUMENT );
234 }
235-
236- return( psa_verify_message_builtin( attributes,
237- key_buffer,
238- key_buffer_size,
239- alg,
240- input,
241- input_length,
242- signature,
243- signature_length ) );
244+ return status;
245 }
246
247 psa_status_t psa_driver_wrapper_sign_hash(
Summer Qin614002c2023-01-19 15:22:39 +0800248@@ -310,6 +359,18 @@ psa_status_t psa_driver_wrapper_sign_hash(
Raef Coles2350f722022-07-19 15:19:56 +0100249 if( status != PSA_ERROR_NOT_SUPPORTED )
250 return( status );
251 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100252+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
253+ status = cc3xx_sign_hash( attributes,
254+ key_buffer,
255+ key_buffer_size,
256+ alg,
257+ hash,
258+ hash_length,
259+ signature,
260+ signature_size,
261+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100262+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100263+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100264 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Summer Qin36f79f72022-07-05 14:53:35 +0800265 /* Fell through, meaning no accelerator supports this operation */
266 return( psa_sign_hash_builtin( attributes,
Summer Qin614002c2023-01-19 15:22:39 +0800267@@ -380,6 +441,17 @@ psa_status_t psa_driver_wrapper_verify_hash(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100268 /* Key is stored in the slot in export representation, so
269 * cycle through all known transparent accelerators */
270 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
271+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
272+ status = cc3xx_verify_hash( attributes,
273+ key_buffer,
274+ key_buffer_size,
275+ alg,
276+ hash,
277+ hash_length,
278+ signature,
279+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100280+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100281+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
282 #if defined(PSA_CRYPTO_DRIVER_TEST)
283 status = mbedtls_test_transparent_signature_verify_hash(
284 attributes,
Summer Qin614002c2023-01-19 15:22:39 +0800285@@ -555,6 +627,12 @@ psa_status_t psa_driver_wrapper_generate_key(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100286 if( PSA_KEY_TYPE_IS_ASYMMETRIC( attributes->core.type ) )
287 {
288 /* Cycle through all known transparent accelerators */
289+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
Summer Qin36f79f72022-07-05 14:53:35 +0800290+ status = cc3xx_generate_key(
291+ attributes, key_buffer, key_buffer_size,
292+ key_buffer_length );
Raef Coles2350f722022-07-19 15:19:56 +0100293+ break;
Antonio de Angelis86b98312021-12-17 21:42:40 +0100294+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
295 #if defined(PSA_CRYPTO_DRIVER_TEST)
296 status = mbedtls_test_transparent_generate_key(
297 attributes, key_buffer, key_buffer_size,
Summer Qin614002c2023-01-19 15:22:39 +0800298@@ -804,7 +882,16 @@ psa_status_t psa_driver_wrapper_export_public_key(
Raef Coles2350f722022-07-19 15:19:56 +0100299 if( status != PSA_ERROR_NOT_SUPPORTED )
300 return( status );
Summer Qin614002c2023-01-19 15:22:39 +0800301 #endif
302-
Antonio de Angelis86b98312021-12-17 21:42:40 +0100303+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
304+ status = cc3xx_export_public_key(
305+ attributes,
306+ key_buffer,
307+ key_buffer_size,
308+ data,
309+ data_size,
310+ data_length );
Raef Coles2350f722022-07-19 15:19:56 +0100311+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100312+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin614002c2023-01-19 15:22:39 +0800313
Raef Coles2350f722022-07-19 15:19:56 +0100314 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Summer Qin36f79f72022-07-05 14:53:35 +0800315 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800316@@ -967,6 +1054,20 @@ psa_status_t psa_driver_wrapper_cipher_encrypt(
Summer Qin36f79f72022-07-05 14:53:35 +0800317 if( status != PSA_ERROR_NOT_SUPPORTED )
318 return( status );
319 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100320+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
321+ status = cc3xx_cipher_encrypt( attributes,
322+ key_buffer,
323+ key_buffer_size,
324+ alg,
325+ iv,
326+ iv_length,
327+ input,
328+ input_length,
329+ output,
330+ output_size,
331+ output_length );
Raef Coles2350f722022-07-19 15:19:56 +0100332+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100333+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100334 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100335
Raef Coles2350f722022-07-19 15:19:56 +0100336 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Summer Qin614002c2023-01-19 15:22:39 +0800337@@ -1055,6 +1156,18 @@ psa_status_t psa_driver_wrapper_cipher_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100338 if( status != PSA_ERROR_NOT_SUPPORTED )
339 return( status );
340 #endif /* PSA_CRYPTO_DRIVER_TEST */
341+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
342+ status = cc3xx_cipher_decrypt( attributes,
343+ key_buffer,
344+ key_buffer_size,
345+ alg,
346+ input,
347+ input_length,
348+ output,
349+ output_size,
350+ output_length );
Raef Coles2350f722022-07-19 15:19:56 +0100351+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100352+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100353 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100354
Raef Coles2350f722022-07-19 15:19:56 +0100355 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Summer Qin614002c2023-01-19 15:22:39 +0800356@@ -1132,6 +1245,16 @@ psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100357 if( status != PSA_ERROR_NOT_SUPPORTED )
358 return( status );
359 #endif /* PSA_CRYPTO_DRIVER_TEST */
360+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
361+ status = cc3xx_cipher_encrypt_setup(
362+ &operation->ctx.cc3xx_driver_ctx,
363+ attributes,
364+ key_buffer,
365+ key_buffer_size,
366+ alg );
Raef Coles2350f722022-07-19 15:19:56 +0100367+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
368+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100369+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100370 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
371 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100372 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800373@@ -1205,6 +1328,16 @@ psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100374 if( status != PSA_ERROR_NOT_SUPPORTED )
375 return( status );
376 #endif /* PSA_CRYPTO_DRIVER_TEST */
377+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
378+ status = cc3xx_cipher_decrypt_setup(
379+ &operation->ctx.cc3xx_driver_ctx,
380+ attributes,
381+ key_buffer,
382+ key_buffer_size,
383+ alg );
Raef Coles2350f722022-07-19 15:19:56 +0100384+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
385+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100386+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100387 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
388 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100389 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800390@@ -1273,6 +1406,12 @@ psa_status_t psa_driver_wrapper_cipher_set_iv(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100391 &operation->ctx.opaque_test_driver_ctx,
392 iv, iv_length ) );
393 #endif /* PSA_CRYPTO_DRIVER_TEST */
394+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
395+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
396+ return( cc3xx_cipher_set_iv(
397+ &operation->ctx.cc3xx_driver_ctx,
398+ iv, iv_length ) );
399+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
400 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
401 }
402
Summer Qin614002c2023-01-19 15:22:39 +0800403@@ -1316,6 +1455,13 @@ psa_status_t psa_driver_wrapper_cipher_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100404 input, input_length,
405 output, output_size, output_length ) );
406 #endif /* PSA_CRYPTO_DRIVER_TEST */
407+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
408+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
409+ return( cc3xx_cipher_update(
410+ &operation->ctx.cc3xx_driver_ctx,
411+ input, input_length,
412+ output, output_size, output_length ) );
413+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
414 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
415 }
416
Summer Qin614002c2023-01-19 15:22:39 +0800417@@ -1356,6 +1502,12 @@ psa_status_t psa_driver_wrapper_cipher_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100418 &operation->ctx.opaque_test_driver_ctx,
419 output, output_size, output_length ) );
420 #endif /* PSA_CRYPTO_DRIVER_TEST */
421+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
422+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
423+ return( cc3xx_cipher_finish(
424+ &operation->ctx.cc3xx_driver_ctx,
425+ output, output_size, output_length ) );
426+#endif /* PSA_CRYPTO_DRIVER_CC3XX*/
427 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
428 }
429
Summer Qin614002c2023-01-19 15:22:39 +0800430@@ -1396,6 +1548,15 @@ psa_status_t psa_driver_wrapper_cipher_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100431 sizeof( operation->ctx.opaque_test_driver_ctx ) );
432 return( status );
433 #endif /* PSA_CRYPTO_DRIVER_TEST */
434+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
435+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
436+ status = cc3xx_cipher_abort(
437+ &operation->ctx.cc3xx_driver_ctx );
438+ mbedtls_platform_zeroize(
439+ &operation->ctx.cc3xx_driver_ctx,
440+ sizeof( operation->ctx.cc3xx_driver_ctx ) );
441+ return( status );
442+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
443 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
444 }
445
Summer Qin614002c2023-01-19 15:22:39 +0800446@@ -1417,13 +1578,19 @@ psa_status_t psa_driver_wrapper_hash_compute(
Summer Qin36f79f72022-07-05 14:53:35 +0800447 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
448
449 /* Try accelerators first */
450+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
451 #if defined(PSA_CRYPTO_DRIVER_TEST)
452 status = mbedtls_test_transparent_hash_compute(
453 alg, input, input_length, hash, hash_size, hash_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100454 if( status != PSA_ERROR_NOT_SUPPORTED )
455 return( status );
Raef Coles2350f722022-07-19 15:19:56 +0100456-#endif
Summer Qin36f79f72022-07-05 14:53:35 +0800457-
Raef Coles2350f722022-07-19 15:19:56 +0100458+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100459+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
460+ status = cc3xx_hash_compute(alg, input, input_length, hash, hash_size,
461+ hash_length);
Raef Coles2350f722022-07-19 15:19:56 +0100462+ return status;
463+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
464+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100465 /* If software fallback is compiled in, try fallback */
Raef Coles2350f722022-07-19 15:19:56 +0100466 #if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800467 status = mbedtls_psa_hash_compute( alg, input, input_length,
Summer Qin614002c2023-01-19 15:22:39 +0800468@@ -1449,6 +1616,7 @@ psa_status_t psa_driver_wrapper_hash_setup(
Summer Qin36f79f72022-07-05 14:53:35 +0800469 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
470
471 /* Try setup on accelerators first */
472+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
473 #if defined(PSA_CRYPTO_DRIVER_TEST)
474 status = mbedtls_test_transparent_hash_setup(
475 &operation->ctx.test_driver_ctx, alg );
Summer Qin614002c2023-01-19 15:22:39 +0800476@@ -1457,17 +1625,23 @@ psa_status_t psa_driver_wrapper_hash_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100477
Raef Coles2350f722022-07-19 15:19:56 +0100478 if( status != PSA_ERROR_NOT_SUPPORTED )
479 return( status );
480-#endif
481+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100482+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
483+ status = cc3xx_hash_setup(&operation->ctx.cc3xx_driver_ctx, alg);
Raef Coles2350f722022-07-19 15:19:56 +0100484+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
485+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100486+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100487+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
488
489- /* If software fallback is compiled in, try fallback */
490 #if defined(MBEDTLS_PSA_BUILTIN_HASH)
491+ /* If software fallback is compiled in, try fallback */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100492 status = mbedtls_psa_hash_setup( &operation->ctx.mbedtls_ctx, alg );
Summer Qin36f79f72022-07-05 14:53:35 +0800493 if( status == PSA_SUCCESS )
494 operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
Raef Coles2350f722022-07-19 15:19:56 +0100495
496 if( status != PSA_ERROR_NOT_SUPPORTED )
497 return( status );
498-#endif
499+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
500 /* Nothing left to try if we fall through here */
501 (void) status;
502 (void) operation;
Summer Qin614002c2023-01-19 15:22:39 +0800503@@ -1481,19 +1655,29 @@ psa_status_t psa_driver_wrapper_hash_clone(
Summer Qin36f79f72022-07-05 14:53:35 +0800504 {
505 switch( source_operation->id )
506 {
507-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
508- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
509- target_operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
510- return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
511- &target_operation->ctx.mbedtls_ctx ) );
512-#endif
513+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
514 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800515 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
516 target_operation->id = MBEDTLS_TEST_TRANSPARENT_DRIVER_ID;
Summer Qin36f79f72022-07-05 14:53:35 +0800517 return( mbedtls_test_transparent_hash_clone(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100518 &source_operation->ctx.test_driver_ctx,
519 &target_operation->ctx.test_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100520-#endif
521+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100522+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
523+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
524+ target_operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
525+ return( cc3xx_hash_clone(
526+ &source_operation->ctx.cc3xx_driver_ctx,
527+ &target_operation->ctx.cc3xx_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100528+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100529+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100530+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
531+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800532+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
533+ target_operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
534+ return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
535+ &target_operation->ctx.mbedtls_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100536+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100537 default:
538 (void) target_operation;
Raef Coles2350f722022-07-19 15:19:56 +0100539 return( PSA_ERROR_BAD_STATE );
Summer Qin614002c2023-01-19 15:22:39 +0800540@@ -1507,17 +1691,25 @@ psa_status_t psa_driver_wrapper_hash_update(
Summer Qin36f79f72022-07-05 14:53:35 +0800541 {
542 switch( operation->id )
543 {
544-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
545- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
546- return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
547- input, input_length ) );
548-#endif
549+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
550 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800551 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
Summer Qin36f79f72022-07-05 14:53:35 +0800552 return( mbedtls_test_transparent_hash_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100553 &operation->ctx.test_driver_ctx,
554 input, input_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100555-#endif
556+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100557+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
558+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
559+ return( cc3xx_hash_update(
560+ &operation->ctx.cc3xx_driver_ctx,
561+ input, input_length ) );
562+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100563+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
564+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800565+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
566+ return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
567+ input, input_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100568+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100569 default:
570 (void) input;
Raef Coles2350f722022-07-19 15:19:56 +0100571 (void) input_length;
Summer Qin614002c2023-01-19 15:22:39 +0800572@@ -1533,17 +1725,25 @@ psa_status_t psa_driver_wrapper_hash_finish(
Summer Qin36f79f72022-07-05 14:53:35 +0800573 {
574 switch( operation->id )
575 {
576-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
577- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
578- return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
579- hash, hash_size, hash_length ) );
580-#endif
581+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
582 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800583 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
Summer Qin36f79f72022-07-05 14:53:35 +0800584 return( mbedtls_test_transparent_hash_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100585 &operation->ctx.test_driver_ctx,
586 hash, hash_size, hash_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100587-#endif
588+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100589+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
590+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
591+ return( cc3xx_hash_finish(
592+ &operation->ctx.cc3xx_driver_ctx,
593+ hash, hash_size, hash_length ) );
594+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100595+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
596+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800597+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
598+ return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
599+ hash, hash_size, hash_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100600+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100601 default:
602 (void) hash;
Raef Coles2350f722022-07-19 15:19:56 +0100603 (void) hash_size;
Summer Qin614002c2023-01-19 15:22:39 +0800604@@ -1557,15 +1757,22 @@ psa_status_t psa_driver_wrapper_hash_abort(
Summer Qin36f79f72022-07-05 14:53:35 +0800605 {
606 switch( operation->id )
607 {
608-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
609- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
610- return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
611-#endif
612+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
613 #if defined(PSA_CRYPTO_DRIVER_TEST)
Summer Qin614002c2023-01-19 15:22:39 +0800614 case MBEDTLS_TEST_TRANSPARENT_DRIVER_ID:
Antonio de Angelis86b98312021-12-17 21:42:40 +0100615 return( mbedtls_test_transparent_hash_abort(
616 &operation->ctx.test_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100617-#endif
618+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100619+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
620+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
621+ return( cc3xx_hash_abort(
622+ &operation->ctx.cc3xx_driver_ctx ) );
623+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100624+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
625+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800626+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
627+ return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100628+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100629 default:
630 return( PSA_ERROR_BAD_STATE );
Raef Coles2350f722022-07-19 15:19:56 +0100631 }
Summer Qin614002c2023-01-19 15:22:39 +0800632@@ -1603,6 +1810,17 @@ psa_status_t psa_driver_wrapper_aead_encrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100633 if( status != PSA_ERROR_NOT_SUPPORTED )
634 return( status );
635 #endif /* PSA_CRYPTO_DRIVER_TEST */
636+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
637+ status = cc3xx_aead_encrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100638+ attributes, key_buffer, key_buffer_size,
639+ alg,
640+ nonce, nonce_length,
641+ additional_data, additional_data_length,
642+ plaintext, plaintext_length,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100643+ ciphertext, ciphertext_size, ciphertext_length );
644+
Raef Coles2350f722022-07-19 15:19:56 +0100645+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100646+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100647 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100648
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100649 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800650@@ -1655,6 +1873,17 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100651 if( status != PSA_ERROR_NOT_SUPPORTED )
652 return( status );
653 #endif /* PSA_CRYPTO_DRIVER_TEST */
654+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
655+ status = cc3xx_aead_decrypt(
656+ attributes, key_buffer, key_buffer_size,
657+ alg,
658+ nonce, nonce_length,
659+ additional_data, additional_data_length,
660+ ciphertext, ciphertext_length,
661+ plaintext, plaintext_size, plaintext_length );
662+
Raef Coles2350f722022-07-19 15:19:56 +0100663+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100664+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100665 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100666
667 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800668@@ -1703,6 +1932,15 @@ psa_status_t psa_driver_wrapper_aead_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100669 if( status != PSA_ERROR_NOT_SUPPORTED )
670 return( status );
671 #endif /* PSA_CRYPTO_DRIVER_TEST */
672+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
673+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
674+ status = cc3xx_aead_encrypt_setup(
675+ &operation->ctx.cc3xx_driver_ctx,
676+ attributes, key_buffer, key_buffer_size,
677+ alg );
678+
Raef Coles2350f722022-07-19 15:19:56 +0100679+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100680+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100681 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100682
683 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800684@@ -1752,6 +1990,16 @@ psa_status_t psa_driver_wrapper_aead_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100685 if( status != PSA_ERROR_NOT_SUPPORTED )
686 return( status );
687 #endif /* PSA_CRYPTO_DRIVER_TEST */
688+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
689+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
690+ status = cc3xx_aead_decrypt_setup(
691+ &operation->ctx.cc3xx_driver_ctx,
692+ attributes,
693+ key_buffer, key_buffer_size,
694+ alg );
695+
Raef Coles2350f722022-07-19 15:19:56 +0100696+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100697+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100698 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100699
700 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800701@@ -1798,6 +2046,13 @@ psa_status_t psa_driver_wrapper_aead_set_nonce(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100702 /* Add cases for opaque driver here */
703
704 #endif /* PSA_CRYPTO_DRIVER_TEST */
705+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
706+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
707+ return( cc3xx_aead_set_nonce(
708+ &operation->ctx.cc3xx_driver_ctx,
709+ nonce, nonce_length ) );
710+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100711+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
712 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
713 }
714
Summer Qin614002c2023-01-19 15:22:39 +0800715@@ -1832,6 +2087,13 @@ psa_status_t psa_driver_wrapper_aead_set_lengths(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100716 /* Add cases for opaque driver here */
717
718 #endif /* PSA_CRYPTO_DRIVER_TEST */
719+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
720+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
721+ return( cc3xx_aead_set_lengths(
722+ &operation->ctx.cc3xx_driver_ctx,
723+ ad_length, plaintext_length ) );
724+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100725+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
726 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
727 }
728
Summer Qin614002c2023-01-19 15:22:39 +0800729@@ -1866,6 +2128,13 @@ psa_status_t psa_driver_wrapper_aead_update_ad(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100730 /* Add cases for opaque driver here */
731
732 #endif /* PSA_CRYPTO_DRIVER_TEST */
733+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
734+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
735+ return( cc3xx_aead_update_ad(
736+ &operation->ctx.cc3xx_driver_ctx,
737+ input, input_length ) );
738+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100739+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
740 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
741 }
742
Summer Qin614002c2023-01-19 15:22:39 +0800743@@ -1905,6 +2174,14 @@ psa_status_t psa_driver_wrapper_aead_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100744 /* Add cases for opaque driver here */
745
746 #endif /* PSA_CRYPTO_DRIVER_TEST */
747+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
748+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
749+ return( cc3xx_aead_update(
750+ &operation->ctx.cc3xx_driver_ctx,
751+ input, input_length, output, output_size,
752+ output_length ) );
753+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100754+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
755 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
756 }
757
Summer Qin614002c2023-01-19 15:22:39 +0800758@@ -1949,6 +2226,14 @@ psa_status_t psa_driver_wrapper_aead_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100759 /* Add cases for opaque driver here */
760
761 #endif /* PSA_CRYPTO_DRIVER_TEST */
762+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
763+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
764+ return( cc3xx_aead_finish(
765+ &operation->ctx.cc3xx_driver_ctx,
766+ ciphertext, ciphertext_size,
767+ ciphertext_length, tag, tag_size, tag_length ) );
768+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100769+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
770 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
771 }
772
Summer Qin614002c2023-01-19 15:22:39 +0800773@@ -2013,6 +2298,14 @@ psa_status_t psa_driver_wrapper_aead_verify(
Raef Coles2350f722022-07-19 15:19:56 +0100774 /* Add cases for opaque driver here */
775
776 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100777+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
778+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
779+ return( cc3xx_aead_verify(
780+ &operation->ctx.cc3xx_driver_ctx,
781+ plaintext, plaintext_size,
782+ plaintext_length, tag, tag_length ) );
783+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100784+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
785 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
786 }
787
Summer Qin614002c2023-01-19 15:22:39 +0800788@@ -2045,6 +2338,12 @@ psa_status_t psa_driver_wrapper_aead_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100789 /* Add cases for opaque driver here */
790
791 #endif /* PSA_CRYPTO_DRIVER_TEST */
792+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
793+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
794+ return( cc3xx_aead_abort(
795+ &operation->ctx.cc3xx_driver_ctx ) );
796+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100797+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
798 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
799 }
800
Summer Qin614002c2023-01-19 15:22:39 +0800801@@ -2084,6 +2383,12 @@ psa_status_t psa_driver_wrapper_mac_compute(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100802 if( status != PSA_ERROR_NOT_SUPPORTED )
803 return( status );
804 #endif /* PSA_CRYPTO_DRIVER_TEST */
805+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
806+ status = cc3xx_mac_compute(attributes, key_buffer, key_buffer_size, alg,
807+ input, input_length,
808+ mac, mac_size, mac_length);
Raef Coles2350f722022-07-19 15:19:56 +0100809+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100810+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100811 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
812 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100813 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800814@@ -2152,6 +2457,15 @@ psa_status_t psa_driver_wrapper_mac_sign_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100815 if( status != PSA_ERROR_NOT_SUPPORTED )
816 return( status );
817 #endif /* PSA_CRYPTO_DRIVER_TEST */
818+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
819+ status = cc3xx_mac_sign_setup(
820+ &operation->ctx.cc3xx_driver_ctx,
821+ attributes,
822+ key_buffer, key_buffer_size,
823+ alg);
Raef Coles2350f722022-07-19 15:19:56 +0100824+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
825+ return status;
826+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
827 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
828 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100829 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800830@@ -2224,6 +2538,15 @@ psa_status_t psa_driver_wrapper_mac_verify_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100831 if( status != PSA_ERROR_NOT_SUPPORTED )
832 return( status );
833 #endif /* PSA_CRYPTO_DRIVER_TEST */
834+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
835+ status = cc3xx_mac_verify_setup(
836+ &operation->ctx.cc3xx_driver_ctx,
837+ attributes,
838+ key_buffer, key_buffer_size,
839+ alg);
Raef Coles2350f722022-07-19 15:19:56 +0100840+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
841+ return status;
842+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
843 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
844 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100845 /* Fell through, meaning no accelerator supports this operation */
Summer Qin614002c2023-01-19 15:22:39 +0800846@@ -2291,6 +2614,10 @@ psa_status_t psa_driver_wrapper_mac_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100847 &operation->ctx.opaque_test_driver_ctx,
848 input, input_length ) );
849 #endif /* PSA_CRYPTO_DRIVER_TEST */
850+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
851+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
852+ return(cc3xx_mac_update(&operation->ctx.cc3xx_driver_ctx, input, input_length));
Raef Coles2350f722022-07-19 15:19:56 +0100853+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100854 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
855 default:
856 (void) input;
Summer Qin614002c2023-01-19 15:22:39 +0800857@@ -2325,6 +2652,11 @@ psa_status_t psa_driver_wrapper_mac_sign_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100858 &operation->ctx.opaque_test_driver_ctx,
859 mac, mac_size, mac_length ) );
860 #endif /* PSA_CRYPTO_DRIVER_TEST */
861+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
862+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
863+ return(cc3xx_mac_sign_finish(&operation->ctx.cc3xx_driver_ctx,
864+ mac, mac_size, mac_length));
Raef Coles2350f722022-07-19 15:19:56 +0100865+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100866 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
867 default:
868 (void) mac;
Summer Qin614002c2023-01-19 15:22:39 +0800869@@ -2359,6 +2691,12 @@ psa_status_t psa_driver_wrapper_mac_verify_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100870 &operation->ctx.opaque_test_driver_ctx,
871 mac, mac_length ) );
872 #endif /* PSA_CRYPTO_DRIVER_TEST */
873+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
874+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
875+ return(cc3xx_mac_verify_finish(
876+ &operation->ctx.cc3xx_driver_ctx,
877+ mac, mac_length));
Raef Coles2350f722022-07-19 15:19:56 +0100878+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100879 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
880 default:
881 (void) mac;
Summer Qin614002c2023-01-19 15:22:39 +0800882@@ -2386,6 +2724,10 @@ psa_status_t psa_driver_wrapper_mac_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100883 return( mbedtls_test_opaque_mac_abort(
884 &operation->ctx.opaque_test_driver_ctx ) );
885 #endif /* PSA_CRYPTO_DRIVER_TEST */
886+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
887+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
888+ return(cc3xx_mac_abort(&operation->ctx.cc3xx_driver_ctx));
Raef Coles2350f722022-07-19 15:19:56 +0100889+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100890 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
891 default:
892 return( PSA_ERROR_INVALID_ARGUMENT );
Summer Qin614002c2023-01-19 15:22:39 +0800893@@ -2411,6 +2753,20 @@ psa_status_t psa_driver_wrapper_asymmetric_encrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100894 /* Key is stored in the slot in export representation, so
895 * cycle through all known transparent accelerators */
896 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100897+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
898+ status = cc3xx_asymmetric_encrypt( attributes,
899+ key_buffer,
900+ key_buffer_size,
901+ alg,
902+ input,
903+ input_length,
904+ salt,
905+ salt_length,
906+ output,
907+ output_size,
908+ output_length );
909+ return( status );
910+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100911 #if defined(PSA_CRYPTO_DRIVER_TEST)
912 status = mbedtls_test_transparent_asymmetric_encrypt( attributes,
913 key_buffer, key_buffer_size, alg, input, input_length,
Summer Qin614002c2023-01-19 15:22:39 +0800914@@ -2469,6 +2825,20 @@ psa_status_t psa_driver_wrapper_asymmetric_decrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100915 /* Key is stored in the slot in export representation, so
916 * cycle through all known transparent accelerators */
917 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100918+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
919+ status = cc3xx_asymmetric_decrypt( attributes,
920+ key_buffer,
921+ key_buffer_size,
922+ alg,
923+ input,
924+ input_length,
925+ salt,
926+ salt_length,
927+ output,
928+ output_size,
929+ output_length );
930+ return( status );
931+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100932 #if defined(PSA_CRYPTO_DRIVER_TEST)
933 status = mbedtls_test_transparent_asymmetric_decrypt( attributes,
934 key_buffer, key_buffer_size, alg, input, input_length,
Summer Qin614002c2023-01-19 15:22:39 +0800935@@ -2542,6 +2912,18 @@ psa_status_t psa_driver_wrapper_key_agreement(
936 if( status != PSA_ERROR_NOT_SUPPORTED )
937 return( status );
938 #endif /* PSA_CRYPTO_DRIVER_TEST */
939+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
940+ status = cc3xx_key_agreement( attributes,
941+ key_buffer,
942+ key_buffer_size,
943+ peer_key,
944+ peer_key_length,
945+ shared_secret,
946+ shared_secret_size,
947+ shared_secret_length,
948+ alg );
949+ return( status );
950+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
951 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100952
Summer Qin614002c2023-01-19 15:22:39 +0800953 /* Software Fallback */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100954--
Antonio de Angelis2718b582022-08-23 14:58:40 +01009552.25.1
Antonio de Angelis86b98312021-12-17 21:42:40 +0100956