• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
72 psa_status_t psa_driver_wrapper_init(void);
73 
74 void psa_driver_wrapper_free(void);
75 
76 /* Start delegation functions */
77 psa_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 
88 psa_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 
98 psa_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 
104 psa_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 
110 uint32_t psa_driver_wrapper_sign_hash_get_num_ops(
111     psa_sign_hash_interruptible_operation_t *operation);
112 
113 uint32_t psa_driver_wrapper_verify_hash_get_num_ops(
114     psa_verify_hash_interruptible_operation_t *operation);
115 
116 psa_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 
122 psa_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 
127 psa_status_t psa_driver_wrapper_sign_hash_abort(
128     psa_sign_hash_interruptible_operation_t *operation);
129 
130 psa_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 
137 psa_status_t psa_driver_wrapper_verify_hash_complete(
138     psa_verify_hash_interruptible_operation_t *operation);
139 
140 psa_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  */
155 psa_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 
161 psa_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 
166 psa_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 
175 psa_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 
180 psa_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  */
189 psa_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 
202 psa_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 
213 psa_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 
219 psa_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 
225 psa_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 
230 psa_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 
238 psa_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 
244 psa_status_t psa_driver_wrapper_cipher_abort(
245     psa_cipher_operation_t *operation);
246 
247 /*
248  * Hashing functions
249  */
250 psa_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 
258 psa_status_t psa_driver_wrapper_hash_setup(
259     psa_hash_operation_t *operation,
260     psa_algorithm_t alg);
261 
262 psa_status_t psa_driver_wrapper_hash_clone(
263     const psa_hash_operation_t *source_operation,
264     psa_hash_operation_t *target_operation);
265 
266 psa_status_t psa_driver_wrapper_hash_update(
267     psa_hash_operation_t *operation,
268     const uint8_t *input,
269     size_t input_length);
270 
271 psa_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 
277 psa_status_t psa_driver_wrapper_hash_abort(
278     psa_hash_operation_t *operation);
279 
280 psa_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 
289 psa_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 
298 psa_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 
304 psa_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 
310 psa_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 
315 psa_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 
320 psa_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 
325 psa_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 
333 psa_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 
342 psa_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 
350 psa_status_t psa_driver_wrapper_aead_abort(
351    psa_aead_operation_t *operation);
352 
353 /*
354  * MAC functions
355  */
356 psa_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 
367 psa_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 
374 psa_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 
381 psa_status_t psa_driver_wrapper_mac_update(
382     psa_mac_operation_t *operation,
383     const uint8_t *input,
384     size_t input_length);
385 
386 psa_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 
392 psa_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 
397 psa_status_t psa_driver_wrapper_mac_abort(
398     psa_mac_operation_t *operation);
399 
400 /*
401  * Asymmetric cryptography
402  */
403 psa_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 
409 psa_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 
415 psa_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 
426 psa_status_t psa_driver_wrapper_pake_setup(
427     psa_pake_operation_t *operation,
428     const psa_crypto_driver_pake_inputs_t *inputs);
429 
430 psa_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 
437 psa_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 
443 psa_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 
448 psa_status_t psa_driver_wrapper_pake_abort(
449     psa_pake_operation_t * operation);
450 
451 #endif /* MBEDTLS_PSA_CRYPTO_C */
452