psa_crypto_algorithm_dispatch.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2021 HAW Hamburg
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include <stdlib.h>
27 #include "kernel_defines.h"
28 #include "psa/crypto.h"
29 
30 #if IS_USED(MODULE_PSA_KEY_MANAGEMENT)
32 #endif
33 
34 #if IS_USED(MODULE_PSA_HASH)
39 psa_status_t psa_algorithm_dispatch_hash_setup(psa_hash_operation_t *operation,
40  psa_algorithm_t alg);
41 
46 psa_status_t psa_algorithm_dispatch_hash_update(psa_hash_operation_t *operation,
47  const uint8_t *input,
48  size_t input_length);
49 
54 psa_status_t psa_algorithm_dispatch_hash_finish(psa_hash_operation_t *operation,
55  uint8_t *hash,
56  size_t hash_size,
57  size_t *hash_length);
58 #endif /* MODULE_PSA_HASH */
59 
60 #if IS_USED(MODULE_PSA_ASYMMETRIC)
65 psa_status_t psa_algorithm_dispatch_sign_hash( const psa_key_attributes_t *attributes,
66  psa_algorithm_t alg,
67  const psa_key_slot_t *slot,
68  const uint8_t *hash,
69  size_t hash_length,
70  uint8_t *signature,
71  size_t signature_size,
72  size_t *signature_length);
73 
78 psa_status_t psa_algorithm_dispatch_sign_message(const psa_key_attributes_t *attributes,
79  psa_algorithm_t alg,
80  const psa_key_slot_t *slot,
81  const uint8_t *input,
82  size_t input_length,
83  uint8_t *signature,
84  size_t signature_size,
85  size_t *signature_length);
86 
91 psa_status_t psa_algorithm_dispatch_verify_hash( const psa_key_attributes_t *attributes,
92  psa_algorithm_t alg,
93  const psa_key_slot_t *slot,
94  const uint8_t *hash,
95  size_t hash_length,
96  const uint8_t *signature,
97  size_t signature_length);
98 
103 psa_status_t psa_algorithm_dispatch_verify_message( const psa_key_attributes_t *attributes,
104  psa_algorithm_t alg,
105  const psa_key_slot_t *slot,
106  const uint8_t *input,
107  size_t input_length,
108  const uint8_t *signature,
109  size_t signature_length);
110 #endif /* MODULE_PSA_ASYMMETRIC */
111 
112 #if IS_USED(MODULE_PSA_KEY_MANAGEMENT)
117 psa_status_t psa_algorithm_dispatch_generate_key( const psa_key_attributes_t *attributes,
118  psa_key_slot_t *slot);
119 
124 psa_status_t psa_algorithm_dispatch_import_key(const psa_key_attributes_t *attributes,
125  const uint8_t *data, size_t data_length,
126  psa_key_slot_t *slot, size_t *bits);
127 #endif
128 
129 #if IS_USED(MODULE_PSA_CIPHER)
134 psa_status_t psa_algorithm_dispatch_cipher_encrypt( const psa_key_attributes_t *attributes,
135  psa_algorithm_t alg,
136  const psa_key_slot_t *slot,
137  const uint8_t *input,
138  size_t input_length,
139  uint8_t *output,
140  size_t output_size,
141  size_t *output_length);
142 
147 psa_status_t psa_algorithm_dispatch_cipher_decrypt( const psa_key_attributes_t *attributes,
148  psa_algorithm_t alg,
149  const psa_key_slot_t *slot,
150  const uint8_t *input,
151  size_t input_length,
152  uint8_t *output,
153  size_t output_size,
154  size_t *output_length);
155 #endif /* MODULE_PSA_CIPHER */
156 
157 #if IS_USED(MODULE_PSA_AEAD)
162 psa_status_t psa_algorithm_dispatch_aead_encrypt( const psa_key_attributes_t *attributes,
163  psa_algorithm_t alg,
164  const psa_key_slot_t *slot,
165  const uint8_t *nonce,
166  size_t nonce_length,
167  const uint8_t *additional_data,
168  size_t additional_data_length,
169  const uint8_t *plaintext,
170  size_t plaintext_length,
171  uint8_t *ciphertext,
172  size_t ciphertext_size,
173  size_t *ciphertext_length);
174 
179 psa_status_t psa_algorithm_dispatch_aead_decrypt( const psa_key_attributes_t *attributes,
180  psa_algorithm_t alg,
181  const psa_key_slot_t *slot,
182  const uint8_t *nonce,
183  size_t nonce_length,
184  const uint8_t *additional_data,
185  size_t additional_data_length,
186  const uint8_t *ciphertext,
187  size_t ciphertext_length,
188  uint8_t *plaintext,
189  size_t plaintext_size,
190  size_t *plaintext_length);
191 #endif /* MODULE_PSA_AEAD */
192 
193 #if IS_USED(MODULE_PSA_MAC)
198 psa_status_t psa_algorithm_dispatch_mac_compute(const psa_key_attributes_t *attributes,
199  psa_algorithm_t alg,
200  const psa_key_slot_t *slot,
201  const uint8_t *input,
202  size_t input_length,
203  uint8_t *mac,
204  size_t mac_size,
205  size_t *mac_length);
206 
211 psa_status_t psa_algorithm_dispatch_mac_verify(const psa_key_attributes_t *attributes,
212  psa_algorithm_t alg,
213  const psa_key_slot_t *slot,
214  const uint8_t *input,
215  size_t input_length,
216  const uint8_t *mac,
217  size_t mac_length);
218 
223 psa_status_t psa_algorithm_dispatch_mac_sign_setup(psa_mac_operation_t *operation,
224  const psa_key_attributes_t *attributes,
225  const psa_key_slot_t *slot,
226  psa_algorithm_t alg);
227 
232 psa_status_t psa_algorithm_dispatch_mac_verify_setup(psa_mac_operation_t *operation,
233  const psa_key_attributes_t *attributes,
234  const psa_key_slot_t *slot,
235  psa_algorithm_t alg);
236 
241 psa_status_t psa_algorithm_dispatch_mac_update(psa_mac_operation_t *operation,
242  const uint8_t *input,
243  size_t input_length);
244 
249 psa_status_t psa_algorithm_dispatch_mac_sign_finish(psa_mac_operation_t *operation,
250  uint8_t *mac,
251  size_t mac_size,
252  size_t *mac_length);
253 
258 psa_status_t psa_algorithm_dispatch_mac_verify_finish(psa_mac_operation_t *operation,
259  const uint8_t *mac,
260  size_t mac_length);
261 
266 psa_status_t psa_algorithm_dispatch_mac_abort(psa_mac_operation_t *operation);
267 #endif /* MODULE_PSA_MAC */
268 
269 #ifdef __cplusplus
270 }
271 #endif
272 
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 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