1 /*
2  *  Function signatures for functionality that can be provided by
3  *  cryptographic accelerators.
4  */
5 /*  Copyright The Mbed TLS Contributors
6  *  SPDX-License-Identifier: Apache-2.0
7  *
8  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
9  *  not use this file except in compliance with the License.
10  *  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  *  Unless required by applicable law or agreed to in writing, software
15  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  *  See the License for the specific language governing permissions and
18  *  limitations under the License.
19  */
20 
21 #ifndef PSA_CRYPTO_DRIVER_WRAPPERS_H
22 #define PSA_CRYPTO_DRIVER_WRAPPERS_H
23 
24 #include "psa/crypto.h"
25 #include "psa/crypto_driver_common.h"
26 
27 /*
28  * Initialization and termination functions
29  */
30 psa_status_t psa_driver_wrapper_init(void);
31 void psa_driver_wrapper_free(void);
32 
33 /*
34  * Signature functions
35  */
36 psa_status_t psa_driver_wrapper_sign_message(
37     const psa_key_attributes_t *attributes,
38     const uint8_t *key_buffer,
39     size_t key_buffer_size,
40     psa_algorithm_t alg,
41     const uint8_t *input,
42     size_t input_length,
43     uint8_t *signature,
44     size_t signature_size,
45     size_t *signature_length);
46 
47 psa_status_t psa_driver_wrapper_verify_message(
48     const psa_key_attributes_t *attributes,
49     const uint8_t *key_buffer,
50     size_t key_buffer_size,
51     psa_algorithm_t alg,
52     const uint8_t *input,
53     size_t input_length,
54     const uint8_t *signature,
55     size_t signature_length);
56 
57 psa_status_t psa_driver_wrapper_sign_hash(
58     const psa_key_attributes_t *attributes,
59     const uint8_t *key_buffer, size_t key_buffer_size,
60     psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
61     uint8_t *signature, size_t signature_size, size_t *signature_length);
62 
63 psa_status_t psa_driver_wrapper_verify_hash(
64     const psa_key_attributes_t *attributes,
65     const uint8_t *key_buffer, size_t key_buffer_size,
66     psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
67     const uint8_t *signature, size_t signature_length);
68 
69 /*
70  * Interruptible Signature functions
71  */
72 
73 uint32_t psa_driver_wrapper_sign_hash_get_num_ops(
74     psa_sign_hash_interruptible_operation_t *operation);
75 
76 uint32_t psa_driver_wrapper_verify_hash_get_num_ops(
77     psa_verify_hash_interruptible_operation_t *operation);
78 
79 psa_status_t psa_driver_wrapper_sign_hash_start(
80     psa_sign_hash_interruptible_operation_t *operation,
81     const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
82     size_t key_buffer_size, psa_algorithm_t alg,
83     const uint8_t *hash, size_t hash_length);
84 
85 psa_status_t psa_driver_wrapper_sign_hash_complete(
86     psa_sign_hash_interruptible_operation_t *operation,
87     uint8_t *signature, size_t signature_size,
88     size_t *signature_length);
89 
90 psa_status_t psa_driver_wrapper_sign_hash_abort(
91     psa_sign_hash_interruptible_operation_t *operation);
92 
93 psa_status_t psa_driver_wrapper_verify_hash_start(
94     psa_verify_hash_interruptible_operation_t *operation,
95     const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
96     size_t key_buffer_size, psa_algorithm_t alg,
97     const uint8_t *hash, size_t hash_length,
98     const uint8_t *signature, size_t signature_length);
99 
100 psa_status_t psa_driver_wrapper_verify_hash_complete(
101     psa_verify_hash_interruptible_operation_t *operation);
102 
103 psa_status_t psa_driver_wrapper_verify_hash_abort(
104     psa_verify_hash_interruptible_operation_t *operation);
105 
106 /*
107  * Key handling functions
108  */
109 
110 psa_status_t psa_driver_wrapper_import_key(
111     const psa_key_attributes_t *attributes,
112     const uint8_t *data, size_t data_length,
113     uint8_t *key_buffer, size_t key_buffer_size,
114     size_t *key_buffer_length, size_t *bits);
115 
116 psa_status_t psa_driver_wrapper_export_key(
117     const psa_key_attributes_t *attributes,
118     const uint8_t *key_buffer, size_t key_buffer_size,
119     uint8_t *data, size_t data_size, size_t *data_length);
120 
121 psa_status_t psa_driver_wrapper_export_public_key(
122     const psa_key_attributes_t *attributes,
123     const uint8_t *key_buffer, size_t key_buffer_size,
124     uint8_t *data, size_t data_size, size_t *data_length);
125 
126 psa_status_t psa_driver_wrapper_get_key_buffer_size(
127     const psa_key_attributes_t *attributes,
128     size_t *key_buffer_size);
129 
130 psa_status_t psa_driver_wrapper_get_key_buffer_size_from_key_data(
131     const psa_key_attributes_t *attributes,
132     const uint8_t *data,
133     size_t data_length,
134     size_t *key_buffer_size);
135 
136 psa_status_t psa_driver_wrapper_generate_key(
137     const psa_key_attributes_t *attributes,
138     uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length);
139 
140 psa_status_t psa_driver_wrapper_get_builtin_key(
141     psa_drv_slot_number_t slot_number,
142     psa_key_attributes_t *attributes,
143     uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length);
144 
145 psa_status_t psa_driver_wrapper_copy_key(
146     psa_key_attributes_t *attributes,
147     const uint8_t *source_key, size_t source_key_length,
148     uint8_t *target_key_buffer, size_t target_key_buffer_size,
149     size_t *target_key_buffer_length);
150 /*
151  * Cipher functions
152  */
153 psa_status_t psa_driver_wrapper_cipher_encrypt(
154     const psa_key_attributes_t *attributes,
155     const uint8_t *key_buffer,
156     size_t key_buffer_size,
157     psa_algorithm_t alg,
158     const uint8_t *iv,
159     size_t iv_length,
160     const uint8_t *input,
161     size_t input_length,
162     uint8_t *output,
163     size_t output_size,
164     size_t *output_length);
165 
166 psa_status_t psa_driver_wrapper_cipher_decrypt(
167     const psa_key_attributes_t *attributes,
168     const uint8_t *key_buffer,
169     size_t key_buffer_size,
170     psa_algorithm_t alg,
171     const uint8_t *input,
172     size_t input_length,
173     uint8_t *output,
174     size_t output_size,
175     size_t *output_length);
176 
177 psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
178     psa_cipher_operation_t *operation,
179     const psa_key_attributes_t *attributes,
180     const uint8_t *key_buffer, size_t key_buffer_size,
181     psa_algorithm_t alg);
182 
183 psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
184     psa_cipher_operation_t *operation,
185     const psa_key_attributes_t *attributes,
186     const uint8_t *key_buffer, size_t key_buffer_size,
187     psa_algorithm_t alg);
188 
189 psa_status_t psa_driver_wrapper_cipher_set_iv(
190     psa_cipher_operation_t *operation,
191     const uint8_t *iv,
192     size_t iv_length);
193 
194 psa_status_t psa_driver_wrapper_cipher_update(
195     psa_cipher_operation_t *operation,
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_finish(
203     psa_cipher_operation_t *operation,
204     uint8_t *output,
205     size_t output_size,
206     size_t *output_length);
207 
208 psa_status_t psa_driver_wrapper_cipher_abort(
209     psa_cipher_operation_t *operation);
210 
211 /*
212  * Hashing functions
213  */
214 psa_status_t psa_driver_wrapper_hash_compute(
215     psa_algorithm_t alg,
216     const uint8_t *input,
217     size_t input_length,
218     uint8_t *hash,
219     size_t hash_size,
220     size_t *hash_length);
221 
222 psa_status_t psa_driver_wrapper_hash_setup(
223     psa_hash_operation_t *operation,
224     psa_algorithm_t alg);
225 
226 psa_status_t psa_driver_wrapper_hash_clone(
227     const psa_hash_operation_t *source_operation,
228     psa_hash_operation_t *target_operation);
229 
230 psa_status_t psa_driver_wrapper_hash_update(
231     psa_hash_operation_t *operation,
232     const uint8_t *input,
233     size_t input_length);
234 
235 psa_status_t psa_driver_wrapper_hash_finish(
236     psa_hash_operation_t *operation,
237     uint8_t *hash,
238     size_t hash_size,
239     size_t *hash_length);
240 
241 psa_status_t psa_driver_wrapper_hash_abort(
242     psa_hash_operation_t *operation);
243 
244 /*
245  * AEAD functions
246  */
247 
248 psa_status_t psa_driver_wrapper_aead_encrypt(
249     const psa_key_attributes_t *attributes,
250     const uint8_t *key_buffer, size_t key_buffer_size,
251     psa_algorithm_t alg,
252     const uint8_t *nonce, size_t nonce_length,
253     const uint8_t *additional_data, size_t additional_data_length,
254     const uint8_t *plaintext, size_t plaintext_length,
255     uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length);
256 
257 psa_status_t psa_driver_wrapper_aead_decrypt(
258     const psa_key_attributes_t *attributes,
259     const uint8_t *key_buffer, size_t key_buffer_size,
260     psa_algorithm_t alg,
261     const uint8_t *nonce, size_t nonce_length,
262     const uint8_t *additional_data, size_t additional_data_length,
263     const uint8_t *ciphertext, size_t ciphertext_length,
264     uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length);
265 
266 psa_status_t psa_driver_wrapper_aead_encrypt_setup(
267     psa_aead_operation_t *operation,
268     const psa_key_attributes_t *attributes,
269     const uint8_t *key_buffer, size_t key_buffer_size,
270     psa_algorithm_t alg);
271 
272 psa_status_t psa_driver_wrapper_aead_decrypt_setup(
273     psa_aead_operation_t *operation,
274     const psa_key_attributes_t *attributes,
275     const uint8_t *key_buffer, size_t key_buffer_size,
276     psa_algorithm_t alg);
277 
278 psa_status_t psa_driver_wrapper_aead_set_nonce(
279     psa_aead_operation_t *operation,
280     const uint8_t *nonce,
281     size_t nonce_length);
282 
283 psa_status_t psa_driver_wrapper_aead_set_lengths(
284     psa_aead_operation_t *operation,
285     size_t ad_length,
286     size_t plaintext_length);
287 
288 psa_status_t psa_driver_wrapper_aead_update_ad(
289     psa_aead_operation_t *operation,
290     const uint8_t *input,
291     size_t input_length);
292 
293 psa_status_t psa_driver_wrapper_aead_update(
294     psa_aead_operation_t *operation,
295     const uint8_t *input,
296     size_t input_length,
297     uint8_t *output,
298     size_t output_size,
299     size_t *output_length);
300 
301 psa_status_t psa_driver_wrapper_aead_finish(
302     psa_aead_operation_t *operation,
303     uint8_t *ciphertext,
304     size_t ciphertext_size,
305     size_t *ciphertext_length,
306     uint8_t *tag,
307     size_t tag_size,
308     size_t *tag_length);
309 
310 psa_status_t psa_driver_wrapper_aead_verify(
311     psa_aead_operation_t *operation,
312     uint8_t *plaintext,
313     size_t plaintext_size,
314     size_t *plaintext_length,
315     const uint8_t *tag,
316     size_t tag_length);
317 
318 psa_status_t psa_driver_wrapper_aead_abort(
319     psa_aead_operation_t *operation);
320 
321 /*
322  * MAC functions
323  */
324 psa_status_t psa_driver_wrapper_mac_compute(
325     const psa_key_attributes_t *attributes,
326     const uint8_t *key_buffer,
327     size_t key_buffer_size,
328     psa_algorithm_t alg,
329     const uint8_t *input,
330     size_t input_length,
331     uint8_t *mac,
332     size_t mac_size,
333     size_t *mac_length);
334 
335 psa_status_t psa_driver_wrapper_mac_sign_setup(
336     psa_mac_operation_t *operation,
337     const psa_key_attributes_t *attributes,
338     const uint8_t *key_buffer,
339     size_t key_buffer_size,
340     psa_algorithm_t alg);
341 
342 psa_status_t psa_driver_wrapper_mac_verify_setup(
343     psa_mac_operation_t *operation,
344     const psa_key_attributes_t *attributes,
345     const uint8_t *key_buffer,
346     size_t key_buffer_size,
347     psa_algorithm_t alg);
348 
349 psa_status_t psa_driver_wrapper_mac_update(
350     psa_mac_operation_t *operation,
351     const uint8_t *input,
352     size_t input_length);
353 
354 psa_status_t psa_driver_wrapper_mac_sign_finish(
355     psa_mac_operation_t *operation,
356     uint8_t *mac,
357     size_t mac_size,
358     size_t *mac_length);
359 
360 psa_status_t psa_driver_wrapper_mac_verify_finish(
361     psa_mac_operation_t *operation,
362     const uint8_t *mac,
363     size_t mac_length);
364 
365 psa_status_t psa_driver_wrapper_mac_abort(
366     psa_mac_operation_t *operation);
367 
368 /*
369  * Asymmetric cryptography
370  */
371 psa_status_t psa_driver_wrapper_asymmetric_encrypt(
372     const psa_key_attributes_t *attributes,
373     const uint8_t *key_buffer,
374     size_t key_buffer_size,
375     psa_algorithm_t alg,
376     const uint8_t *input,
377     size_t input_length,
378     const uint8_t *salt,
379     size_t salt_length,
380     uint8_t *output,
381     size_t output_size,
382     size_t *output_length);
383 
384 psa_status_t psa_driver_wrapper_asymmetric_decrypt(
385     const psa_key_attributes_t *attributes,
386     const uint8_t *key_buffer,
387     size_t key_buffer_size,
388     psa_algorithm_t alg,
389     const uint8_t *input,
390     size_t input_length,
391     const uint8_t *salt,
392     size_t salt_length,
393     uint8_t *output,
394     size_t output_size,
395     size_t *output_length);
396 
397 /*
398  * Raw Key Agreement
399  */
400 psa_status_t psa_driver_wrapper_key_agreement(
401     const psa_key_attributes_t *attributes,
402     const uint8_t *key_buffer,
403     size_t key_buffer_size,
404     psa_algorithm_t alg,
405     const uint8_t *peer_key,
406     size_t peer_key_length,
407     uint8_t *shared_secret,
408     size_t shared_secret_size,
409     size_t *shared_secret_length);
410 
411 /*
412  * PAKE functions.
413  */
414 psa_status_t psa_driver_wrapper_pake_setup(
415     psa_pake_operation_t *operation,
416     const psa_crypto_driver_pake_inputs_t *inputs);
417 
418 psa_status_t psa_driver_wrapper_pake_output(
419     psa_pake_operation_t *operation,
420     psa_crypto_driver_pake_step_t step,
421     uint8_t *output,
422     size_t output_size,
423     size_t *output_length);
424 
425 psa_status_t psa_driver_wrapper_pake_input(
426     psa_pake_operation_t *operation,
427     psa_crypto_driver_pake_step_t step,
428     const uint8_t *input,
429     size_t input_length);
430 
431 psa_status_t psa_driver_wrapper_pake_get_implicit_key(
432     psa_pake_operation_t *operation,
433     uint8_t *output, size_t output_size,
434     size_t *output_length);
435 
436 psa_status_t psa_driver_wrapper_pake_abort(
437     psa_pake_operation_t *operation);
438 
439 #endif /* PSA_CRYPTO_DRIVER_WRAPPERS_H */
440 
441 /* End of automatically generated file. */
442