1/*
2 *  Functions to delegate cryptographic operations to an available
3 *  and appropriate accelerator.
4 *  Warning: This file is now auto-generated.
5 */
6/*  Copyright The Mbed TLS Contributors
7 *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
8 */
9
10
11/* BEGIN-common headers */
12#include "common.h"
13#include "psa_crypto_aead.h"
14#include "psa_crypto_cipher.h"
15#include "psa_crypto_core.h"
16#include "psa_crypto_driver_wrappers_no_static.h"
17#include "psa_crypto_hash.h"
18#include "psa_crypto_mac.h"
19#include "psa_crypto_pake.h"
20#include "psa_crypto_rsa.h"
21
22#include "mbedtls/platform.h"
23#include "mbedtls/constant_time.h"
24/* END-common headers */
25
26#if defined(MBEDTLS_PSA_CRYPTO_C)
27
28/* BEGIN-driver headers */
29/* Headers for mbedtls_test opaque driver */
30#if defined(PSA_CRYPTO_DRIVER_TEST)
31#include "test/drivers/test_driver.h"
32
33#endif
34/* Headers for mbedtls_test transparent driver */
35#if defined(PSA_CRYPTO_DRIVER_TEST)
36#include "test/drivers/test_driver.h"
37
38#endif
39/* Headers for p256 transparent driver */
40#if defined(MBEDTLS_PSA_P256M_DRIVER_ENABLED)
41#include "../3rdparty/p256-m/p256-m_driver_entrypoints.h"
42
43#endif
44
45/* END-driver headers */
46
47/* Auto-generated values depending on which drivers are registered.
48 * ID 0 is reserved for unallocated operations.
49 * ID 1 is reserved for the Mbed TLS software driver. */
50/* BEGIN-driver id definition */
51#define PSA_CRYPTO_MBED_TLS_DRIVER_ID (1)
52#define MBEDTLS_TEST_OPAQUE_DRIVER_ID (2)
53#define MBEDTLS_TEST_TRANSPARENT_DRIVER_ID (3)
54#define P256_TRANSPARENT_DRIVER_ID (4)
55
56/* END-driver id */
57
58/* BEGIN-Common Macro definitions */
59
60/* END-Common Macro definitions */
61
62/* Support the 'old' SE interface when asked to */
63#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
64/* PSA_CRYPTO_DRIVER_PRESENT is defined when either a new-style or old-style
65 * SE driver is present, to avoid unused argument errors at compile time. */
66#ifndef PSA_CRYPTO_DRIVER_PRESENT
67#define PSA_CRYPTO_DRIVER_PRESENT
68#endif
69#include "psa_crypto_se.h"
70#endif
71
72psa_status_t psa_driver_wrapper_init(void);
73
74void psa_driver_wrapper_free(void);
75
76/* Start delegation functions */
77psa_status_t psa_driver_wrapper_sign_message(
78    const psa_key_attributes_t *attributes,
79    const uint8_t *key_buffer,
80    size_t key_buffer_size,
81    psa_algorithm_t alg,
82    const uint8_t *input,
83    size_t input_length,
84    uint8_t *signature,
85    size_t signature_size,
86    size_t *signature_length);
87
88psa_status_t psa_driver_wrapper_verify_message(
89    const psa_key_attributes_t *attributes,
90    const uint8_t *key_buffer,
91    size_t key_buffer_size,
92    psa_algorithm_t alg,
93    const uint8_t *input,
94    size_t input_length,
95    const uint8_t *signature,
96    size_t signature_length);
97
98psa_status_t psa_driver_wrapper_sign_hash(
99    const psa_key_attributes_t *attributes,
100    const uint8_t *key_buffer, size_t key_buffer_size,
101    psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
102    uint8_t *signature, size_t signature_size, size_t *signature_length);
103
104psa_status_t psa_driver_wrapper_verify_hash(
105    const psa_key_attributes_t *attributes,
106    const uint8_t *key_buffer, size_t key_buffer_size,
107    psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
108    const uint8_t *signature, size_t signature_length);
109
110uint32_t psa_driver_wrapper_sign_hash_get_num_ops(
111    psa_sign_hash_interruptible_operation_t *operation);
112
113uint32_t psa_driver_wrapper_verify_hash_get_num_ops(
114    psa_verify_hash_interruptible_operation_t *operation);
115
116psa_status_t psa_driver_wrapper_sign_hash_start(
117    psa_sign_hash_interruptible_operation_t *operation,
118    const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
119    size_t key_buffer_size, psa_algorithm_t alg,
120    const uint8_t *hash, size_t hash_length);
121
122psa_status_t psa_driver_wrapper_sign_hash_complete(
123    psa_sign_hash_interruptible_operation_t *operation,
124    uint8_t *signature, size_t signature_size,
125    size_t *signature_length);
126
127psa_status_t psa_driver_wrapper_sign_hash_abort(
128    psa_sign_hash_interruptible_operation_t *operation);
129
130psa_status_t psa_driver_wrapper_verify_hash_start(
131    psa_verify_hash_interruptible_operation_t *operation,
132    const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
133    size_t key_buffer_size, psa_algorithm_t alg,
134    const uint8_t *hash, size_t hash_length,
135    const uint8_t *signature, size_t signature_length);
136
137psa_status_t psa_driver_wrapper_verify_hash_complete(
138    psa_verify_hash_interruptible_operation_t *operation);
139
140psa_status_t psa_driver_wrapper_verify_hash_abort(
141    psa_verify_hash_interruptible_operation_t *operation);
142
143/** Calculate the key buffer size required to store the key material of a key
144 *  associated with an opaque driver from input key data.
145 *
146 * \param[in] attributes        The key attributes
147 * \param[in] data              The input key data.
148 * \param[in] data_length       The input data length.
149 * \param[out] key_buffer_size  Minimum buffer size to contain the key material.
150 *
151 * \retval #PSA_SUCCESS \emptydescription
152 * \retval #PSA_ERROR_INVALID_ARGUMENT \emptydescription
153 * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
154 */
155psa_status_t psa_driver_wrapper_get_key_buffer_size_from_key_data(
156    const psa_key_attributes_t *attributes,
157    const uint8_t *data,
158    size_t data_length,
159    size_t *key_buffer_size);
160
161psa_status_t psa_driver_wrapper_generate_key(
162    const psa_key_attributes_t *attributes,
163    const psa_key_production_parameters_t *params, size_t params_data_length,
164    uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length);
165
166psa_status_t psa_driver_wrapper_import_key(
167    const psa_key_attributes_t *attributes,
168    const uint8_t *data,
169    size_t data_length,
170    uint8_t *key_buffer,
171    size_t key_buffer_size,
172    size_t *key_buffer_length,
173    size_t *bits);
174
175psa_status_t psa_driver_wrapper_export_key(
176    const psa_key_attributes_t *attributes,
177    const uint8_t *key_buffer, size_t key_buffer_size,
178    uint8_t *data, size_t data_size, size_t *data_length);
179
180psa_status_t psa_driver_wrapper_copy_key(
181    psa_key_attributes_t *attributes,
182    const uint8_t *source_key, size_t source_key_length,
183    uint8_t *target_key_buffer, size_t target_key_buffer_size,
184    size_t *target_key_buffer_length);
185
186/*
187 * Cipher functions
188 */
189psa_status_t psa_driver_wrapper_cipher_encrypt(
190    const psa_key_attributes_t *attributes,
191    const uint8_t *key_buffer,
192    size_t key_buffer_size,
193    psa_algorithm_t alg,
194    const uint8_t *iv,
195    size_t iv_length,
196    const uint8_t *input,
197    size_t input_length,
198    uint8_t *output,
199    size_t output_size,
200    size_t *output_length);
201
202psa_status_t psa_driver_wrapper_cipher_decrypt(
203    const psa_key_attributes_t *attributes,
204    const uint8_t *key_buffer,
205    size_t key_buffer_size,
206    psa_algorithm_t alg,
207    const uint8_t *input,
208    size_t input_length,
209    uint8_t *output,
210    size_t output_size,
211    size_t *output_length);
212
213psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
214    psa_cipher_operation_t *operation,
215    const psa_key_attributes_t *attributes,
216    const uint8_t *key_buffer, size_t key_buffer_size,
217    psa_algorithm_t alg);
218
219psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
220    psa_cipher_operation_t *operation,
221    const psa_key_attributes_t *attributes,
222    const uint8_t *key_buffer, size_t key_buffer_size,
223    psa_algorithm_t alg);
224
225psa_status_t psa_driver_wrapper_cipher_set_iv(
226    psa_cipher_operation_t *operation,
227    const uint8_t *iv,
228    size_t iv_length);
229
230psa_status_t psa_driver_wrapper_cipher_update(
231    psa_cipher_operation_t *operation,
232    const uint8_t *input,
233    size_t input_length,
234    uint8_t *output,
235    size_t output_size,
236    size_t *output_length);
237
238psa_status_t psa_driver_wrapper_cipher_finish(
239    psa_cipher_operation_t *operation,
240    uint8_t *output,
241    size_t output_size,
242    size_t *output_length);
243
244psa_status_t psa_driver_wrapper_cipher_abort(
245    psa_cipher_operation_t *operation);
246
247/*
248 * Hashing functions
249 */
250psa_status_t psa_driver_wrapper_hash_compute(
251    psa_algorithm_t alg,
252    const uint8_t *input,
253    size_t input_length,
254    uint8_t *hash,
255    size_t hash_size,
256    size_t *hash_length);
257
258psa_status_t psa_driver_wrapper_hash_setup(
259    psa_hash_operation_t *operation,
260    psa_algorithm_t alg);
261
262psa_status_t psa_driver_wrapper_hash_clone(
263    const psa_hash_operation_t *source_operation,
264    psa_hash_operation_t *target_operation);
265
266psa_status_t psa_driver_wrapper_hash_update(
267    psa_hash_operation_t *operation,
268    const uint8_t *input,
269    size_t input_length);
270
271psa_status_t psa_driver_wrapper_hash_finish(
272    psa_hash_operation_t *operation,
273    uint8_t *hash,
274    size_t hash_size,
275    size_t *hash_length);
276
277psa_status_t psa_driver_wrapper_hash_abort(
278    psa_hash_operation_t *operation);
279
280psa_status_t psa_driver_wrapper_aead_encrypt(
281    const psa_key_attributes_t *attributes,
282    const uint8_t *key_buffer, size_t key_buffer_size,
283    psa_algorithm_t alg,
284    const uint8_t *nonce, size_t nonce_length,
285    const uint8_t *additional_data, size_t additional_data_length,
286    const uint8_t *plaintext, size_t plaintext_length,
287    uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length);
288
289psa_status_t psa_driver_wrapper_aead_decrypt(
290    const psa_key_attributes_t *attributes,
291    const uint8_t *key_buffer, size_t key_buffer_size,
292    psa_algorithm_t alg,
293    const uint8_t *nonce, size_t nonce_length,
294    const uint8_t *additional_data, size_t additional_data_length,
295    const uint8_t *ciphertext, size_t ciphertext_length,
296    uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length);
297
298psa_status_t psa_driver_wrapper_aead_encrypt_setup(
299   psa_aead_operation_t *operation,
300   const psa_key_attributes_t *attributes,
301   const uint8_t *key_buffer, size_t key_buffer_size,
302   psa_algorithm_t alg);
303
304psa_status_t psa_driver_wrapper_aead_decrypt_setup(
305   psa_aead_operation_t *operation,
306   const psa_key_attributes_t *attributes,
307   const uint8_t *key_buffer, size_t key_buffer_size,
308   psa_algorithm_t alg);
309
310psa_status_t psa_driver_wrapper_aead_set_nonce(
311   psa_aead_operation_t *operation,
312   const uint8_t *nonce,
313   size_t nonce_length);
314
315psa_status_t psa_driver_wrapper_aead_set_lengths(
316   psa_aead_operation_t *operation,
317   size_t ad_length,
318   size_t plaintext_length);
319
320psa_status_t psa_driver_wrapper_aead_update_ad(
321   psa_aead_operation_t *operation,
322   const uint8_t *input,
323   size_t input_length);
324
325psa_status_t psa_driver_wrapper_aead_update(
326   psa_aead_operation_t *operation,
327   const uint8_t *input,
328   size_t input_length,
329   uint8_t *output,
330   size_t output_size,
331   size_t *output_length);
332
333psa_status_t psa_driver_wrapper_aead_finish(
334   psa_aead_operation_t *operation,
335   uint8_t *ciphertext,
336   size_t ciphertext_size,
337   size_t *ciphertext_length,
338   uint8_t *tag,
339   size_t tag_size,
340   size_t *tag_length);
341
342psa_status_t psa_driver_wrapper_aead_verify(
343   psa_aead_operation_t *operation,
344   uint8_t *plaintext,
345   size_t plaintext_size,
346   size_t *plaintext_length,
347   const uint8_t *tag,
348   size_t tag_length);
349
350psa_status_t psa_driver_wrapper_aead_abort(
351   psa_aead_operation_t *operation);
352
353/*
354 * MAC functions
355 */
356psa_status_t psa_driver_wrapper_mac_compute(
357    const psa_key_attributes_t *attributes,
358    const uint8_t *key_buffer,
359    size_t key_buffer_size,
360    psa_algorithm_t alg,
361    const uint8_t *input,
362    size_t input_length,
363    uint8_t *mac,
364    size_t mac_size,
365    size_t *mac_length);
366
367psa_status_t psa_driver_wrapper_mac_sign_setup(
368    psa_mac_operation_t *operation,
369    const psa_key_attributes_t *attributes,
370    const uint8_t *key_buffer,
371    size_t key_buffer_size,
372    psa_algorithm_t alg);
373
374psa_status_t psa_driver_wrapper_mac_verify_setup(
375    psa_mac_operation_t *operation,
376    const psa_key_attributes_t *attributes,
377    const uint8_t *key_buffer,
378    size_t key_buffer_size,
379    psa_algorithm_t alg);
380
381psa_status_t psa_driver_wrapper_mac_update(
382    psa_mac_operation_t *operation,
383    const uint8_t *input,
384    size_t input_length);
385
386psa_status_t psa_driver_wrapper_mac_sign_finish(
387    psa_mac_operation_t *operation,
388    uint8_t *mac,
389    size_t mac_size,
390    size_t *mac_length);
391
392psa_status_t psa_driver_wrapper_mac_verify_finish(
393    psa_mac_operation_t *operation,
394    const uint8_t *mac,
395    size_t mac_length);
396
397psa_status_t psa_driver_wrapper_mac_abort(
398    psa_mac_operation_t *operation);
399
400/*
401 * Asymmetric cryptography
402 */
403psa_status_t psa_driver_wrapper_asymmetric_encrypt(
404    const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
405    size_t key_buffer_size, psa_algorithm_t alg, const uint8_t *input,
406    size_t input_length, const uint8_t *salt, size_t salt_length,
407    uint8_t *output, size_t output_size, size_t *output_length);
408
409psa_status_t psa_driver_wrapper_asymmetric_decrypt(
410    const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
411    size_t key_buffer_size, psa_algorithm_t alg, const uint8_t *input,
412    size_t input_length, const uint8_t *salt, size_t salt_length,
413    uint8_t *output, size_t output_size, size_t *output_length);
414
415psa_status_t psa_driver_wrapper_key_agreement(
416    const psa_key_attributes_t *attributes,
417    const uint8_t *key_buffer,
418    size_t key_buffer_size,
419    psa_algorithm_t alg,
420    const uint8_t *peer_key,
421    size_t peer_key_length,
422    uint8_t *shared_secret,
423    size_t shared_secret_size,
424    size_t *shared_secret_length);
425
426psa_status_t psa_driver_wrapper_pake_setup(
427    psa_pake_operation_t *operation,
428    const psa_crypto_driver_pake_inputs_t *inputs);
429
430psa_status_t psa_driver_wrapper_pake_output(
431    psa_pake_operation_t *operation,
432    psa_crypto_driver_pake_step_t step,
433    uint8_t *output,
434    size_t output_size,
435    size_t *output_length);
436
437psa_status_t psa_driver_wrapper_pake_input(
438    psa_pake_operation_t *operation,
439    psa_crypto_driver_pake_step_t step,
440    const uint8_t *input,
441    size_t input_length);
442
443psa_status_t psa_driver_wrapper_pake_get_implicit_key(
444    psa_pake_operation_t *operation,
445    uint8_t *output, size_t output_size,
446    size_t *output_length);
447
448psa_status_t psa_driver_wrapper_pake_abort(
449    psa_pake_operation_t * operation);
450
451#endif /* MBEDTLS_PSA_CRYPTO_C */
452