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