blob: bf69e64bf6ff5aa6068677b9d804f48eb42f424e [file] [log] [blame]
Raef Coles2350f722022-07-19 15:19:56 +01001From 5dc86b266f0372a733f03db6d91003f134e1f51f 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
Raef Coles2350f722022-07-19 15:19:56 +01004Subject: [PATCH 4/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 +
Antonio de Angelis90bee0f2022-07-13 11:22:41 +010019 library/psa_crypto.c | 21 +-
Raef Coles2350f722022-07-19 15:19:56 +010020 library/psa_crypto_driver_wrappers.c | 546 ++++++++++++++++--
Antonio de Angelis90bee0f2022-07-13 11:22:41 +010021 library/psa_crypto_driver_wrappers.h | 14 +
Raef Coles2350f722022-07-19 15:19:56 +010022 5 files changed, 536 insertions(+), 63 deletions(-)
Antonio de Angelis86b98312021-12-17 21:42:40 +010023
24diff --git a/include/psa/crypto_driver_contexts_composites.h b/include/psa/crypto_driver_contexts_composites.h
Antonio de Angelis90bee0f2022-07-13 11:22:41 +010025index 3f1c8af4b..2fdf9561f 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010026--- a/include/psa/crypto_driver_contexts_composites.h
27+++ b/include/psa/crypto_driver_contexts_composites.h
28@@ -41,6 +41,9 @@
29
30 /* Include the context structure definitions for those drivers that were
31 * declared during the autogeneration process. */
32+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
33+#include "cc3xx_crypto_primitives_private.h"
34+#endif
35
36 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
37 #include <libtestdriver1/include/psa/crypto.h>
38@@ -104,6 +107,9 @@ typedef union {
39 mbedtls_transparent_test_driver_mac_operation_t transparent_test_driver_ctx;
40 mbedtls_opaque_test_driver_mac_operation_t opaque_test_driver_ctx;
41 #endif
42+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
43+ cc3xx_mac_operation_t cc3xx_driver_ctx;
44+#endif
45 } psa_driver_mac_context_t;
46
47 typedef union {
48@@ -112,6 +118,9 @@ typedef union {
49 #if defined(PSA_CRYPTO_DRIVER_TEST)
50 mbedtls_transparent_test_driver_aead_operation_t transparent_test_driver_ctx;
51 #endif
52+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
53+ cc3xx_aead_operation_t cc3xx_driver_ctx;
54+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
55 } psa_driver_aead_context_t;
56
57 #endif /* PSA_CRYPTO_DRIVER_CONTEXTS_COMPOSITES_H */
58diff --git a/include/psa/crypto_driver_contexts_primitives.h b/include/psa/crypto_driver_contexts_primitives.h
Antonio de Angelis90bee0f2022-07-13 11:22:41 +010059index 2bb01ed43..2bc0bda70 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010060--- a/include/psa/crypto_driver_contexts_primitives.h
61+++ b/include/psa/crypto_driver_contexts_primitives.h
62@@ -40,6 +40,9 @@
63
64 /* Include the context structure definitions for those drivers that were
65 * declared during the autogeneration process. */
66+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
67+#include "cc3xx_crypto_primitives_private.h"
68+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
69
70 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
71 #include <libtestdriver1/include/psa/crypto.h>
72@@ -102,6 +105,9 @@ typedef union {
73 #if defined(PSA_CRYPTO_DRIVER_TEST)
74 mbedtls_transparent_test_driver_hash_operation_t test_driver_ctx;
75 #endif
76+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
77+ cc3xx_hash_operation_t cc3xx_driver_ctx;
78+#endif
79 } psa_driver_hash_context_t;
80
81 typedef union {
82@@ -111,6 +117,9 @@ typedef union {
83 mbedtls_transparent_test_driver_cipher_operation_t transparent_test_driver_ctx;
84 mbedtls_opaque_test_driver_cipher_operation_t opaque_test_driver_ctx;
85 #endif
86+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
87+ cc3xx_cipher_operation_t cc3xx_driver_ctx;
88+#endif
89 } psa_driver_cipher_context_t;
90
91 #endif /* PSA_CRYPTO_DRIVER_CONTEXTS_PRIMITIVES_H */
92diff --git a/library/psa_crypto.c b/library/psa_crypto.c
Antonio de Angelis90bee0f2022-07-13 11:22:41 +010093index b0116ddfb..0e33f409c 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010094--- a/library/psa_crypto.c
95+++ b/library/psa_crypto.c
Antonio de Angelis90bee0f2022-07-13 11:22:41 +010096@@ -5862,11 +5862,24 @@ psa_status_t psa_raw_key_agreement( psa_algorithm_t alg,
Antonio de Angelis86b98312021-12-17 21:42:40 +010097 goto exit;
98 }
99
Antonio de Angelis86b98312021-12-17 21:42:40 +0100100- status = psa_key_agreement_raw_internal( alg, slot,
101- peer_key, peer_key_length,
102- output, output_size,
103- output_length );
104+ psa_key_attributes_t attributes = {
105+ .core = slot->attr
106+ };
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100107+
108+ status = psa_driver_wrapper_key_agreement( alg, &attributes,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100109+ slot->key.data,
110+ slot->key.bytes,
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100111+ peer_key, peer_key_length,
112+ output, output_size,
113+ output_length );
114
115+ if (status == PSA_ERROR_NOT_SUPPORTED)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100116+ {
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100117+ status = psa_key_agreement_raw_internal( alg, slot,
118+ peer_key, peer_key_length,
119+ output, output_size,
120+ output_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100121+ }
122 exit:
123 if( status != PSA_SUCCESS )
124 {
125diff --git a/library/psa_crypto_driver_wrappers.c b/library/psa_crypto_driver_wrappers.c
Raef Coles2350f722022-07-19 15:19:56 +0100126index a5ae6a29e..af8456f6e 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +0100127--- a/library/psa_crypto_driver_wrappers.c
128+++ b/library/psa_crypto_driver_wrappers.c
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100129@@ -45,6 +45,16 @@
Antonio de Angelis86b98312021-12-17 21:42:40 +0100130 #include "test/drivers/test_driver.h"
131 #endif /* PSA_CRYPTO_DRIVER_TEST */
132
133+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
134+#ifndef PSA_CRYPTO_DRIVER_PRESENT
135+#define PSA_CRYPTO_DRIVER_PRESENT
136+#endif
137+#ifndef PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
138+#define PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
139+#endif
140+#include "cc3xx.h"
141+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
142+
143 /* Repeat above block for each JSON-declared driver during autogeneration */
144 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS */
145
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100146@@ -58,6 +68,10 @@
Antonio de Angelis86b98312021-12-17 21:42:40 +0100147 #define PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID (3)
148 #endif /* PSA_CRYPTO_DRIVER_TEST */
149
150+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
151+#define PSA_CRYPTO_CC3XX_DRIVER_ID (4)
152+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
153+
154 /* Support the 'old' SE interface when asked to */
155 #if defined(MBEDTLS_PSA_CRYPTO_SE_C)
156 /* PSA_CRYPTO_DRIVER_PRESENT is defined when either a new-style or old-style
Raef Coles2350f722022-07-19 15:19:56 +0100157@@ -143,8 +157,30 @@ psa_status_t psa_driver_wrapper_sign_message(
158 if( status != PSA_ERROR_NOT_SUPPORTED )
159 return( status );
160 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100161+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
162+ status = cc3xx_sign_message(
163+ attributes,
164+ key_buffer,
165+ key_buffer_size,
166+ alg,
167+ input,
168+ input_length,
169+ signature,
170+ signature_size,
171+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100172+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100173+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100174 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
175- break;
Summer Qin36f79f72022-07-05 14:53:35 +0800176+ /* Fell through, meaning no accelerator supports this operation */
177+ return( psa_sign_message_builtin( attributes,
178+ key_buffer,
179+ key_buffer_size,
180+ alg,
181+ input,
182+ input_length,
183+ signature,
184+ signature_size,
185+ signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800186
187 /* Add cases for opaque driver here */
188 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Raef Coles2350f722022-07-19 15:19:56 +0100189@@ -168,18 +204,9 @@ psa_status_t psa_driver_wrapper_sign_message(
Summer Qin36f79f72022-07-05 14:53:35 +0800190 default:
191 /* Key is declared with a lifetime not known to us */
192 (void)status;
193- break;
194+ return( PSA_ERROR_INVALID_ARGUMENT );
195 }
196-
197- return( psa_sign_message_builtin( attributes,
198- key_buffer,
199- key_buffer_size,
200- alg,
201- input,
202- input_length,
203- signature,
204- signature_size,
205- signature_length ) );
206+ return status;
207 }
208
209 psa_status_t psa_driver_wrapper_verify_message(
Raef Coles2350f722022-07-19 15:19:56 +0100210@@ -216,8 +243,28 @@ psa_status_t psa_driver_wrapper_verify_message(
211 if( status != PSA_ERROR_NOT_SUPPORTED )
212 return( status );
213 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100214+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
215+ status = cc3xx_verify_message(
216+ attributes,
217+ key_buffer,
218+ key_buffer_size,
219+ alg,
220+ input,
221+ input_length,
222+ signature,
223+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100224+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100225+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100226 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
227- break;
Summer Qin36f79f72022-07-05 14:53:35 +0800228+ /* Fell through, meaning no accelerator supports this operation */
229+ return( psa_verify_message_builtin( attributes,
230+ key_buffer,
231+ key_buffer_size,
232+ alg,
233+ input,
234+ input_length,
235+ signature,
236+ signature_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800237
238 /* Add cases for opaque driver here */
239 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Raef Coles2350f722022-07-19 15:19:56 +0100240@@ -240,17 +287,9 @@ psa_status_t psa_driver_wrapper_verify_message(
Summer Qin36f79f72022-07-05 14:53:35 +0800241 default:
242 /* Key is declared with a lifetime not known to us */
243 (void)status;
244- break;
245+ return( PSA_ERROR_INVALID_ARGUMENT );
246 }
247-
248- return( psa_verify_message_builtin( attributes,
249- key_buffer,
250- key_buffer_size,
251- alg,
252- input,
253- input_length,
254- signature,
255- signature_length ) );
256+ return status;
257 }
258
259 psa_status_t psa_driver_wrapper_sign_hash(
Raef Coles2350f722022-07-19 15:19:56 +0100260@@ -303,6 +342,18 @@ psa_status_t psa_driver_wrapper_sign_hash(
261 if( status != PSA_ERROR_NOT_SUPPORTED )
262 return( status );
263 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100264+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
265+ status = cc3xx_sign_hash( attributes,
266+ key_buffer,
267+ key_buffer_size,
268+ alg,
269+ hash,
270+ hash_length,
271+ signature,
272+ signature_size,
273+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100274+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100275+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100276 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Summer Qin36f79f72022-07-05 14:53:35 +0800277 /* Fell through, meaning no accelerator supports this operation */
278 return( psa_sign_hash_builtin( attributes,
Raef Coles2350f722022-07-19 15:19:56 +0100279@@ -373,6 +424,17 @@ psa_status_t psa_driver_wrapper_verify_hash(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100280 /* Key is stored in the slot in export representation, so
281 * cycle through all known transparent accelerators */
282 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
283+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
284+ status = cc3xx_verify_hash( attributes,
285+ key_buffer,
286+ key_buffer_size,
287+ alg,
288+ hash,
289+ hash_length,
290+ signature,
291+ signature_length );
Raef Coles2350f722022-07-19 15:19:56 +0100292+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100293+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
294 #if defined(PSA_CRYPTO_DRIVER_TEST)
295 status = mbedtls_test_transparent_signature_verify_hash(
296 attributes,
Raef Coles2350f722022-07-19 15:19:56 +0100297@@ -548,6 +610,12 @@ psa_status_t psa_driver_wrapper_generate_key(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100298 if( PSA_KEY_TYPE_IS_ASYMMETRIC( attributes->core.type ) )
299 {
300 /* Cycle through all known transparent accelerators */
301+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
Summer Qin36f79f72022-07-05 14:53:35 +0800302+ status = cc3xx_generate_key(
303+ attributes, key_buffer, key_buffer_size,
304+ key_buffer_length );
Raef Coles2350f722022-07-19 15:19:56 +0100305+ break;
Antonio de Angelis86b98312021-12-17 21:42:40 +0100306+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
307 #if defined(PSA_CRYPTO_DRIVER_TEST)
308 status = mbedtls_test_transparent_generate_key(
309 attributes, key_buffer, key_buffer_size,
Raef Coles2350f722022-07-19 15:19:56 +0100310@@ -771,6 +839,16 @@ psa_status_t psa_driver_wrapper_export_public_key(
311 if( status != PSA_ERROR_NOT_SUPPORTED )
312 return( status );
313 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100314+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
315+ status = cc3xx_export_public_key(
316+ attributes,
317+ key_buffer,
318+ key_buffer_size,
319+ data,
320+ data_size,
321+ data_length );
Raef Coles2350f722022-07-19 15:19:56 +0100322+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100323+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100324 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Summer Qin36f79f72022-07-05 14:53:35 +0800325 /* Fell through, meaning no accelerator supports this operation */
326 return( psa_export_public_key_internal( attributes,
Raef Coles2350f722022-07-19 15:19:56 +0100327@@ -908,6 +986,20 @@ psa_status_t psa_driver_wrapper_cipher_encrypt(
Summer Qin36f79f72022-07-05 14:53:35 +0800328 if( status != PSA_ERROR_NOT_SUPPORTED )
329 return( status );
330 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100331+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
332+ status = cc3xx_cipher_encrypt( attributes,
333+ key_buffer,
334+ key_buffer_size,
335+ alg,
336+ iv,
337+ iv_length,
338+ input,
339+ input_length,
340+ output,
341+ output_size,
342+ output_length );
Raef Coles2350f722022-07-19 15:19:56 +0100343+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100344+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100345 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100346
Raef Coles2350f722022-07-19 15:19:56 +0100347 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
348@@ -996,6 +1088,18 @@ psa_status_t psa_driver_wrapper_cipher_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100349 if( status != PSA_ERROR_NOT_SUPPORTED )
350 return( status );
351 #endif /* PSA_CRYPTO_DRIVER_TEST */
352+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
353+ status = cc3xx_cipher_decrypt( attributes,
354+ key_buffer,
355+ key_buffer_size,
356+ alg,
357+ input,
358+ input_length,
359+ output,
360+ output_size,
361+ output_length );
Raef Coles2350f722022-07-19 15:19:56 +0100362+ 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 */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100365
Raef Coles2350f722022-07-19 15:19:56 +0100366 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
367@@ -1073,6 +1177,16 @@ psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100368 if( status != PSA_ERROR_NOT_SUPPORTED )
369 return( status );
370 #endif /* PSA_CRYPTO_DRIVER_TEST */
371+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
372+ status = cc3xx_cipher_encrypt_setup(
373+ &operation->ctx.cc3xx_driver_ctx,
374+ attributes,
375+ key_buffer,
376+ key_buffer_size,
377+ alg );
Raef Coles2350f722022-07-19 15:19:56 +0100378+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
379+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100380+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100381 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
382 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100383 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100384@@ -1146,6 +1260,16 @@ psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100385 if( status != PSA_ERROR_NOT_SUPPORTED )
386 return( status );
387 #endif /* PSA_CRYPTO_DRIVER_TEST */
388+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
389+ status = cc3xx_cipher_decrypt_setup(
390+ &operation->ctx.cc3xx_driver_ctx,
391+ attributes,
392+ key_buffer,
393+ key_buffer_size,
394+ alg );
Raef Coles2350f722022-07-19 15:19:56 +0100395+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
396+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100397+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100398 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
399 #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100400 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100401@@ -1214,6 +1338,12 @@ psa_status_t psa_driver_wrapper_cipher_set_iv(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100402 &operation->ctx.opaque_test_driver_ctx,
403 iv, iv_length ) );
404 #endif /* PSA_CRYPTO_DRIVER_TEST */
405+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
406+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
407+ return( cc3xx_cipher_set_iv(
408+ &operation->ctx.cc3xx_driver_ctx,
409+ iv, iv_length ) );
410+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
411 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
412 }
413
Raef Coles2350f722022-07-19 15:19:56 +0100414@@ -1257,6 +1387,13 @@ psa_status_t psa_driver_wrapper_cipher_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100415 input, input_length,
416 output, output_size, output_length ) );
417 #endif /* PSA_CRYPTO_DRIVER_TEST */
418+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
419+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
420+ return( cc3xx_cipher_update(
421+ &operation->ctx.cc3xx_driver_ctx,
422+ input, input_length,
423+ output, output_size, output_length ) );
424+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
425 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
426 }
427
Raef Coles2350f722022-07-19 15:19:56 +0100428@@ -1297,6 +1434,12 @@ psa_status_t psa_driver_wrapper_cipher_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100429 &operation->ctx.opaque_test_driver_ctx,
430 output, output_size, output_length ) );
431 #endif /* PSA_CRYPTO_DRIVER_TEST */
432+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
433+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
434+ return( cc3xx_cipher_finish(
435+ &operation->ctx.cc3xx_driver_ctx,
436+ output, output_size, output_length ) );
437+#endif /* PSA_CRYPTO_DRIVER_CC3XX*/
438 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
439 }
440
Raef Coles2350f722022-07-19 15:19:56 +0100441@@ -1337,6 +1480,15 @@ psa_status_t psa_driver_wrapper_cipher_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100442 sizeof( operation->ctx.opaque_test_driver_ctx ) );
443 return( status );
444 #endif /* PSA_CRYPTO_DRIVER_TEST */
445+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
446+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
447+ status = cc3xx_cipher_abort(
448+ &operation->ctx.cc3xx_driver_ctx );
449+ mbedtls_platform_zeroize(
450+ &operation->ctx.cc3xx_driver_ctx,
451+ sizeof( operation->ctx.cc3xx_driver_ctx ) );
452+ return( status );
453+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
454 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
455 }
456
Raef Coles2350f722022-07-19 15:19:56 +0100457@@ -1358,13 +1510,19 @@ psa_status_t psa_driver_wrapper_hash_compute(
Summer Qin36f79f72022-07-05 14:53:35 +0800458 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
459
460 /* Try accelerators first */
461+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
462 #if defined(PSA_CRYPTO_DRIVER_TEST)
463 status = mbedtls_test_transparent_hash_compute(
464 alg, input, input_length, hash, hash_size, hash_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100465 if( status != PSA_ERROR_NOT_SUPPORTED )
466 return( status );
Raef Coles2350f722022-07-19 15:19:56 +0100467-#endif
Summer Qin36f79f72022-07-05 14:53:35 +0800468-
Raef Coles2350f722022-07-19 15:19:56 +0100469+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100470+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
471+ status = cc3xx_hash_compute(alg, input, input_length, hash, hash_size,
472+ hash_length);
Raef Coles2350f722022-07-19 15:19:56 +0100473+ return status;
474+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
475+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100476 /* If software fallback is compiled in, try fallback */
Raef Coles2350f722022-07-19 15:19:56 +0100477 #if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800478 status = mbedtls_psa_hash_compute( alg, input, input_length,
Raef Coles2350f722022-07-19 15:19:56 +0100479@@ -1390,6 +1548,7 @@ psa_status_t psa_driver_wrapper_hash_setup(
Summer Qin36f79f72022-07-05 14:53:35 +0800480 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
481
482 /* Try setup on accelerators first */
483+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
484 #if defined(PSA_CRYPTO_DRIVER_TEST)
485 status = mbedtls_test_transparent_hash_setup(
486 &operation->ctx.test_driver_ctx, alg );
Raef Coles2350f722022-07-19 15:19:56 +0100487@@ -1398,17 +1557,23 @@ psa_status_t psa_driver_wrapper_hash_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100488
Raef Coles2350f722022-07-19 15:19:56 +0100489 if( status != PSA_ERROR_NOT_SUPPORTED )
490 return( status );
491-#endif
492+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100493+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
494+ status = cc3xx_hash_setup(&operation->ctx.cc3xx_driver_ctx, alg);
Raef Coles2350f722022-07-19 15:19:56 +0100495+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
496+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100497+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100498+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
499
500- /* If software fallback is compiled in, try fallback */
501 #if defined(MBEDTLS_PSA_BUILTIN_HASH)
502+ /* If software fallback is compiled in, try fallback */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100503 status = mbedtls_psa_hash_setup( &operation->ctx.mbedtls_ctx, alg );
Summer Qin36f79f72022-07-05 14:53:35 +0800504 if( status == PSA_SUCCESS )
505 operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
Raef Coles2350f722022-07-19 15:19:56 +0100506
507 if( status != PSA_ERROR_NOT_SUPPORTED )
508 return( status );
509-#endif
510+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
511 /* Nothing left to try if we fall through here */
512 (void) status;
513 (void) operation;
514@@ -1422,19 +1587,29 @@ psa_status_t psa_driver_wrapper_hash_clone(
Summer Qin36f79f72022-07-05 14:53:35 +0800515 {
516 switch( source_operation->id )
517 {
518-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
519- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
520- target_operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
521- return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
522- &target_operation->ctx.mbedtls_ctx ) );
523-#endif
524+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
525 #if defined(PSA_CRYPTO_DRIVER_TEST)
526 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
527 target_operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID;
528 return( mbedtls_test_transparent_hash_clone(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100529 &source_operation->ctx.test_driver_ctx,
530 &target_operation->ctx.test_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100531-#endif
532+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100533+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
534+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
535+ target_operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
536+ return( cc3xx_hash_clone(
537+ &source_operation->ctx.cc3xx_driver_ctx,
538+ &target_operation->ctx.cc3xx_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100539+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100540+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100541+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
542+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800543+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
544+ target_operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
545+ return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
546+ &target_operation->ctx.mbedtls_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100547+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100548 default:
549 (void) target_operation;
Raef Coles2350f722022-07-19 15:19:56 +0100550 return( PSA_ERROR_BAD_STATE );
551@@ -1448,17 +1623,25 @@ psa_status_t psa_driver_wrapper_hash_update(
Summer Qin36f79f72022-07-05 14:53:35 +0800552 {
553 switch( operation->id )
554 {
555-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
556- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
557- return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
558- input, input_length ) );
559-#endif
560+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
561 #if defined(PSA_CRYPTO_DRIVER_TEST)
562 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
563 return( mbedtls_test_transparent_hash_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100564 &operation->ctx.test_driver_ctx,
565 input, input_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100566-#endif
567+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100568+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
569+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
570+ return( cc3xx_hash_update(
571+ &operation->ctx.cc3xx_driver_ctx,
572+ input, input_length ) );
573+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100574+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
575+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800576+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
577+ return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
578+ input, input_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100579+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100580 default:
581 (void) input;
Raef Coles2350f722022-07-19 15:19:56 +0100582 (void) input_length;
583@@ -1474,17 +1657,25 @@ psa_status_t psa_driver_wrapper_hash_finish(
Summer Qin36f79f72022-07-05 14:53:35 +0800584 {
585 switch( operation->id )
586 {
587-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
588- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
589- return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
590- hash, hash_size, hash_length ) );
591-#endif
592+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
593 #if defined(PSA_CRYPTO_DRIVER_TEST)
594 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
595 return( mbedtls_test_transparent_hash_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100596 &operation->ctx.test_driver_ctx,
597 hash, hash_size, hash_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100598-#endif
599+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100600+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
601+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
602+ return( cc3xx_hash_finish(
603+ &operation->ctx.cc3xx_driver_ctx,
604+ hash, hash_size, hash_length ) );
605+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100606+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
607+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800608+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
609+ return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
610+ hash, hash_size, hash_length ) );
Raef Coles2350f722022-07-19 15:19:56 +0100611+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100612 default:
613 (void) hash;
Raef Coles2350f722022-07-19 15:19:56 +0100614 (void) hash_size;
615@@ -1498,15 +1689,22 @@ psa_status_t psa_driver_wrapper_hash_abort(
Summer Qin36f79f72022-07-05 14:53:35 +0800616 {
617 switch( operation->id )
618 {
619-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
620- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
621- return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
622-#endif
623+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
624 #if defined(PSA_CRYPTO_DRIVER_TEST)
625 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
Antonio de Angelis86b98312021-12-17 21:42:40 +0100626 return( mbedtls_test_transparent_hash_abort(
627 &operation->ctx.test_driver_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100628-#endif
629+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100630+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
631+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
632+ return( cc3xx_hash_abort(
633+ &operation->ctx.cc3xx_driver_ctx ) );
634+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100635+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
636+#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Summer Qin36f79f72022-07-05 14:53:35 +0800637+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
638+ return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
Raef Coles2350f722022-07-19 15:19:56 +0100639+#endif /* defined(MBEDTLS_PSA_BUILTIN_HASH) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100640 default:
641 return( PSA_ERROR_BAD_STATE );
Raef Coles2350f722022-07-19 15:19:56 +0100642 }
643@@ -1544,6 +1742,17 @@ psa_status_t psa_driver_wrapper_aead_encrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100644 if( status != PSA_ERROR_NOT_SUPPORTED )
645 return( status );
646 #endif /* PSA_CRYPTO_DRIVER_TEST */
647+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
648+ status = cc3xx_aead_encrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100649+ attributes, key_buffer, key_buffer_size,
650+ alg,
651+ nonce, nonce_length,
652+ additional_data, additional_data_length,
653+ plaintext, plaintext_length,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100654+ ciphertext, ciphertext_size, ciphertext_length );
655+
Raef Coles2350f722022-07-19 15:19:56 +0100656+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100657+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100658 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100659
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100660 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100661@@ -1596,6 +1805,17 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100662 if( status != PSA_ERROR_NOT_SUPPORTED )
663 return( status );
664 #endif /* PSA_CRYPTO_DRIVER_TEST */
665+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
666+ status = cc3xx_aead_decrypt(
667+ attributes, key_buffer, key_buffer_size,
668+ alg,
669+ nonce, nonce_length,
670+ additional_data, additional_data_length,
671+ ciphertext, ciphertext_length,
672+ plaintext, plaintext_size, plaintext_length );
673+
Raef Coles2350f722022-07-19 15:19:56 +0100674+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100675+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100676 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100677
678 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100679@@ -1622,14 +1842,30 @@ psa_status_t psa_driver_get_tag_len( psa_aead_operation_t *operation,
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100680 if( operation == NULL || tag_len == NULL )
681 return( PSA_ERROR_INVALID_ARGUMENT );
682
683+ switch( operation->id )
684+ {
685 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
686+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
687+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
688+ *tag_len = operation->ctx.cc3xx_driver_ctx.tag_length;
689+ return ( PSA_SUCCESS );
690+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
691 #if defined(PSA_CRYPTO_DRIVER_TEST)
692- *tag_len = operation->ctx.transparent_test_driver_ctx.tag_length;
693- return ( PSA_SUCCESS );
694-#endif
Raef Coles2350f722022-07-19 15:19:56 +0100695-#endif
696- *tag_len = operation->ctx.mbedtls_ctx.tag_length;
697- return ( PSA_SUCCESS );
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100698+ case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
699+ *tag_len = operation->ctx.transparent_test_driver_ctx.tag_length;
700+ return ( PSA_SUCCESS );
Raef Coles2350f722022-07-19 15:19:56 +0100701+#endif /* defined(PSA_CRYPTO_DRIVER_TEST) */
702+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
703+#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100704+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
705+ *tag_len = operation->ctx.mbedtls_ctx.tag_length;
706+ return ( PSA_SUCCESS );
Raef Coles2350f722022-07-19 15:19:56 +0100707+#endif /* defined(MBEDTLS_PSA_BUILTIN_AEAD) */
708+ default:
709+ return( PSA_ERROR_INVALID_ARGUMENT );
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100710+ }
711+
712+ return( PSA_ERROR_INVALID_ARGUMENT );
713 }
714
Summer Qin36f79f72022-07-05 14:53:35 +0800715 psa_status_t psa_driver_wrapper_aead_encrypt_setup(
Raef Coles2350f722022-07-19 15:19:56 +0100716@@ -1660,6 +1896,15 @@ psa_status_t psa_driver_wrapper_aead_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100717 if( status != PSA_ERROR_NOT_SUPPORTED )
718 return( status );
719 #endif /* PSA_CRYPTO_DRIVER_TEST */
720+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
721+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
722+ status = cc3xx_aead_encrypt_setup(
723+ &operation->ctx.cc3xx_driver_ctx,
724+ attributes, key_buffer, key_buffer_size,
725+ alg );
726+
Raef Coles2350f722022-07-19 15:19:56 +0100727+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100728+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100729 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100730
731 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100732@@ -1709,6 +1954,16 @@ psa_status_t psa_driver_wrapper_aead_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100733 if( status != PSA_ERROR_NOT_SUPPORTED )
734 return( status );
735 #endif /* PSA_CRYPTO_DRIVER_TEST */
736+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
737+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
738+ status = cc3xx_aead_decrypt_setup(
739+ &operation->ctx.cc3xx_driver_ctx,
740+ attributes,
741+ key_buffer, key_buffer_size,
742+ alg );
743+
Raef Coles2350f722022-07-19 15:19:56 +0100744+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100745+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100746 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100747
748 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100749@@ -1755,6 +2010,13 @@ psa_status_t psa_driver_wrapper_aead_set_nonce(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100750 /* Add cases for opaque driver here */
751
752 #endif /* PSA_CRYPTO_DRIVER_TEST */
753+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
754+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
755+ return( cc3xx_aead_set_nonce(
756+ &operation->ctx.cc3xx_driver_ctx,
757+ nonce, nonce_length ) );
758+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100759+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
760 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
761 }
762
Raef Coles2350f722022-07-19 15:19:56 +0100763@@ -1789,6 +2051,13 @@ psa_status_t psa_driver_wrapper_aead_set_lengths(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100764 /* Add cases for opaque driver here */
765
766 #endif /* PSA_CRYPTO_DRIVER_TEST */
767+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
768+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
769+ return( cc3xx_aead_set_lengths(
770+ &operation->ctx.cc3xx_driver_ctx,
771+ ad_length, plaintext_length ) );
772+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100773+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
774 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
775 }
776
Raef Coles2350f722022-07-19 15:19:56 +0100777@@ -1823,6 +2092,13 @@ psa_status_t psa_driver_wrapper_aead_update_ad(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100778 /* Add cases for opaque driver here */
779
780 #endif /* PSA_CRYPTO_DRIVER_TEST */
781+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
782+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
783+ return( cc3xx_aead_update_ad(
784+ &operation->ctx.cc3xx_driver_ctx,
785+ input, input_length ) );
786+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100787+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
788 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
789 }
790
Raef Coles2350f722022-07-19 15:19:56 +0100791@@ -1862,6 +2138,14 @@ psa_status_t psa_driver_wrapper_aead_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100792 /* Add cases for opaque driver here */
793
794 #endif /* PSA_CRYPTO_DRIVER_TEST */
795+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
796+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
797+ return( cc3xx_aead_update(
798+ &operation->ctx.cc3xx_driver_ctx,
799+ input, input_length, output, output_size,
800+ output_length ) );
801+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100802+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
803 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
804 }
805
Raef Coles2350f722022-07-19 15:19:56 +0100806@@ -1906,6 +2190,14 @@ psa_status_t psa_driver_wrapper_aead_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100807 /* Add cases for opaque driver here */
808
809 #endif /* PSA_CRYPTO_DRIVER_TEST */
810+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
811+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
812+ return( cc3xx_aead_finish(
813+ &operation->ctx.cc3xx_driver_ctx,
814+ ciphertext, ciphertext_size,
815+ ciphertext_length, tag, tag_size, tag_length ) );
816+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100817+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
818 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
819 }
820
Raef Coles2350f722022-07-19 15:19:56 +0100821@@ -1970,6 +2262,14 @@ psa_status_t psa_driver_wrapper_aead_verify(
822 /* Add cases for opaque driver here */
823
824 #endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100825+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
826+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
827+ return( cc3xx_aead_verify(
828+ &operation->ctx.cc3xx_driver_ctx,
829+ plaintext, plaintext_size,
830+ plaintext_length, tag, tag_length ) );
831+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100832+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
833 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
834 }
835
Raef Coles2350f722022-07-19 15:19:56 +0100836@@ -2002,6 +2302,12 @@ psa_status_t psa_driver_wrapper_aead_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100837 /* Add cases for opaque driver here */
838
839 #endif /* PSA_CRYPTO_DRIVER_TEST */
840+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
841+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
842+ return( cc3xx_aead_abort(
843+ &operation->ctx.cc3xx_driver_ctx ) );
844+
Antonio de Angelis86b98312021-12-17 21:42:40 +0100845+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
846 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
847 }
848
Raef Coles2350f722022-07-19 15:19:56 +0100849@@ -2041,6 +2347,12 @@ psa_status_t psa_driver_wrapper_mac_compute(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100850 if( status != PSA_ERROR_NOT_SUPPORTED )
851 return( status );
852 #endif /* PSA_CRYPTO_DRIVER_TEST */
853+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
854+ status = cc3xx_mac_compute(attributes, key_buffer, key_buffer_size, alg,
855+ input, input_length,
856+ mac, mac_size, mac_length);
Raef Coles2350f722022-07-19 15:19:56 +0100857+ return( status );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100858+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Raef Coles2350f722022-07-19 15:19:56 +0100859 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
860 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100861 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100862@@ -2109,6 +2421,15 @@ psa_status_t psa_driver_wrapper_mac_sign_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100863 if( status != PSA_ERROR_NOT_SUPPORTED )
864 return( status );
865 #endif /* PSA_CRYPTO_DRIVER_TEST */
866+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
867+ status = cc3xx_mac_sign_setup(
868+ &operation->ctx.cc3xx_driver_ctx,
869+ attributes,
870+ key_buffer, key_buffer_size,
871+ alg);
Raef Coles2350f722022-07-19 15:19:56 +0100872+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
873+ return status;
874+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
875 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
876 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100877 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100878@@ -2181,6 +2502,15 @@ psa_status_t psa_driver_wrapper_mac_verify_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100879 if( status != PSA_ERROR_NOT_SUPPORTED )
880 return( status );
881 #endif /* PSA_CRYPTO_DRIVER_TEST */
882+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
883+ status = cc3xx_mac_verify_setup(
884+ &operation->ctx.cc3xx_driver_ctx,
885+ attributes,
886+ key_buffer, key_buffer_size,
887+ alg);
Raef Coles2350f722022-07-19 15:19:56 +0100888+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
889+ return status;
890+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
891 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
892 #if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100893 /* Fell through, meaning no accelerator supports this operation */
Raef Coles2350f722022-07-19 15:19:56 +0100894@@ -2248,6 +2578,10 @@ psa_status_t psa_driver_wrapper_mac_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100895 &operation->ctx.opaque_test_driver_ctx,
896 input, input_length ) );
897 #endif /* PSA_CRYPTO_DRIVER_TEST */
898+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
899+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
900+ return(cc3xx_mac_update(&operation->ctx.cc3xx_driver_ctx, input, input_length));
Raef Coles2350f722022-07-19 15:19:56 +0100901+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100902 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
903 default:
904 (void) input;
Raef Coles2350f722022-07-19 15:19:56 +0100905@@ -2282,6 +2616,11 @@ psa_status_t psa_driver_wrapper_mac_sign_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100906 &operation->ctx.opaque_test_driver_ctx,
907 mac, mac_size, mac_length ) );
908 #endif /* PSA_CRYPTO_DRIVER_TEST */
909+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
910+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
911+ return(cc3xx_mac_sign_finish(&operation->ctx.cc3xx_driver_ctx,
912+ mac, mac_size, mac_length));
Raef Coles2350f722022-07-19 15:19:56 +0100913+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100914 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
915 default:
916 (void) mac;
Raef Coles2350f722022-07-19 15:19:56 +0100917@@ -2316,6 +2655,12 @@ psa_status_t psa_driver_wrapper_mac_verify_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100918 &operation->ctx.opaque_test_driver_ctx,
919 mac, mac_length ) );
920 #endif /* PSA_CRYPTO_DRIVER_TEST */
921+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
922+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
923+ return(cc3xx_mac_verify_finish(
924+ &operation->ctx.cc3xx_driver_ctx,
925+ mac, mac_length));
Raef Coles2350f722022-07-19 15:19:56 +0100926+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100927 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
928 default:
929 (void) mac;
Raef Coles2350f722022-07-19 15:19:56 +0100930@@ -2343,6 +2688,10 @@ psa_status_t psa_driver_wrapper_mac_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100931 return( mbedtls_test_opaque_mac_abort(
932 &operation->ctx.opaque_test_driver_ctx ) );
933 #endif /* PSA_CRYPTO_DRIVER_TEST */
934+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
935+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
936+ return(cc3xx_mac_abort(&operation->ctx.cc3xx_driver_ctx));
Raef Coles2350f722022-07-19 15:19:56 +0100937+#endif /* defined(PSA_CRYPTO_DRIVER_CC3XX) */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100938 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
939 default:
940 return( PSA_ERROR_INVALID_ARGUMENT );
Raef Coles2350f722022-07-19 15:19:56 +0100941@@ -2350,7 +2699,58 @@ psa_status_t psa_driver_wrapper_mac_abort(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100942 }
943
944 /*
945- * Asymmetric cryptography
Antonio de Angelis86b98312021-12-17 21:42:40 +0100946+ * Key agreement functions
947+ */
948+psa_status_t psa_driver_wrapper_key_agreement(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100949+ psa_algorithm_t alg,
Antonio de Angelis86b98312021-12-17 21:42:40 +0100950+ const psa_key_attributes_t *attributes,
951+ const uint8_t *priv_key, size_t priv_key_size,
952+ const uint8_t *publ_key, size_t publ_key_size,
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100953+ uint8_t *output, size_t output_size, size_t *output_length )
Antonio de Angelis86b98312021-12-17 21:42:40 +0100954+{
955+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
956+
957+ psa_key_location_t location =
958+ PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
959+
960+ switch( location )
961+ {
962+ case PSA_KEY_LOCATION_LOCAL_STORAGE:
963+ /* Key is stored in the slot in export representation, so
964+ * cycle through all known transparent accelerators */
965+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
966+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
967+ status = cc3xx_key_agreement( attributes,
968+ priv_key,
969+ priv_key_size,
970+ publ_key,
971+ publ_key_size,
972+ output,
973+ output_size,
974+ output_length,
975+ alg );
976+ return( status );
977+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100978+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100979+ (void) status;
980+ return ( PSA_ERROR_NOT_SUPPORTED );
981+ default:
982+ /* Key is declared with a lifetime not known to us */
983+ (void) priv_key;
984+ (void) priv_key_size;
985+ (void) publ_key;
986+ (void) publ_key_size;
987+ (void) output;
988+ (void) output_size;
989+ (void) output_length;
990+ (void) alg;
991+
992+ return( PSA_ERROR_INVALID_ARGUMENT );
993+ }
994+}
995+
996+/*
997+ * Asymmetric operations
Antonio de Angelis90bee0f2022-07-13 11:22:41 +0100998 */
999 psa_status_t psa_driver_wrapper_asymmetric_encrypt(
1000 const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
Raef Coles2350f722022-07-19 15:19:56 +01001001@@ -2368,6 +2768,20 @@ psa_status_t psa_driver_wrapper_asymmetric_encrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001002 /* Key is stored in the slot in export representation, so
1003 * cycle through all known transparent accelerators */
1004 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001005+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1006+ status = cc3xx_asymmetric_encrypt( attributes,
1007+ key_buffer,
1008+ key_buffer_size,
1009+ alg,
1010+ input,
1011+ input_length,
1012+ salt,
1013+ salt_length,
1014+ output,
1015+ output_size,
1016+ output_length );
1017+ return( status );
1018+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001019 #if defined(PSA_CRYPTO_DRIVER_TEST)
1020 status = mbedtls_test_transparent_asymmetric_encrypt( attributes,
1021 key_buffer, key_buffer_size, alg, input, input_length,
Raef Coles2350f722022-07-19 15:19:56 +01001022@@ -2426,6 +2840,20 @@ psa_status_t psa_driver_wrapper_asymmetric_decrypt(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001023 /* Key is stored in the slot in export representation, so
1024 * cycle through all known transparent accelerators */
1025 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001026+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1027+ status = cc3xx_asymmetric_decrypt( attributes,
1028+ key_buffer,
1029+ key_buffer_size,
1030+ alg,
1031+ input,
1032+ input_length,
1033+ salt,
1034+ salt_length,
1035+ output,
1036+ output_size,
1037+ output_length );
1038+ return( status );
1039+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001040 #if defined(PSA_CRYPTO_DRIVER_TEST)
1041 status = mbedtls_test_transparent_asymmetric_decrypt( attributes,
1042 key_buffer, key_buffer_size, alg, input, input_length,
Antonio de Angelis86b98312021-12-17 21:42:40 +01001043diff --git a/library/psa_crypto_driver_wrappers.h b/library/psa_crypto_driver_wrappers.h
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001044index 12c649da3..ac0cd1d89 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +01001045--- a/library/psa_crypto_driver_wrappers.h
1046+++ b/library/psa_crypto_driver_wrappers.h
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001047@@ -361,6 +361,20 @@ psa_status_t psa_driver_wrapper_asymmetric_decrypt(
1048 size_t output_size,
1049 size_t *output_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001050
1051+/*
1052+ * Key agreement functions
1053+ */
1054+psa_status_t psa_driver_wrapper_key_agreement(
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001055+ psa_algorithm_t alg,
Antonio de Angelis86b98312021-12-17 21:42:40 +01001056+ const psa_key_attributes_t *attributes,
Antonio de Angelis90bee0f2022-07-13 11:22:41 +01001057+ const uint8_t *priv_key,
1058+ size_t priv_key_size,
1059+ const uint8_t *publ_key,
1060+ size_t peer_key_size,
1061+ uint8_t *output,
1062+ size_t output_size,
1063+ size_t *output_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001064+
1065 #endif /* PSA_CRYPTO_DRIVER_WRAPPERS_H */
1066
1067 /* End of automatically generated file. */
1068--
Raef Coles2350f722022-07-19 15:19:56 +010010692.34.1
Antonio de Angelis86b98312021-12-17 21:42:40 +01001070