psa_crypto_algorithm_dispatch.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2021 HAW Hamburg
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #include <stdlib.h>
24 #include "kernel_defines.h"
25 #include "psa/crypto.h"
26 
27 #if IS_USED(MODULE_PSA_KEY_MANAGEMENT)
29 #endif
30 
31 #if IS_USED(MODULE_PSA_HASH)
36 psa_status_t psa_algorithm_dispatch_hash_setup(psa_hash_operation_t *operation,
37  psa_algorithm_t alg);
38 
43 psa_status_t psa_algorithm_dispatch_hash_update(psa_hash_operation_t *operation,
44  const uint8_t *input,
45  size_t input_length);
46 
51 psa_status_t psa_algorithm_dispatch_hash_finish(psa_hash_operation_t *operation,
52  uint8_t *hash,
53  size_t hash_size,
54  size_t *hash_length);
55 #endif /* MODULE_PSA_HASH */
56 
57 #if IS_USED(MODULE_PSA_ASYMMETRIC)
62 psa_status_t psa_algorithm_dispatch_sign_hash( const psa_key_attributes_t *attributes,
63  psa_algorithm_t alg,
64  const psa_key_slot_t *slot,
65  const uint8_t *hash,
66  size_t hash_length,
67  uint8_t *signature,
68  size_t signature_size,
69  size_t *signature_length);
70 
75 psa_status_t psa_algorithm_dispatch_sign_message(const psa_key_attributes_t *attributes,
76  psa_algorithm_t alg,
77  const psa_key_slot_t *slot,
78  const uint8_t *input,
79  size_t input_length,
80  uint8_t *signature,
81  size_t signature_size,
82  size_t *signature_length);
83 
88 psa_status_t psa_algorithm_dispatch_verify_hash( const psa_key_attributes_t *attributes,
89  psa_algorithm_t alg,
90  const psa_key_slot_t *slot,
91  const uint8_t *hash,
92  size_t hash_length,
93  const uint8_t *signature,
94  size_t signature_length);
95 
100 psa_status_t psa_algorithm_dispatch_verify_message( const psa_key_attributes_t *attributes,
101  psa_algorithm_t alg,
102  const psa_key_slot_t *slot,
103  const uint8_t *input,
104  size_t input_length,
105  const uint8_t *signature,
106  size_t signature_length);
107 #endif /* MODULE_PSA_ASYMMETRIC */
108 
109 #if IS_USED(MODULE_PSA_KEY_MANAGEMENT)
114 psa_status_t psa_algorithm_dispatch_generate_key( const psa_key_attributes_t *attributes,
115  psa_key_slot_t *slot);
116 
121 psa_status_t psa_algorithm_dispatch_import_key(const psa_key_attributes_t *attributes,
122  const uint8_t *data, size_t data_length,
123  psa_key_slot_t *slot, size_t *bits);
124 #endif
125 
126 #if IS_USED(MODULE_PSA_CIPHER)
131 psa_status_t psa_algorithm_dispatch_cipher_encrypt( const psa_key_attributes_t *attributes,
132  psa_algorithm_t alg,
133  const psa_key_slot_t *slot,
134  const uint8_t *input,
135  size_t input_length,
136  uint8_t *output,
137  size_t output_size,
138  size_t *output_length);
139 
144 psa_status_t psa_algorithm_dispatch_cipher_decrypt( const psa_key_attributes_t *attributes,
145  psa_algorithm_t alg,
146  const psa_key_slot_t *slot,
147  const uint8_t *input,
148  size_t input_length,
149  uint8_t *output,
150  size_t output_size,
151  size_t *output_length);
152 
157 psa_status_t psa_algorithm_dispatch_cipher_encrypt_setup( psa_cipher_operation_t *operation,
158  const psa_key_attributes_t *attributes,
159  const psa_key_slot_t *slot,
160  psa_algorithm_t alg);
161 
166 psa_status_t psa_algorithm_dispatch_cipher_decrypt_setup( psa_cipher_operation_t *operation,
167  const psa_key_attributes_t *attributes,
168  const psa_key_slot_t *slot,
169  psa_algorithm_t alg);
170 
175 psa_status_t psa_algorithm_dispatch_cipher_finish( psa_cipher_operation_t *operation,
176  uint8_t *output,
177  size_t output_size,
178  size_t *output_length);
179 
184 psa_status_t psa_algorithm_dispatch_cipher_update( psa_cipher_operation_t *operation,
185  const uint8_t *input,
186  size_t input_length,
187  uint8_t *output,
188  size_t output_size,
189  size_t *output_length);
190 
195 psa_status_t psa_algorithm_dispatch_cipher_set_iv( psa_cipher_operation_t *operation,
196  const uint8_t *iv,
197  size_t iv_length);
198 
199 #endif /* MODULE_PSA_CIPHER */
200 
201 #if IS_USED(MODULE_PSA_AEAD)
206 psa_status_t psa_algorithm_dispatch_aead_encrypt( const psa_key_attributes_t *attributes,
207  psa_algorithm_t alg,
208  const psa_key_slot_t *slot,
209  const uint8_t *nonce,
210  size_t nonce_length,
211  const uint8_t *additional_data,
212  size_t additional_data_length,
213  const uint8_t *plaintext,
214  size_t plaintext_length,
215  uint8_t *ciphertext,
216  size_t ciphertext_size,
217  size_t *ciphertext_length);
218 
223 psa_status_t psa_algorithm_dispatch_aead_decrypt( const psa_key_attributes_t *attributes,
224  psa_algorithm_t alg,
225  const psa_key_slot_t *slot,
226  const uint8_t *nonce,
227  size_t nonce_length,
228  const uint8_t *additional_data,
229  size_t additional_data_length,
230  const uint8_t *ciphertext,
231  size_t ciphertext_length,
232  uint8_t *plaintext,
233  size_t plaintext_size,
234  size_t *plaintext_length);
235 #endif /* MODULE_PSA_AEAD */
236 
237 #if IS_USED(MODULE_PSA_MAC)
242 psa_status_t psa_algorithm_dispatch_mac_compute(const psa_key_attributes_t *attributes,
243  psa_algorithm_t alg,
244  const psa_key_slot_t *slot,
245  const uint8_t *input,
246  size_t input_length,
247  uint8_t *mac,
248  size_t mac_size,
249  size_t *mac_length);
250 
255 psa_status_t psa_algorithm_dispatch_mac_verify(const psa_key_attributes_t *attributes,
256  psa_algorithm_t alg,
257  const psa_key_slot_t *slot,
258  const uint8_t *input,
259  size_t input_length,
260  const uint8_t *mac,
261  size_t mac_length);
262 
267 psa_status_t psa_algorithm_dispatch_mac_sign_setup(psa_mac_operation_t *operation,
268  const psa_key_attributes_t *attributes,
269  const psa_key_slot_t *slot,
270  psa_algorithm_t alg);
271 
276 psa_status_t psa_algorithm_dispatch_mac_verify_setup(psa_mac_operation_t *operation,
277  const psa_key_attributes_t *attributes,
278  const psa_key_slot_t *slot,
279  psa_algorithm_t alg);
280 
285 psa_status_t psa_algorithm_dispatch_mac_update(psa_mac_operation_t *operation,
286  const uint8_t *input,
287  size_t input_length);
288 
293 psa_status_t psa_algorithm_dispatch_mac_sign_finish(psa_mac_operation_t *operation,
294  uint8_t *mac,
295  size_t mac_size,
296  size_t *mac_length);
297 
302 psa_status_t psa_algorithm_dispatch_mac_verify_finish(psa_mac_operation_t *operation,
303  const uint8_t *mac,
304  size_t mac_length);
305 
310 psa_status_t psa_algorithm_dispatch_mac_abort(psa_mac_operation_t *operation);
311 #endif /* MODULE_PSA_MAC */
312 
313 #ifdef __cplusplus
314 }
315 #endif
316 
uint32_t psa_algorithm_t
Encoding of a cryptographic algorithm.
Definition: algorithm.h:38
Function declarations for PSA Crypto.
Common macros and compiler attributes/pragmas configuration.
int32_t psa_status_t
Status code type used for all PSA Certified APIs.
Definition: error.h:40
PSA key slot management function declarations.
Structure storing a cipher operation context.
Definition: types.h:93
Structure containing a hash context and algorithm.
Definition: types.h:85
Structure storing key attributes.
Definition: attributes.h:51
Structure of a virtual key slot in local memory.
Structure containing a MAC operation context.
Definition: types.h:33