blob: ae85b9d45df4d41ec49cf4a9bb2697cac9f19fac [file] [log] [blame]
Summer Qin36f79f72022-07-05 14:53:35 +08001From 183db7cb5970816ab6e0b1e4d6d93b734bb84440 Mon Sep 17 00:00:00 2001
Antonio de Angelis86b98312021-12-17 21:42:40 +01002From: Salome Thirot <salome.thirot@arm.com>
3Date: Wed, 7 Jul 2021 10:24:43 +0100
Summer Qin36f79f72022-07-05 14:53:35 +08004Subject: [PATCH 4/8] CC3XX: Hardcode entry points for the CC3XX driver
Antonio de Angelis86b98312021-12-17 21:42:40 +01005
Summer Qin36f79f72022-07-05 14:53:35 +08006Use PSA driver for CC3XX driver to avoid fallback to software
7implementation. This will save 22.23KB in RO size.
8
9Signed-off-by: Summer Qin <summer.qin@arm.com>
Antonio de Angelis86b98312021-12-17 21:42:40 +010010Signed-off-by: Salome Thirot <salome.thirot@arm.com>
11Signed-off-by: Abbas Bracken Ziad <abbas.brackenziad@arm.com>
12Signed-off-by: Georgios Vasilakis <georgios.vasilakis@nordicsemi.no>
13Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
14---
15 .../psa/crypto_driver_contexts_composites.h | 9 +
16 .../psa/crypto_driver_contexts_primitives.h | 9 +
Summer Qin36f79f72022-07-05 14:53:35 +080017 library/psa_crypto.c | 65 +-
18 library/psa_crypto_driver_wrappers.c | 925 ++++++++++++++----
Antonio de Angelis86b98312021-12-17 21:42:40 +010019 library/psa_crypto_driver_wrappers.h | 29 +
Summer Qin36f79f72022-07-05 14:53:35 +080020 5 files changed, 834 insertions(+), 203 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 Qinca6c1522022-06-17 14:25:55 +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 Qinca6c1522022-06-17 14:25:55 +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 */
90diff --git a/library/psa_crypto.c b/library/psa_crypto.c
Summer Qinca6c1522022-06-17 14:25:55 +080091index 829ed452..48377ffe 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +010092--- a/library/psa_crypto.c
93+++ b/library/psa_crypto.c
94@@ -3073,6 +3073,25 @@ psa_status_t psa_asymmetric_encrypt( mbedtls_svc_key_id_t key,
95 goto exit;
96 }
97
98+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
99+ psa_key_attributes_t attributes = {
100+ .core = slot->attr
101+ };
102+
103+ status = psa_driver_wrapper_asymmetric_encrypt( &attributes,
104+ slot->key.data,
105+ slot->key.bytes,
106+ alg,
107+ input,
108+ input_length,
109+ salt,
110+ salt_length,
111+ output,
112+ output_size,
113+ output_length );
114+ goto exit;
115+#endif
116+
117 if( PSA_KEY_TYPE_IS_RSA( slot->attr.type ) )
118 {
119 #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
120@@ -3188,6 +3207,25 @@ psa_status_t psa_asymmetric_decrypt( mbedtls_svc_key_id_t key,
121 goto exit;
122 }
123
124+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
125+ psa_key_attributes_t attributes = {
126+ .core = slot->attr
127+ };
128+
129+ status = psa_driver_wrapper_asymmetric_decrypt( &attributes,
130+ slot->key.data,
131+ slot->key.bytes,
132+ alg,
133+ input,
134+ input_length,
135+ salt,
136+ salt_length,
137+ output,
138+ output_size,
139+ output_length );
140+ goto exit;
141+#endif
142+
143 if( slot->attr.type == PSA_KEY_TYPE_RSA_KEY_PAIR )
144 {
145 #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
146@@ -5499,11 +5537,30 @@ psa_status_t psa_raw_key_agreement( psa_algorithm_t alg,
147 if( status != PSA_SUCCESS )
148 goto exit;
149
150- status = psa_key_agreement_raw_internal( alg, slot,
151- peer_key, peer_key_length,
152- output, output_size,
153- output_length );
154+ psa_key_attributes_t attributes = {
155+ .core = slot->attr
156+ };
157
158+ status = psa_driver_wrapper_key_agreement( &attributes,
159+ slot->key.data,
160+ slot->key.bytes,
161+ peer_key,
162+ peer_key_length,
163+ output,
164+ output_size,
165+ output_length,
166+ alg );
167+
168+ if( status == PSA_ERROR_NOT_SUPPORTED )
169+ {
170+ status = psa_key_agreement_raw_internal( alg,
171+ slot,
172+ peer_key,
173+ peer_key_length,
174+ output,
175+ output_size,
176+ output_length);
177+ }
178 exit:
179 if( status != PSA_SUCCESS )
180 {
181diff --git a/library/psa_crypto_driver_wrappers.c b/library/psa_crypto_driver_wrappers.c
Summer Qin36f79f72022-07-05 14:53:35 +0800182index 8d864786..22273b8c 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +0100183--- a/library/psa_crypto_driver_wrappers.c
184+++ b/library/psa_crypto_driver_wrappers.c
185@@ -44,6 +44,16 @@
186 #include "test/drivers/test_driver.h"
187 #endif /* PSA_CRYPTO_DRIVER_TEST */
188
189+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
190+#ifndef PSA_CRYPTO_DRIVER_PRESENT
191+#define PSA_CRYPTO_DRIVER_PRESENT
192+#endif
193+#ifndef PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
194+#define PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT
195+#endif
196+#include "cc3xx.h"
197+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
198+
199 /* Repeat above block for each JSON-declared driver during autogeneration */
200 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS */
201
202@@ -57,6 +67,10 @@
203 #define PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID (3)
204 #endif /* PSA_CRYPTO_DRIVER_TEST */
205
206+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
207+#define PSA_CRYPTO_CC3XX_DRIVER_ID (4)
208+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
209+
210 /* Support the 'old' SE interface when asked to */
211 #if defined(MBEDTLS_PSA_CRYPTO_SE_C)
212 /* PSA_CRYPTO_DRIVER_PRESENT is defined when either a new-style or old-style
213@@ -127,6 +141,21 @@ psa_status_t psa_driver_wrapper_sign_message(
214 /* Key is stored in the slot in export representation, so
215 * cycle through all known transparent accelerators */
216 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
217+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
218+ status = cc3xx_sign_message(
219+ attributes,
220+ key_buffer,
221+ key_buffer_size,
222+ alg,
223+ input,
224+ input_length,
225+ signature,
226+ signature_size,
227+ signature_length );
228+ /* Declared with fallback == true */
229+ if( status != PSA_ERROR_NOT_SUPPORTED )
230+ return( status );
231+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
232 #if defined(PSA_CRYPTO_DRIVER_TEST)
233 status = mbedtls_test_transparent_signature_sign_message(
234 attributes,
Summer Qin36f79f72022-07-05 14:53:35 +0800235@@ -142,8 +171,19 @@ psa_status_t psa_driver_wrapper_sign_message(
236 if( status != PSA_ERROR_NOT_SUPPORTED )
237 return( status );
238 #endif /* PSA_CRYPTO_DRIVER_TEST */
239-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
240 break;
241+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
242+ /* Fell through, meaning no accelerator supports this operation */
243+ return( psa_sign_message_builtin( attributes,
244+ key_buffer,
245+ key_buffer_size,
246+ alg,
247+ input,
248+ input_length,
249+ signature,
250+ signature_size,
251+ signature_length ) );
252+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
253
254 /* Add cases for opaque driver here */
255 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
256@@ -167,18 +207,9 @@ psa_status_t psa_driver_wrapper_sign_message(
257 default:
258 /* Key is declared with a lifetime not known to us */
259 (void)status;
260- break;
261+ return( PSA_ERROR_INVALID_ARGUMENT );
262 }
263-
264- return( psa_sign_message_builtin( attributes,
265- key_buffer,
266- key_buffer_size,
267- alg,
268- input,
269- input_length,
270- signature,
271- signature_size,
272- signature_length ) );
273+ return status;
274 }
275
276 psa_status_t psa_driver_wrapper_verify_message(
277@@ -201,6 +232,20 @@ psa_status_t psa_driver_wrapper_verify_message(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100278 /* Key is stored in the slot in export representation, so
279 * cycle through all known transparent accelerators */
280 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
281+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
282+ status = cc3xx_verify_message(
283+ attributes,
284+ key_buffer,
285+ key_buffer_size,
286+ alg,
287+ input,
288+ input_length,
289+ signature,
290+ signature_length );
291+ /* Declared with fallback == true */
292+ if( status != PSA_ERROR_NOT_SUPPORTED )
293+ return( status );
294+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
295 #if defined(PSA_CRYPTO_DRIVER_TEST)
296 status = mbedtls_test_transparent_signature_verify_message(
297 attributes,
Summer Qin36f79f72022-07-05 14:53:35 +0800298@@ -215,8 +260,18 @@ psa_status_t psa_driver_wrapper_verify_message(
299 if( status != PSA_ERROR_NOT_SUPPORTED )
300 return( status );
301 #endif /* PSA_CRYPTO_DRIVER_TEST */
302-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
303 break;
304+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
305+ /* Fell through, meaning no accelerator supports this operation */
306+ return( psa_verify_message_builtin( attributes,
307+ key_buffer,
308+ key_buffer_size,
309+ alg,
310+ input,
311+ input_length,
312+ signature,
313+ signature_length ) );
314+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
315
316 /* Add cases for opaque driver here */
317 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
318@@ -239,17 +294,9 @@ psa_status_t psa_driver_wrapper_verify_message(
319 default:
320 /* Key is declared with a lifetime not known to us */
321 (void)status;
322- break;
323+ return( PSA_ERROR_INVALID_ARGUMENT );
324 }
325-
326- return( psa_verify_message_builtin( attributes,
327- key_buffer,
328- key_buffer_size,
329- alg,
330- input,
331- input_length,
332- signature,
333- signature_length ) );
334+ return status;
335 }
336
337 psa_status_t psa_driver_wrapper_sign_hash(
338@@ -288,6 +335,20 @@ psa_status_t psa_driver_wrapper_sign_hash(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100339 /* Key is stored in the slot in export representation, so
340 * cycle through all known transparent accelerators */
341 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
342+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
343+ status = cc3xx_sign_hash( attributes,
344+ key_buffer,
345+ key_buffer_size,
346+ alg,
347+ hash,
348+ hash_length,
349+ signature,
350+ signature_size,
351+ signature_length );
352+ /* Declared with fallback == true */
353+ if( status != PSA_ERROR_NOT_SUPPORTED )
354+ return( status );
355+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
356 #if defined(PSA_CRYPTO_DRIVER_TEST)
357 status = mbedtls_test_transparent_signature_sign_hash( attributes,
358 key_buffer,
Summer Qin36f79f72022-07-05 14:53:35 +0800359@@ -302,7 +363,8 @@ psa_status_t psa_driver_wrapper_sign_hash(
360 if( status != PSA_ERROR_NOT_SUPPORTED )
361 return( status );
362 #endif /* PSA_CRYPTO_DRIVER_TEST */
363-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
364+ break;
365+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
366 /* Fell through, meaning no accelerator supports this operation */
367 return( psa_sign_hash_builtin( attributes,
368 key_buffer,
369@@ -313,6 +375,7 @@ psa_status_t psa_driver_wrapper_sign_hash(
370 signature,
371 signature_size,
372 signature_length ) );
373+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
374
375 /* Add cases for opaque driver here */
376 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
377@@ -334,6 +397,7 @@ psa_status_t psa_driver_wrapper_sign_hash(
378 (void)status;
379 return( PSA_ERROR_INVALID_ARGUMENT );
380 }
381+ return status;
382 }
383
384 psa_status_t psa_driver_wrapper_verify_hash(
385@@ -372,6 +436,19 @@ psa_status_t psa_driver_wrapper_verify_hash(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100386 /* Key is stored in the slot in export representation, so
387 * cycle through all known transparent accelerators */
388 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
389+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
390+ status = cc3xx_verify_hash( attributes,
391+ key_buffer,
392+ key_buffer_size,
393+ alg,
394+ hash,
395+ hash_length,
396+ signature,
397+ signature_length );
398+ /* Declared with fallback == true */
399+ if( status != PSA_ERROR_NOT_SUPPORTED )
400+ return( status );
401+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
402 #if defined(PSA_CRYPTO_DRIVER_TEST)
403 status = mbedtls_test_transparent_signature_verify_hash(
404 attributes,
Summer Qin36f79f72022-07-05 14:53:35 +0800405@@ -386,8 +463,8 @@ psa_status_t psa_driver_wrapper_verify_hash(
406 if( status != PSA_ERROR_NOT_SUPPORTED )
407 return( status );
408 #endif /* PSA_CRYPTO_DRIVER_TEST */
409-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
410-
411+ break;
412+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
413 return( psa_verify_hash_builtin( attributes,
414 key_buffer,
415 key_buffer_size,
416@@ -396,6 +473,7 @@ psa_status_t psa_driver_wrapper_verify_hash(
417 hash_length,
418 signature,
419 signature_length ) );
420+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
421
422 /* Add cases for opaque driver here */
423 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
424@@ -416,6 +494,7 @@ psa_status_t psa_driver_wrapper_verify_hash(
425 (void)status;
426 return( PSA_ERROR_INVALID_ARGUMENT );
427 }
428+ return status;
429 }
430
431 /** Calculate the key buffer size required to store the key material of a key
432@@ -547,6 +626,14 @@ psa_status_t psa_driver_wrapper_generate_key(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100433 if( PSA_KEY_TYPE_IS_ASYMMETRIC( attributes->core.type ) )
434 {
435 /* Cycle through all known transparent accelerators */
436+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
Summer Qin36f79f72022-07-05 14:53:35 +0800437+ status = cc3xx_generate_key(
438+ attributes, key_buffer, key_buffer_size,
439+ key_buffer_length );
440+ /* Declared with fallback == true */
441+ if( status != PSA_ERROR_NOT_SUPPORTED )
442+ break;
Antonio de Angelis86b98312021-12-17 21:42:40 +0100443+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
444 #if defined(PSA_CRYPTO_DRIVER_TEST)
445 status = mbedtls_test_transparent_generate_key(
446 attributes, key_buffer, key_buffer_size,
Summer Qin36f79f72022-07-05 14:53:35 +0800447@@ -758,6 +845,18 @@ psa_status_t psa_driver_wrapper_export_public_key(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100448 /* Key is stored in the slot in export representation, so
449 * cycle through all known transparent accelerators */
450 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
451+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
452+ status = cc3xx_export_public_key(
453+ attributes,
454+ key_buffer,
455+ key_buffer_size,
456+ data,
457+ data_size,
458+ data_length );
459+ /* Declared with fallback == true */
460+ if( status != PSA_ERROR_NOT_SUPPORTED )
461+ return( status );
462+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
463 #if defined(PSA_CRYPTO_DRIVER_TEST)
464 status = mbedtls_test_transparent_export_public_key(
465 attributes,
Summer Qin36f79f72022-07-05 14:53:35 +0800466@@ -770,7 +869,8 @@ psa_status_t psa_driver_wrapper_export_public_key(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100467 if( status != PSA_ERROR_NOT_SUPPORTED )
468 return( status );
469 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +0800470-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
471+ break;
472+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
473 /* Fell through, meaning no accelerator supports this operation */
474 return( psa_export_public_key_internal( attributes,
475 key_buffer,
476@@ -778,6 +878,7 @@ psa_status_t psa_driver_wrapper_export_public_key(
477 data,
478 data_size,
479 data_length ) );
480+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
481
482 /* Add cases for opaque driver here */
483 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
484@@ -795,6 +896,7 @@ psa_status_t psa_driver_wrapper_export_public_key(
485 /* Key is declared with a lifetime not known to us */
486 return( status );
487 }
488+ return status;
489 }
490
491 psa_status_t psa_driver_wrapper_get_builtin_key(
492@@ -907,9 +1009,24 @@ psa_status_t psa_driver_wrapper_cipher_encrypt(
493 if( status != PSA_ERROR_NOT_SUPPORTED )
494 return( status );
495 #endif /* PSA_CRYPTO_DRIVER_TEST */
496-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
497-
498-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100499+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
500+ status = cc3xx_cipher_encrypt( attributes,
501+ key_buffer,
502+ key_buffer_size,
503+ alg,
504+ iv,
505+ iv_length,
506+ input,
507+ input_length,
508+ output,
509+ output_size,
510+ output_length );
511+ /* Declared with fallback == true */
512+ if( status != PSA_ERROR_NOT_SUPPORTED )
513+ return( status );
514+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800515+ break;
516+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
517 return( mbedtls_psa_cipher_encrypt( attributes,
518 key_buffer,
519 key_buffer_size,
520@@ -958,6 +1075,7 @@ psa_status_t psa_driver_wrapper_cipher_encrypt(
521 (void)output_length;
522 return( PSA_ERROR_INVALID_ARGUMENT );
523 }
524+ return status;
525 }
Antonio de Angelis86b98312021-12-17 21:42:40 +0100526
Summer Qin36f79f72022-07-05 14:53:35 +0800527 psa_status_t psa_driver_wrapper_cipher_decrypt(
528@@ -995,9 +1113,22 @@ psa_status_t psa_driver_wrapper_cipher_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100529 if( status != PSA_ERROR_NOT_SUPPORTED )
530 return( status );
531 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +0800532-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
533-
534-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100535+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
536+ status = cc3xx_cipher_decrypt( attributes,
537+ key_buffer,
538+ key_buffer_size,
539+ alg,
540+ input,
541+ input_length,
542+ output,
543+ output_size,
544+ output_length );
545+ /* Declared with fallback == true */
546+ if( status != PSA_ERROR_NOT_SUPPORTED )
547+ return( status );
548+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800549+ break;
550+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
551 return( mbedtls_psa_cipher_decrypt( attributes,
552 key_buffer,
553 key_buffer_size,
554@@ -1040,6 +1171,7 @@ psa_status_t psa_driver_wrapper_cipher_decrypt(
555 (void)output_length;
556 return( PSA_ERROR_INVALID_ARGUMENT );
557 }
558+ return status;
559 }
Antonio de Angelis86b98312021-12-17 21:42:40 +0100560
Summer Qin36f79f72022-07-05 14:53:35 +0800561 psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
562@@ -1072,8 +1204,22 @@ psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100563 if( status != PSA_ERROR_NOT_SUPPORTED )
564 return( status );
565 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +0800566-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
567-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100568+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
569+ status = cc3xx_cipher_encrypt_setup(
570+ &operation->ctx.cc3xx_driver_ctx,
571+ attributes,
572+ key_buffer,
573+ key_buffer_size,
574+ alg );
575+ /* Declared with fallback == true */
576+ if( status == PSA_SUCCESS )
577+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
578+
579+ if( status != PSA_ERROR_NOT_SUPPORTED )
580+ return( status );
581+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800582+ break;
583+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100584 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +0800585 status = mbedtls_psa_cipher_encrypt_setup( &operation->ctx.mbedtls_ctx,
586 attributes,
587@@ -1113,6 +1259,7 @@ psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
588 (void)alg;
589 return( PSA_ERROR_INVALID_ARGUMENT );
590 }
591+ return status;
592 }
593
594 psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
595@@ -1145,8 +1292,22 @@ psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100596 if( status != PSA_ERROR_NOT_SUPPORTED )
597 return( status );
598 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +0800599-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
600-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100601+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
602+ status = cc3xx_cipher_decrypt_setup(
603+ &operation->ctx.cc3xx_driver_ctx,
604+ attributes,
605+ key_buffer,
606+ key_buffer_size,
607+ alg );
608+ /* Declared with fallback == true */
609+ if( status == PSA_SUCCESS )
610+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
611+
612+ if( status != PSA_ERROR_NOT_SUPPORTED )
613+ return( status );
614+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800615+ break;
616+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100617 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +0800618 status = mbedtls_psa_cipher_decrypt_setup( &operation->ctx.mbedtls_ctx,
619 attributes,
620@@ -1185,6 +1346,7 @@ psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
621 (void)alg;
622 return( PSA_ERROR_INVALID_ARGUMENT );
623 }
624+ return status;
625 }
626
627 psa_status_t psa_driver_wrapper_cipher_set_iv(
628@@ -1194,13 +1356,6 @@ psa_status_t psa_driver_wrapper_cipher_set_iv(
629 {
630 switch( operation->id )
631 {
632-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
633- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
634- return( mbedtls_psa_cipher_set_iv( &operation->ctx.mbedtls_ctx,
635- iv,
636- iv_length ) );
637-#endif /* MBEDTLS_PSA_BUILTIN_CIPHER */
638-
639 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
640 #if defined(PSA_CRYPTO_DRIVER_TEST)
641 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
642@@ -1213,6 +1368,17 @@ psa_status_t psa_driver_wrapper_cipher_set_iv(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100643 &operation->ctx.opaque_test_driver_ctx,
644 iv, iv_length ) );
645 #endif /* PSA_CRYPTO_DRIVER_TEST */
646+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
647+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
648+ return( cc3xx_cipher_set_iv(
649+ &operation->ctx.cc3xx_driver_ctx,
650+ iv, iv_length ) );
651+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800652+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
653+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
654+ return( mbedtls_psa_cipher_set_iv( &operation->ctx.mbedtls_ctx,
655+ iv,
656+ iv_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100657 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
658 }
659
Summer Qin36f79f72022-07-05 14:53:35 +0800660@@ -1232,16 +1398,6 @@ psa_status_t psa_driver_wrapper_cipher_update(
661 {
662 switch( operation->id )
663 {
664-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
665- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
666- return( mbedtls_psa_cipher_update( &operation->ctx.mbedtls_ctx,
667- input,
668- input_length,
669- output,
670- output_size,
671- output_length ) );
672-#endif /* MBEDTLS_PSA_BUILTIN_CIPHER */
673-
674 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
675 #if defined(PSA_CRYPTO_DRIVER_TEST)
676 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
677@@ -1256,6 +1412,21 @@ psa_status_t psa_driver_wrapper_cipher_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100678 input, input_length,
679 output, output_size, output_length ) );
680 #endif /* PSA_CRYPTO_DRIVER_TEST */
681+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
682+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
683+ return( cc3xx_cipher_update(
684+ &operation->ctx.cc3xx_driver_ctx,
685+ input, input_length,
686+ output, output_size, output_length ) );
687+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800688+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
689+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
690+ return( mbedtls_psa_cipher_update( &operation->ctx.mbedtls_ctx,
691+ input,
692+ input_length,
693+ output,
694+ output_size,
695+ output_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100696 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
697 }
698
Summer Qin36f79f72022-07-05 14:53:35 +0800699@@ -1276,14 +1447,6 @@ psa_status_t psa_driver_wrapper_cipher_finish(
700 {
701 switch( operation->id )
702 {
703-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
704- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
705- return( mbedtls_psa_cipher_finish( &operation->ctx.mbedtls_ctx,
706- output,
707- output_size,
708- output_length ) );
709-#endif /* MBEDTLS_PSA_BUILTIN_CIPHER */
710-
711 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
712 #if defined(PSA_CRYPTO_DRIVER_TEST)
713 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
714@@ -1296,6 +1459,18 @@ psa_status_t psa_driver_wrapper_cipher_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100715 &operation->ctx.opaque_test_driver_ctx,
716 output, output_size, output_length ) );
717 #endif /* PSA_CRYPTO_DRIVER_TEST */
718+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
719+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
720+ return( cc3xx_cipher_finish(
721+ &operation->ctx.cc3xx_driver_ctx,
722+ output, output_size, output_length ) );
723+#endif /* PSA_CRYPTO_DRIVER_CC3XX*/
Summer Qin36f79f72022-07-05 14:53:35 +0800724+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
725+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
726+ return( mbedtls_psa_cipher_finish( &operation->ctx.mbedtls_ctx,
727+ output,
728+ output_size,
729+ output_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100730 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
731 }
732
Summer Qin36f79f72022-07-05 14:53:35 +0800733@@ -1313,11 +1488,6 @@ psa_status_t psa_driver_wrapper_cipher_abort(
734
735 switch( operation->id )
736 {
737-#if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
738- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
739- return( mbedtls_psa_cipher_abort( &operation->ctx.mbedtls_ctx ) );
740-#endif /* MBEDTLS_PSA_BUILTIN_CIPHER */
741-
742 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
743 #if defined(PSA_CRYPTO_DRIVER_TEST)
744 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
745@@ -1336,6 +1506,18 @@ psa_status_t psa_driver_wrapper_cipher_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100746 sizeof( operation->ctx.opaque_test_driver_ctx ) );
747 return( status );
748 #endif /* PSA_CRYPTO_DRIVER_TEST */
749+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
750+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
751+ status = cc3xx_cipher_abort(
752+ &operation->ctx.cc3xx_driver_ctx );
753+ mbedtls_platform_zeroize(
754+ &operation->ctx.cc3xx_driver_ctx,
755+ sizeof( operation->ctx.cc3xx_driver_ctx ) );
756+ return( status );
757+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800758+#elif defined(MBEDTLS_PSA_BUILTIN_CIPHER)
759+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
760+ return( mbedtls_psa_cipher_abort( &operation->ctx.mbedtls_ctx ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100761 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
762 }
763
Summer Qin36f79f72022-07-05 14:53:35 +0800764@@ -1357,15 +1539,21 @@ psa_status_t psa_driver_wrapper_hash_compute(
765 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
766
767 /* Try accelerators first */
768+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
769 #if defined(PSA_CRYPTO_DRIVER_TEST)
770 status = mbedtls_test_transparent_hash_compute(
771 alg, input, input_length, hash, hash_size, hash_length );
Antonio de Angelis86b98312021-12-17 21:42:40 +0100772 if( status != PSA_ERROR_NOT_SUPPORTED )
773 return( status );
774 #endif
Summer Qin36f79f72022-07-05 14:53:35 +0800775-
Antonio de Angelis86b98312021-12-17 21:42:40 +0100776+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
777+ status = cc3xx_hash_compute(alg, input, input_length, hash, hash_size,
778+ hash_length);
779+ if (status != PSA_ERROR_NOT_SUPPORTED)
780+ return status;
781+#endif
Summer Qin36f79f72022-07-05 14:53:35 +0800782+#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100783 /* If software fallback is compiled in, try fallback */
Summer Qin36f79f72022-07-05 14:53:35 +0800784-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
785 status = mbedtls_psa_hash_compute( alg, input, input_length,
786 hash, hash_size, hash_length );
787 if( status != PSA_ERROR_NOT_SUPPORTED )
788@@ -1389,6 +1577,7 @@ psa_status_t psa_driver_wrapper_hash_setup(
789 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
790
791 /* Try setup on accelerators first */
792+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
793 #if defined(PSA_CRYPTO_DRIVER_TEST)
794 status = mbedtls_test_transparent_hash_setup(
795 &operation->ctx.test_driver_ctx, alg );
796@@ -1399,8 +1588,18 @@ psa_status_t psa_driver_wrapper_hash_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100797 return( status );
798 #endif
799
800+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
801+ status = cc3xx_hash_setup(&operation->ctx.cc3xx_driver_ctx, alg);
802+ if( status == PSA_SUCCESS )
803+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
804+
805+ if( status != PSA_ERROR_NOT_SUPPORTED) {
806+ return( status );
807+ }
808+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
809+
Summer Qin36f79f72022-07-05 14:53:35 +0800810+#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100811 /* If software fallback is compiled in, try fallback */
Summer Qin36f79f72022-07-05 14:53:35 +0800812-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
Antonio de Angelis86b98312021-12-17 21:42:40 +0100813 status = mbedtls_psa_hash_setup( &operation->ctx.mbedtls_ctx, alg );
Summer Qin36f79f72022-07-05 14:53:35 +0800814 if( status == PSA_SUCCESS )
815 operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
816@@ -1421,18 +1620,26 @@ psa_status_t psa_driver_wrapper_hash_clone(
817 {
818 switch( source_operation->id )
819 {
820-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
821- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
822- target_operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
823- return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
824- &target_operation->ctx.mbedtls_ctx ) );
825-#endif
826+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
827 #if defined(PSA_CRYPTO_DRIVER_TEST)
828 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
829 target_operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID;
830 return( mbedtls_test_transparent_hash_clone(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100831 &source_operation->ctx.test_driver_ctx,
832 &target_operation->ctx.test_driver_ctx ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800833+#endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100834+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
835+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
836+ target_operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
837+ return( cc3xx_hash_clone(
838+ &source_operation->ctx.cc3xx_driver_ctx,
839+ &target_operation->ctx.cc3xx_driver_ctx ) );
840+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800841+#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
842+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
843+ target_operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
844+ return( mbedtls_psa_hash_clone( &source_operation->ctx.mbedtls_ctx,
845+ &target_operation->ctx.mbedtls_ctx ) );
846 #endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100847 default:
848 (void) target_operation;
Summer Qin36f79f72022-07-05 14:53:35 +0800849@@ -1447,16 +1654,23 @@ psa_status_t psa_driver_wrapper_hash_update(
850 {
851 switch( operation->id )
852 {
853-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
854- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
855- return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
856- input, input_length ) );
857-#endif
858+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
859 #if defined(PSA_CRYPTO_DRIVER_TEST)
860 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
861 return( mbedtls_test_transparent_hash_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100862 &operation->ctx.test_driver_ctx,
863 input, input_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800864+#endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100865+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
866+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
867+ return( cc3xx_hash_update(
868+ &operation->ctx.cc3xx_driver_ctx,
869+ input, input_length ) );
870+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800871+#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
872+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
873+ return( mbedtls_psa_hash_update( &operation->ctx.mbedtls_ctx,
874+ input, input_length ) );
875 #endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100876 default:
877 (void) input;
Summer Qin36f79f72022-07-05 14:53:35 +0800878@@ -1473,16 +1687,23 @@ psa_status_t psa_driver_wrapper_hash_finish(
879 {
880 switch( operation->id )
881 {
882-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
883- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
884- return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
885- hash, hash_size, hash_length ) );
886-#endif
887+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
888 #if defined(PSA_CRYPTO_DRIVER_TEST)
889 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
890 return( mbedtls_test_transparent_hash_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100891 &operation->ctx.test_driver_ctx,
892 hash, hash_size, hash_length ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800893+#endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100894+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
895+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
896+ return( cc3xx_hash_finish(
897+ &operation->ctx.cc3xx_driver_ctx,
898+ hash, hash_size, hash_length ) );
899+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800900+#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
901+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
902+ return( mbedtls_psa_hash_finish( &operation->ctx.mbedtls_ctx,
903+ hash, hash_size, hash_length ) );
904 #endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100905 default:
906 (void) hash;
Summer Qin36f79f72022-07-05 14:53:35 +0800907@@ -1497,14 +1718,20 @@ psa_status_t psa_driver_wrapper_hash_abort(
908 {
909 switch( operation->id )
910 {
911-#if defined(MBEDTLS_PSA_BUILTIN_HASH)
912- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
913- return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
914-#endif
915+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
916 #if defined(PSA_CRYPTO_DRIVER_TEST)
917 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
Antonio de Angelis86b98312021-12-17 21:42:40 +0100918 return( mbedtls_test_transparent_hash_abort(
919 &operation->ctx.test_driver_ctx ) );
Summer Qin36f79f72022-07-05 14:53:35 +0800920+#endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100921+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
922+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
923+ return( cc3xx_hash_abort(
924+ &operation->ctx.cc3xx_driver_ctx ) );
925+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800926+#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
927+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
928+ return( mbedtls_psa_hash_abort( &operation->ctx.mbedtls_ctx ) );
929 #endif
Antonio de Angelis86b98312021-12-17 21:42:40 +0100930 default:
931 return( PSA_ERROR_BAD_STATE );
Summer Qin36f79f72022-07-05 14:53:35 +0800932@@ -1543,24 +1770,39 @@ psa_status_t psa_driver_wrapper_aead_encrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100933 if( status != PSA_ERROR_NOT_SUPPORTED )
934 return( status );
935 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +0800936-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
937-
938- /* Fell through, meaning no accelerator supports this operation */
939- return( mbedtls_psa_aead_encrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100940+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
941+ status = cc3xx_aead_encrypt(
Summer Qin36f79f72022-07-05 14:53:35 +0800942 attributes, key_buffer, key_buffer_size,
943 alg,
944 nonce, nonce_length,
945 additional_data, additional_data_length,
946 plaintext, plaintext_length,
947- ciphertext, ciphertext_size, ciphertext_length ) );
948-
949- /* Add cases for opaque driver here */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100950+ ciphertext, ciphertext_size, ciphertext_length );
951+
952+ if( status != PSA_ERROR_NOT_SUPPORTED )
953+ return( status );
954+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800955+ break;
956+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
957+
958+ /* Fell through, meaning no accelerator supports this operation */
959+ return( mbedtls_psa_aead_encrypt(
960+ attributes, key_buffer, key_buffer_size,
961+ alg,
962+ nonce, nonce_length,
963+ additional_data, additional_data_length,
964+ plaintext, plaintext_length,
965+ ciphertext, ciphertext_size, ciphertext_length ) );
966+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
967+
968+ /* Add cases for opaque driver here */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100969
Summer Qin36f79f72022-07-05 14:53:35 +0800970 default:
971 /* Key is declared with a lifetime not known to us */
972 (void)status;
973 return( PSA_ERROR_INVALID_ARGUMENT );
974 }
975+ return status;
976 }
977
978 psa_status_t psa_driver_wrapper_aead_decrypt(
979@@ -1595,7 +1837,20 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
Antonio de Angelis86b98312021-12-17 21:42:40 +0100980 if( status != PSA_ERROR_NOT_SUPPORTED )
981 return( status );
982 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +0800983-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100984+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
985+ status = cc3xx_aead_decrypt(
986+ attributes, key_buffer, key_buffer_size,
987+ alg,
988+ nonce, nonce_length,
989+ additional_data, additional_data_length,
990+ ciphertext, ciphertext_length,
991+ plaintext, plaintext_size, plaintext_length );
992+
993+ if( status != PSA_ERROR_NOT_SUPPORTED )
994+ return( status );
995+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +0800996+ break;
997+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +0100998
999 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +08001000 return( mbedtls_psa_aead_decrypt(
1001@@ -1605,6 +1860,7 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
1002 additional_data, additional_data_length,
1003 ciphertext, ciphertext_length,
1004 plaintext, plaintext_size, plaintext_length ) );
1005+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1006
1007 /* Add cases for opaque driver here */
1008
1009@@ -1613,6 +1869,7 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
1010 (void)status;
1011 return( PSA_ERROR_INVALID_ARGUMENT );
1012 }
1013+ return status;
1014 }
1015
1016 psa_status_t psa_driver_wrapper_aead_encrypt_setup(
1017@@ -1643,7 +1900,18 @@ psa_status_t psa_driver_wrapper_aead_encrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001018 if( status != PSA_ERROR_NOT_SUPPORTED )
1019 return( status );
1020 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +08001021-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001022+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1023+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
1024+ status = cc3xx_aead_encrypt_setup(
1025+ &operation->ctx.cc3xx_driver_ctx,
1026+ attributes, key_buffer, key_buffer_size,
1027+ alg );
1028+
1029+ /* Declared with fallback == true */
1030+ if( status != PSA_ERROR_NOT_SUPPORTED )
1031+ return( status );
1032+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001033+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001034
1035 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +08001036 operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
1037@@ -1651,9 +1919,8 @@ psa_status_t psa_driver_wrapper_aead_encrypt_setup(
1038 &operation->ctx.mbedtls_ctx, attributes,
1039 key_buffer, key_buffer_size,
1040 alg );
1041-
1042- return( status );
1043-
1044+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1045+ break;
1046 /* Add cases for opaque driver here */
1047
1048 default:
1049@@ -1661,6 +1928,7 @@ psa_status_t psa_driver_wrapper_aead_encrypt_setup(
1050 (void)status;
1051 return( PSA_ERROR_INVALID_ARGUMENT );
1052 }
1053+ return status;
1054 }
1055
1056 psa_status_t psa_driver_wrapper_aead_decrypt_setup(
1057@@ -1692,7 +1960,19 @@ psa_status_t psa_driver_wrapper_aead_decrypt_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001058 if( status != PSA_ERROR_NOT_SUPPORTED )
1059 return( status );
1060 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +08001061-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001062+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1063+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
1064+ status = cc3xx_aead_decrypt_setup(
1065+ &operation->ctx.cc3xx_driver_ctx,
1066+ attributes,
1067+ key_buffer, key_buffer_size,
1068+ alg );
1069+
1070+ /* Declared with fallback == true */
1071+ if( status != PSA_ERROR_NOT_SUPPORTED )
1072+ return( status );
1073+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001074+#else /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001075
1076 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +08001077 operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
1078@@ -1701,9 +1981,8 @@ psa_status_t psa_driver_wrapper_aead_decrypt_setup(
1079 attributes,
1080 key_buffer, key_buffer_size,
1081 alg );
1082-
1083- return( status );
1084-
1085+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1086+ break;
1087 /* Add cases for opaque driver here */
1088
1089 default:
1090@@ -1711,6 +1990,7 @@ psa_status_t psa_driver_wrapper_aead_decrypt_setup(
1091 (void)status;
1092 return( PSA_ERROR_INVALID_ARGUMENT );
1093 }
1094+ return status;
1095 }
1096
1097 psa_status_t psa_driver_wrapper_aead_set_nonce(
1098@@ -1720,14 +2000,6 @@ psa_status_t psa_driver_wrapper_aead_set_nonce(
1099 {
1100 switch( operation->id )
1101 {
1102-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1103- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1104- return( mbedtls_psa_aead_set_nonce( &operation->ctx.mbedtls_ctx,
1105- nonce,
1106- nonce_length ) );
1107-
1108-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1109-
1110 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1111 #if defined(PSA_CRYPTO_DRIVER_TEST)
1112 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1113@@ -1738,6 +2010,20 @@ psa_status_t psa_driver_wrapper_aead_set_nonce(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001114 /* Add cases for opaque driver here */
1115
1116 #endif /* PSA_CRYPTO_DRIVER_TEST */
1117+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1118+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1119+ return( cc3xx_aead_set_nonce(
1120+ &operation->ctx.cc3xx_driver_ctx,
1121+ nonce, nonce_length ) );
1122+
1123+ /* Add cases for opaque driver here */
1124+
1125+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001126+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1127+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1128+ return( mbedtls_psa_aead_set_nonce( &operation->ctx.mbedtls_ctx,
1129+ nonce,
1130+ nonce_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001131 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1132 }
1133
Summer Qin36f79f72022-07-05 14:53:35 +08001134@@ -1754,14 +2040,6 @@ psa_status_t psa_driver_wrapper_aead_set_lengths(
1135 {
1136 switch( operation->id )
1137 {
1138-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1139- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1140- return( mbedtls_psa_aead_set_lengths( &operation->ctx.mbedtls_ctx,
1141- ad_length,
1142- plaintext_length ) );
1143-
1144-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1145-
1146 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1147 #if defined(PSA_CRYPTO_DRIVER_TEST)
1148 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1149@@ -1772,6 +2050,20 @@ psa_status_t psa_driver_wrapper_aead_set_lengths(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001150 /* Add cases for opaque driver here */
1151
1152 #endif /* PSA_CRYPTO_DRIVER_TEST */
1153+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1154+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1155+ return( cc3xx_aead_set_lengths(
1156+ &operation->ctx.cc3xx_driver_ctx,
1157+ ad_length, plaintext_length ) );
1158+
1159+ /* Add cases for opaque driver here */
1160+
1161+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001162+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1163+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1164+ return( mbedtls_psa_aead_set_lengths( &operation->ctx.mbedtls_ctx,
1165+ ad_length,
1166+ plaintext_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001167 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1168 }
1169
Summer Qin36f79f72022-07-05 14:53:35 +08001170@@ -1788,14 +2080,6 @@ psa_status_t psa_driver_wrapper_aead_update_ad(
1171 {
1172 switch( operation->id )
1173 {
1174-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1175- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1176- return( mbedtls_psa_aead_update_ad( &operation->ctx.mbedtls_ctx,
1177- input,
1178- input_length ) );
1179-
1180-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1181-
1182 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1183 #if defined(PSA_CRYPTO_DRIVER_TEST)
1184 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1185@@ -1806,6 +2090,20 @@ psa_status_t psa_driver_wrapper_aead_update_ad(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001186 /* Add cases for opaque driver here */
1187
1188 #endif /* PSA_CRYPTO_DRIVER_TEST */
1189+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1190+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1191+ return( cc3xx_aead_update_ad(
1192+ &operation->ctx.cc3xx_driver_ctx,
1193+ input, input_length ) );
1194+
1195+ /* Add cases for opaque driver here */
1196+
1197+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001198+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1199+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1200+ return( mbedtls_psa_aead_update_ad( &operation->ctx.mbedtls_ctx,
1201+ input,
1202+ input_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001203 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1204 }
1205
Summer Qin36f79f72022-07-05 14:53:35 +08001206@@ -1825,15 +2123,6 @@ psa_status_t psa_driver_wrapper_aead_update(
1207 {
1208 switch( operation->id )
1209 {
1210-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1211- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1212- return( mbedtls_psa_aead_update( &operation->ctx.mbedtls_ctx,
1213- input, input_length,
1214- output, output_size,
1215- output_length ) );
1216-
1217-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1218-
1219 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1220 #if defined(PSA_CRYPTO_DRIVER_TEST)
1221 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1222@@ -1845,6 +2134,22 @@ psa_status_t psa_driver_wrapper_aead_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001223 /* Add cases for opaque driver here */
1224
1225 #endif /* PSA_CRYPTO_DRIVER_TEST */
1226+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1227+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1228+ return( cc3xx_aead_update(
1229+ &operation->ctx.cc3xx_driver_ctx,
1230+ input, input_length, output, output_size,
1231+ output_length ) );
1232+
1233+ /* Add cases for opaque driver here */
1234+
1235+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001236+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1237+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1238+ return( mbedtls_psa_aead_update( &operation->ctx.mbedtls_ctx,
1239+ input, input_length,
1240+ output, output_size,
1241+ output_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001242 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1243 }
1244
Summer Qin36f79f72022-07-05 14:53:35 +08001245@@ -1868,16 +2173,6 @@ psa_status_t psa_driver_wrapper_aead_finish(
1246 {
1247 switch( operation->id )
1248 {
1249-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1250- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1251- return( mbedtls_psa_aead_finish( &operation->ctx.mbedtls_ctx,
1252- ciphertext,
1253- ciphertext_size,
1254- ciphertext_length, tag,
1255- tag_size, tag_length ) );
1256-
1257-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1258-
1259 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1260 #if defined(PSA_CRYPTO_DRIVER_TEST)
1261 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1262@@ -1889,6 +2184,23 @@ psa_status_t psa_driver_wrapper_aead_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001263 /* Add cases for opaque driver here */
1264
1265 #endif /* PSA_CRYPTO_DRIVER_TEST */
1266+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1267+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1268+ return( cc3xx_aead_finish(
1269+ &operation->ctx.cc3xx_driver_ctx,
1270+ ciphertext, ciphertext_size,
1271+ ciphertext_length, tag, tag_size, tag_length ) );
1272+
1273+ /* Add cases for opaque driver here */
1274+
1275+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001276+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1277+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1278+ return( mbedtls_psa_aead_finish( &operation->ctx.mbedtls_ctx,
1279+ ciphertext,
1280+ ciphertext_size,
1281+ ciphertext_length, tag,
1282+ tag_size, tag_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001283 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1284 }
1285
Summer Qin36f79f72022-07-05 14:53:35 +08001286@@ -1912,7 +2224,28 @@ psa_status_t psa_driver_wrapper_aead_verify(
1287 {
1288 switch( operation->id )
1289 {
1290-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1291+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1292+#if defined(PSA_CRYPTO_DRIVER_TEST)
1293+ case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1294+ return( mbedtls_test_transparent_aead_verify(
1295+ &operation->ctx.transparent_test_driver_ctx,
1296+ plaintext, plaintext_size,
1297+ plaintext_length, tag, tag_length ) );
1298+
1299+ /* Add cases for opaque driver here */
1300+
1301+#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001302+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1303+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1304+ return( cc3xx_aead_verify(
1305+ &operation->ctx.cc3xx_driver_ctx,
1306+ plaintext, plaintext_size,
1307+ plaintext_length, tag, tag_length ) );
1308+
1309+ /* Add cases for opaque driver here */
1310+
1311+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001312+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1313 case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1314 {
1315 psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
1316@@ -1939,20 +2272,6 @@ psa_status_t psa_driver_wrapper_aead_verify(
1317
1318 return( status );
1319 }
1320-
1321-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1322-
1323-#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1324-#if defined(PSA_CRYPTO_DRIVER_TEST)
1325- case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1326- return( mbedtls_test_transparent_aead_verify(
1327- &operation->ctx.transparent_test_driver_ctx,
1328- plaintext, plaintext_size,
1329- plaintext_length, tag, tag_length ) );
1330-
1331- /* Add cases for opaque driver here */
1332-
1333-#endif /* PSA_CRYPTO_DRIVER_TEST */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001334 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1335 }
1336
Summer Qin36f79f72022-07-05 14:53:35 +08001337@@ -1970,12 +2289,6 @@ psa_status_t psa_driver_wrapper_aead_abort(
1338 {
1339 switch( operation->id )
1340 {
1341-#if defined(MBEDTLS_PSA_BUILTIN_AEAD)
1342- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1343- return( mbedtls_psa_aead_abort( &operation->ctx.mbedtls_ctx ) );
1344-
1345-#endif /* MBEDTLS_PSA_BUILTIN_AEAD */
1346-
1347 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1348 #if defined(PSA_CRYPTO_DRIVER_TEST)
1349 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1350@@ -1985,6 +2298,17 @@ psa_status_t psa_driver_wrapper_aead_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001351 /* Add cases for opaque driver here */
1352
1353 #endif /* PSA_CRYPTO_DRIVER_TEST */
1354+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1355+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1356+ return( cc3xx_aead_abort(
1357+ &operation->ctx.cc3xx_driver_ctx ) );
1358+
1359+ /* Add cases for opaque driver here */
1360+
1361+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001362+#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
1363+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1364+ return( mbedtls_psa_aead_abort( &operation->ctx.mbedtls_ctx ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001365 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1366 }
1367
Summer Qin36f79f72022-07-05 14:53:35 +08001368@@ -2024,8 +2348,16 @@ psa_status_t psa_driver_wrapper_mac_compute(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001369 if( status != PSA_ERROR_NOT_SUPPORTED )
1370 return( status );
1371 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +08001372-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1373-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001374+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1375+ status = cc3xx_mac_compute(attributes, key_buffer, key_buffer_size, alg,
1376+ input, input_length,
1377+ mac, mac_size, mac_length);
1378+ /* Declared with fallback == true */
1379+ if( status != PSA_ERROR_NOT_SUPPORTED )
1380+ return( status );
1381+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001382+ break;
1383+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001384 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +08001385 status = mbedtls_psa_mac_compute(
1386 attributes, key_buffer, key_buffer_size, alg,
1387@@ -2060,6 +2392,7 @@ psa_status_t psa_driver_wrapper_mac_compute(
1388 (void) status;
1389 return( PSA_ERROR_INVALID_ARGUMENT );
1390 }
1391+ return status;
1392 }
1393
1394 psa_status_t psa_driver_wrapper_mac_sign_setup(
1395@@ -2092,8 +2425,19 @@ psa_status_t psa_driver_wrapper_mac_sign_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001396 if( status != PSA_ERROR_NOT_SUPPORTED )
1397 return( status );
1398 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +08001399-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1400-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001401+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1402+ status = cc3xx_mac_sign_setup(
1403+ &operation->ctx.cc3xx_driver_ctx,
1404+ attributes,
1405+ key_buffer, key_buffer_size,
1406+ alg);
1407+ if (status == PSA_SUCCESS)
1408+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
1409+ if (status != PSA_ERROR_NOT_SUPPORTED)
1410+ return status;
1411+#endif
Summer Qin36f79f72022-07-05 14:53:35 +08001412+ break;
1413+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001414 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +08001415 status = mbedtls_psa_mac_sign_setup( &operation->ctx.mbedtls_ctx,
1416 attributes,
1417@@ -2132,6 +2476,7 @@ psa_status_t psa_driver_wrapper_mac_sign_setup(
1418 (void) alg;
1419 return( PSA_ERROR_INVALID_ARGUMENT );
1420 }
1421+ return status;
1422 }
1423
1424 psa_status_t psa_driver_wrapper_mac_verify_setup(
1425@@ -2164,8 +2509,19 @@ psa_status_t psa_driver_wrapper_mac_verify_setup(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001426 if( status != PSA_ERROR_NOT_SUPPORTED )
1427 return( status );
1428 #endif /* PSA_CRYPTO_DRIVER_TEST */
Summer Qin36f79f72022-07-05 14:53:35 +08001429-#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1430-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001431+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1432+ status = cc3xx_mac_verify_setup(
1433+ &operation->ctx.cc3xx_driver_ctx,
1434+ attributes,
1435+ key_buffer, key_buffer_size,
1436+ alg);
1437+ if (status == PSA_SUCCESS)
1438+ operation->id = PSA_CRYPTO_CC3XX_DRIVER_ID;
1439+ if (status != PSA_ERROR_NOT_SUPPORTED)
1440+ return status;
1441+#endif
Summer Qin36f79f72022-07-05 14:53:35 +08001442+ break;
1443+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
Antonio de Angelis86b98312021-12-17 21:42:40 +01001444 /* Fell through, meaning no accelerator supports this operation */
Summer Qin36f79f72022-07-05 14:53:35 +08001445 status = mbedtls_psa_mac_verify_setup( &operation->ctx.mbedtls_ctx,
1446 attributes,
1447@@ -2204,6 +2560,7 @@ psa_status_t psa_driver_wrapper_mac_verify_setup(
1448 (void) alg;
1449 return( PSA_ERROR_INVALID_ARGUMENT );
1450 }
1451+ return status;
1452 }
1453
1454 psa_status_t psa_driver_wrapper_mac_update(
1455@@ -2213,12 +2570,6 @@ psa_status_t psa_driver_wrapper_mac_update(
1456 {
1457 switch( operation->id )
1458 {
1459-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
1460- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1461- return( mbedtls_psa_mac_update( &operation->ctx.mbedtls_ctx,
1462- input, input_length ) );
1463-#endif /* MBEDTLS_PSA_BUILTIN_MAC */
1464-
1465 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1466 #if defined(PSA_CRYPTO_DRIVER_TEST)
1467 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1468@@ -2231,6 +2582,14 @@ psa_status_t psa_driver_wrapper_mac_update(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001469 &operation->ctx.opaque_test_driver_ctx,
1470 input, input_length ) );
1471 #endif /* PSA_CRYPTO_DRIVER_TEST */
1472+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1473+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1474+ return(cc3xx_mac_update(&operation->ctx.cc3xx_driver_ctx, input, input_length));
1475+#endif
Summer Qin36f79f72022-07-05 14:53:35 +08001476+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
1477+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1478+ return( mbedtls_psa_mac_update( &operation->ctx.mbedtls_ctx,
1479+ input, input_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001480 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1481 default:
1482 (void) input;
Summer Qin36f79f72022-07-05 14:53:35 +08001483@@ -2247,12 +2606,6 @@ psa_status_t psa_driver_wrapper_mac_sign_finish(
1484 {
1485 switch( operation->id )
1486 {
1487-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
1488- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1489- return( mbedtls_psa_mac_sign_finish( &operation->ctx.mbedtls_ctx,
1490- mac, mac_size, mac_length ) );
1491-#endif /* MBEDTLS_PSA_BUILTIN_MAC */
1492-
1493 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1494 #if defined(PSA_CRYPTO_DRIVER_TEST)
1495 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1496@@ -2265,6 +2618,15 @@ psa_status_t psa_driver_wrapper_mac_sign_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001497 &operation->ctx.opaque_test_driver_ctx,
1498 mac, mac_size, mac_length ) );
1499 #endif /* PSA_CRYPTO_DRIVER_TEST */
1500+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1501+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1502+ return(cc3xx_mac_sign_finish(&operation->ctx.cc3xx_driver_ctx,
1503+ mac, mac_size, mac_length));
1504+#endif
Summer Qin36f79f72022-07-05 14:53:35 +08001505+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
1506+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1507+ return( mbedtls_psa_mac_sign_finish( &operation->ctx.mbedtls_ctx,
1508+ mac, mac_size, mac_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001509 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1510 default:
1511 (void) mac;
Summer Qin36f79f72022-07-05 14:53:35 +08001512@@ -2281,12 +2643,6 @@ psa_status_t psa_driver_wrapper_mac_verify_finish(
1513 {
1514 switch( operation->id )
1515 {
1516-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
1517- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1518- return( mbedtls_psa_mac_verify_finish( &operation->ctx.mbedtls_ctx,
1519- mac, mac_length ) );
1520-#endif /* MBEDTLS_PSA_BUILTIN_MAC */
1521-
1522 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1523 #if defined(PSA_CRYPTO_DRIVER_TEST)
1524 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1525@@ -2299,6 +2655,16 @@ psa_status_t psa_driver_wrapper_mac_verify_finish(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001526 &operation->ctx.opaque_test_driver_ctx,
1527 mac, mac_length ) );
1528 #endif /* PSA_CRYPTO_DRIVER_TEST */
1529+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1530+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1531+ return(cc3xx_mac_verify_finish(
1532+ &operation->ctx.cc3xx_driver_ctx,
1533+ mac, mac_length));
1534+#endif
Summer Qin36f79f72022-07-05 14:53:35 +08001535+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
1536+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1537+ return( mbedtls_psa_mac_verify_finish( &operation->ctx.mbedtls_ctx,
1538+ mac, mac_length ) );
Antonio de Angelis86b98312021-12-17 21:42:40 +01001539 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1540 default:
1541 (void) mac;
Summer Qin36f79f72022-07-05 14:53:35 +08001542@@ -2312,11 +2678,6 @@ psa_status_t psa_driver_wrapper_mac_abort(
1543 {
1544 switch( operation->id )
1545 {
1546-#if defined(MBEDTLS_PSA_BUILTIN_MAC)
1547- case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1548- return( mbedtls_psa_mac_abort( &operation->ctx.mbedtls_ctx ) );
1549-#endif /* MBEDTLS_PSA_BUILTIN_MAC */
1550-
1551 #if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1552 #if defined(PSA_CRYPTO_DRIVER_TEST)
1553 case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
1554@@ -2326,10 +2687,176 @@ psa_status_t psa_driver_wrapper_mac_abort(
Antonio de Angelis86b98312021-12-17 21:42:40 +01001555 return( mbedtls_test_opaque_mac_abort(
1556 &operation->ctx.opaque_test_driver_ctx ) );
1557 #endif /* PSA_CRYPTO_DRIVER_TEST */
1558+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1559+ case PSA_CRYPTO_CC3XX_DRIVER_ID:
1560+ return(cc3xx_mac_abort(&operation->ctx.cc3xx_driver_ctx));
1561+#endif
Summer Qin36f79f72022-07-05 14:53:35 +08001562+#elif defined(MBEDTLS_PSA_BUILTIN_MAC)
1563+ case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
1564+ return( mbedtls_psa_mac_abort( &operation->ctx.mbedtls_ctx ) );
1565+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1566+ default:
1567+ return( PSA_ERROR_INVALID_ARGUMENT );
1568+ }
1569+}
1570+
Antonio de Angelis86b98312021-12-17 21:42:40 +01001571+/*
1572+ * Key agreement functions
1573+ */
1574+psa_status_t psa_driver_wrapper_key_agreement(
1575+ const psa_key_attributes_t *attributes,
1576+ const uint8_t *priv_key, size_t priv_key_size,
1577+ const uint8_t *publ_key, size_t publ_key_size,
1578+ uint8_t *output, size_t output_size, size_t *output_length,
1579+ psa_algorithm_t alg )
1580+{
1581+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
1582+
1583+ psa_key_location_t location =
1584+ PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
1585+
1586+ switch( location )
1587+ {
1588+ case PSA_KEY_LOCATION_LOCAL_STORAGE:
1589+ /* Key is stored in the slot in export representation, so
1590+ * cycle through all known transparent accelerators */
1591+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1592+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1593+ status = cc3xx_key_agreement( attributes,
1594+ priv_key,
1595+ priv_key_size,
1596+ publ_key,
1597+ publ_key_size,
1598+ output,
1599+ output_size,
1600+ output_length,
1601+ alg );
1602+ return( status );
1603+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
Summer Qin36f79f72022-07-05 14:53:35 +08001604 #endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
Antonio de Angelis86b98312021-12-17 21:42:40 +01001605+ (void) status;
1606+ return ( PSA_ERROR_NOT_SUPPORTED );
1607+ default:
1608+ /* Key is declared with a lifetime not known to us */
1609+ (void) priv_key;
1610+ (void) priv_key_size;
1611+ (void) publ_key;
1612+ (void) publ_key_size;
1613+ (void) output;
1614+ (void) output_size;
1615+ (void) output_length;
1616+ (void) alg;
1617+
1618+ return( PSA_ERROR_INVALID_ARGUMENT );
1619+ }
1620+}
1621+
1622+/*
1623+ * Asymmetric operations
1624+ */
1625+psa_status_t psa_driver_wrapper_asymmetric_encrypt(const psa_key_attributes_t *attributes,
1626+ const uint8_t *key_buffer,
1627+ size_t key_buffer_size, psa_algorithm_t alg,
1628+ const uint8_t *input, size_t input_length,
1629+ const uint8_t *salt, size_t salt_length,
1630+ uint8_t *output, size_t output_size,
1631+ size_t *output_length)
1632+{
1633+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
1634+
1635+ psa_key_location_t location =
1636+ PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
1637+
1638+ switch( location )
1639+ {
1640+ case PSA_KEY_LOCATION_LOCAL_STORAGE:
1641+ /* Key is stored in the slot in export representation, so
1642+ * cycle through all known transparent accelerators */
1643+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1644+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1645+ status = cc3xx_asymmetric_encrypt( attributes,
1646+ key_buffer,
1647+ key_buffer_size,
1648+ alg,
1649+ input,
1650+ input_length,
1651+ salt,
1652+ salt_length,
1653+ output,
1654+ output_size,
1655+ output_length );
1656+ return( status );
1657+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
1658+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1659+ (void) status;
1660+ return ( PSA_ERROR_NOT_SUPPORTED );
Summer Qin36f79f72022-07-05 14:53:35 +08001661 default:
Antonio de Angelis86b98312021-12-17 21:42:40 +01001662+ /* Key is declared with a lifetime not known to us */
1663+ (void) key_buffer;
1664+ (void) key_buffer_size;
1665+ (void) alg;
1666+ (void) input;
1667+ (void) input_length;
1668+ (void) salt;
1669+ (void) salt_length;
1670+ (void) output;
1671+ (void) output_size;
1672+ (void) output_length;
1673+
Summer Qin36f79f72022-07-05 14:53:35 +08001674 return( PSA_ERROR_INVALID_ARGUMENT );
1675 }
1676 }
1677
Antonio de Angelis86b98312021-12-17 21:42:40 +01001678+psa_status_t psa_driver_wrapper_asymmetric_decrypt(const psa_key_attributes_t *attributes,
1679+ const uint8_t *key_buffer,
1680+ size_t key_buffer_size, psa_algorithm_t alg,
1681+ const uint8_t *input, size_t input_length,
1682+ const uint8_t *salt, size_t salt_length,
1683+ uint8_t *output, size_t output_size,
1684+ size_t *output_length)
1685+{
1686+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
1687+
1688+ psa_key_location_t location =
1689+ PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
1690+
1691+ switch( location )
1692+ {
1693+ case PSA_KEY_LOCATION_LOCAL_STORAGE:
1694+ /* Key is stored in the slot in export representation, so
1695+ * cycle through all known transparent accelerators */
1696+#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
1697+#if defined(PSA_CRYPTO_DRIVER_CC3XX)
1698+ status = cc3xx_asymmetric_decrypt( attributes,
1699+ key_buffer,
1700+ key_buffer_size,
1701+ alg,
1702+ input,
1703+ input_length,
1704+ salt,
1705+ salt_length,
1706+ output,
1707+ output_size,
1708+ output_length );
1709+ return( status );
1710+#endif /* PSA_CRYPTO_DRIVER_CC3XX */
1711+#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
1712+ (void) status;
1713+ return( PSA_ERROR_NOT_SUPPORTED );
1714+ default:
1715+ /* Key is declared with a lifetime not known to us */
1716+ (void) key_buffer;
1717+ (void) key_buffer_size;
1718+ (void) alg;
1719+ (void) input;
1720+ (void) input_length;
1721+ (void) salt;
1722+ (void) salt_length;
1723+ (void) output;
1724+ (void) output_size;
1725+ (void) output_length;
1726+
1727+ return( PSA_ERROR_INVALID_ARGUMENT );
1728+ }
1729+}
1730 #endif /* MBEDTLS_PSA_CRYPTO_C */
1731diff --git a/library/psa_crypto_driver_wrappers.h b/library/psa_crypto_driver_wrappers.h
Summer Qinca6c1522022-06-17 14:25:55 +08001732index e09e4ed7..9ebdb366 100644
Antonio de Angelis86b98312021-12-17 21:42:40 +01001733--- a/library/psa_crypto_driver_wrappers.h
1734+++ b/library/psa_crypto_driver_wrappers.h
1735@@ -329,6 +329,35 @@ psa_status_t psa_driver_wrapper_mac_verify_finish(
1736 psa_status_t psa_driver_wrapper_mac_abort(
1737 psa_mac_operation_t *operation );
1738
1739+/*
1740+ * Key agreement functions
1741+ */
1742+psa_status_t psa_driver_wrapper_key_agreement(
1743+ const psa_key_attributes_t *attributes,
1744+ const uint8_t *priv_key, size_t priv_key_size,
1745+ const uint8_t *publ_key, size_t peer_key_size,
1746+ uint8_t *output, size_t output_size, size_t *output_length,
1747+ psa_algorithm_t alg );
1748+
1749+/*
1750+ * Asymmetric operations
1751+ */
1752+psa_status_t psa_driver_wrapper_asymmetric_encrypt(const psa_key_attributes_t *attributes,
1753+ const uint8_t *key_buffer,
1754+ size_t key_buffer_size, psa_algorithm_t alg,
1755+ const uint8_t *input, size_t input_length,
1756+ const uint8_t *salt, size_t salt_length,
1757+ uint8_t *output, size_t output_size,
1758+ size_t *output_length);
1759+
1760+psa_status_t psa_driver_wrapper_asymmetric_decrypt(const psa_key_attributes_t *attributes,
1761+ const uint8_t *key_buffer,
1762+ size_t key_buffer_size, psa_algorithm_t alg,
1763+ const uint8_t *input, size_t input_length,
1764+ const uint8_t *salt, size_t salt_length,
1765+ uint8_t *output, size_t output_size,
1766+ size_t *output_length);
1767+
1768 #endif /* PSA_CRYPTO_DRIVER_WRAPPERS_H */
1769
1770 /* End of automatically generated file. */
1771--
Summer Qinca6c1522022-06-17 14:25:55 +080017722.17.1
Antonio de Angelis86b98312021-12-17 21:42:40 +01001773