34#ifndef PSA_CRYPTO_SE_DRIVER_H
35#define PSA_CRYPTO_SE_DRIVER_H
36#include "mbedtls/private_access.h"
137 void *persistent_data,
140#if defined(__DOXYGEN_ONLY__) || !defined(MBEDTLS_PSA_CRYPTO_SE_C)
201 const uint8_t *p_input,
202 size_t input_length);
223 size_t *p_mac_length);
242 const uint8_t *p_mac,
272 const uint8_t *p_input,
278 size_t *p_mac_length);
301 const uint8_t *p_input,
305 const uint8_t *p_mac,
435 const uint8_t *p_input,
439 size_t *p_output_length);
458 size_t *p_output_length);
495 const uint8_t *p_input,
562 const uint8_t *p_hash,
564 uint8_t *p_signature,
565 size_t signature_size,
566 size_t *p_signature_length);
588 const uint8_t *p_hash,
590 const uint8_t *p_signature,
591 size_t signature_length);
626 const uint8_t *p_input,
628 const uint8_t *p_salt,
632 size_t *p_output_length);
666 const uint8_t *p_input,
668 const uint8_t *p_salt,
672 size_t *p_output_length);
739 const uint8_t *p_nonce,
741 const uint8_t *p_additional_data,
742 size_t additional_data_length,
743 const uint8_t *p_plaintext,
744 size_t plaintext_length,
745 uint8_t *p_ciphertext,
746 size_t ciphertext_size,
747 size_t *p_ciphertext_length);
781 const uint8_t *p_nonce,
783 const uint8_t *p_additional_data,
784 size_t additional_data_length,
785 const uint8_t *p_ciphertext,
786 size_t ciphertext_length,
787 uint8_t *p_plaintext,
788 size_t plaintext_size,
789 size_t *p_plaintext_length);
825#ifndef __DOXYGEN_ONLY__
913 void *persistent_data,
959 void *persistent_data,
1021 void *persistent_data,
1059 size_t *p_data_length);
1111 uint8_t *pubkey,
size_t pubkey_size,
size_t *pubkey_length);
1223 uint32_t collateral_id,
1224 const uint8_t *p_collateral,
1225 size_t collateral_size);
1254 size_t *p_output_length);
1332#define PSA_DRV_SE_HAL_VERSION 0x00000005
Definitions for all PSA crypto drivers
psa_encrypt_or_decrypt_t
Definition: crypto_driver_common.h:51
uint32_t psa_algorithm_t
Encoding of a cryptographic algorithm.
Definition: crypto_types.h:106
psa_status_t(* psa_drv_se_key_derivation_export_t)(void *op_context, uint8_t *p_output, size_t output_size, size_t *p_output_length)
A function that performs the final step of a secure element key agreement and place the generated key...
Definition: crypto_se_driver.h:1251
psa_status_t(* psa_drv_se_key_derivation_derive_t)(void *op_context, psa_key_slot_number_t dest_key)
A function that performs the final secure element key derivation step and place the generated key mat...
Definition: crypto_se_driver.h:1237
psa_status_t(* psa_drv_se_key_derivation_collateral_t)(void *op_context, uint32_t collateral_id, const uint8_t *p_collateral, size_t collateral_size)
A function that provides collateral (parameters) needed for a secure element key derivation or key ag...
Definition: crypto_se_driver.h:1222
psa_status_t(* psa_drv_se_key_derivation_setup_t)(psa_drv_se_context_t *drv_context, void *op_context, psa_algorithm_t kdf_alg, psa_key_slot_number_t source_key)
A function that Sets up a secure element key derivation operation by specifying the algorithm and the...
Definition: crypto_se_driver.h:1202
int32_t psa_status_t
Function return status.
Definition: crypto_types.h:63
uint32_t psa_key_location_t
Definition: crypto_types.h:214
psa_status_t(* psa_drv_se_aead_encrypt_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t algorithm, const uint8_t *p_nonce, size_t nonce_length, const uint8_t *p_additional_data, size_t additional_data_length, const uint8_t *p_plaintext, size_t plaintext_length, uint8_t *p_ciphertext, size_t ciphertext_size, size_t *p_ciphertext_length)
A function that performs a secure element authenticated encryption operation
Definition: crypto_se_driver.h:736
psa_status_t(* psa_drv_se_aead_decrypt_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t algorithm, const uint8_t *p_nonce, size_t nonce_length, const uint8_t *p_additional_data, size_t additional_data_length, const uint8_t *p_ciphertext, size_t ciphertext_length, uint8_t *p_plaintext, size_t plaintext_size, size_t *p_plaintext_length)
Definition: crypto_se_driver.h:778
psa_status_t(* psa_drv_se_asymmetric_decrypt_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t alg, const uint8_t *p_input, size_t input_length, const uint8_t *p_salt, size_t salt_length, uint8_t *p_output, size_t output_size, size_t *p_output_length)
A function that decrypts a short message with an asymmetric private key in a secure element.
Definition: crypto_se_driver.h:663
psa_status_t(* psa_drv_se_asymmetric_encrypt_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t alg, const uint8_t *p_input, size_t input_length, const uint8_t *p_salt, size_t salt_length, uint8_t *p_output, size_t output_size, size_t *p_output_length)
A function that encrypts a short message with an asymmetric public key in a secure element
Definition: crypto_se_driver.h:623
psa_status_t(* psa_drv_se_asymmetric_sign_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t alg, const uint8_t *p_hash, size_t hash_length, uint8_t *p_signature, size_t signature_size, size_t *p_signature_length)
A function that signs a hash or short message with a private key in a secure element
Definition: crypto_se_driver.h:559
psa_status_t(* psa_drv_se_asymmetric_verify_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t alg, const uint8_t *p_hash, size_t hash_length, const uint8_t *p_signature, size_t signature_length)
A function that verifies the signature a hash or short message using an asymmetric public key in a se...
Definition: crypto_se_driver.h:585
psa_status_t(* psa_drv_se_cipher_finish_t)(void *op_context, uint8_t *p_output, size_t output_size, size_t *p_output_length)
A function that completes a previously started secure element cipher operation
Definition: crypto_se_driver.h:455
psa_status_t(* psa_drv_se_cipher_abort_t)(void *op_context)
A function that aborts a previously started secure element cipher operation
Definition: crypto_se_driver.h:466
psa_status_t(* psa_drv_se_cipher_set_iv_t)(void *op_context, const uint8_t *p_iv, size_t iv_length)
A function that sets the initialization vector (if necessary) for an secure element cipher operation
Definition: crypto_se_driver.h:412
psa_status_t(* psa_drv_se_cipher_setup_t)(psa_drv_se_context_t *drv_context, void *op_context, psa_key_slot_number_t key_slot, psa_algorithm_t algorithm, psa_encrypt_or_decrypt_t direction)
A function that provides the cipher setup function for a secure element driver
Definition: crypto_se_driver.h:391
psa_status_t(* psa_drv_se_cipher_ecb_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, psa_algorithm_t algorithm, psa_encrypt_or_decrypt_t direction, const uint8_t *p_input, size_t input_size, uint8_t *p_output, size_t output_size)
A function that performs the ECB block mode for secure element cipher operations
Definition: crypto_se_driver.h:491
psa_status_t(* psa_drv_se_cipher_update_t)(void *op_context, const uint8_t *p_input, size_t input_size, uint8_t *p_output, size_t output_size, size_t *p_output_length)
A function that continues a previously started secure element cipher operation
Definition: crypto_se_driver.h:434
psa_status_t(* psa_drv_se_init_t)(psa_drv_se_context_t *drv_context, void *persistent_data, psa_key_location_t location)
A driver initialization function.
Definition: crypto_se_driver.h:136
uint64_t psa_key_slot_number_t
Definition: crypto_se_driver.h:149
psa_status_t(* psa_drv_se_validate_slot_number_t)(psa_drv_se_context_t *drv_context, void *persistent_data, const psa_key_attributes_t *attributes, psa_key_creation_method_t method, psa_key_slot_number_t key_slot)
A function that determines whether a slot number is valid for a key.
Definition: crypto_se_driver.h:957
psa_status_t(* psa_drv_se_generate_key_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, const psa_key_attributes_t *attributes, uint8_t *pubkey, size_t pubkey_size, size_t *pubkey_length)
A function that generates a symmetric or asymmetric key on a secure element
Definition: crypto_se_driver.h:1107
psa_status_t(* psa_drv_se_export_key_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key, uint8_t *p_data, size_t data_size, size_t *p_data_length)
A function that exports a secure element key in binary format
Definition: crypto_se_driver.h:1055
psa_key_creation_method_t
Definition: crypto_se_driver.h:819
psa_status_t(* psa_drv_se_import_key_t)(psa_drv_se_context_t *drv_context, psa_key_slot_number_t key_slot, const psa_key_attributes_t *attributes, const uint8_t *data, size_t data_length, size_t *bits)
A function that imports a key into a secure element in binary format
Definition: crypto_se_driver.h:993
psa_status_t(* psa_drv_se_allocate_key_t)(psa_drv_se_context_t *drv_context, void *persistent_data, const psa_key_attributes_t *attributes, psa_key_creation_method_t method, psa_key_slot_number_t *key_slot)
A function that allocates a slot for a key.
Definition: crypto_se_driver.h:911
psa_status_t(* psa_drv_se_destroy_key_t)(psa_drv_se_context_t *drv_context, void *persistent_data, psa_key_slot_number_t key_slot)
A function that destroys a secure element key and restore the slot to its default state
Definition: crypto_se_driver.h:1019
@ PSA_KEY_CREATION_COPY
Definition: crypto_se_driver.h:823
@ PSA_KEY_CREATION_IMPORT
Definition: crypto_se_driver.h:820
@ PSA_KEY_CREATION_DERIVE
Definition: crypto_se_driver.h:822
@ PSA_KEY_CREATION_GENERATE
Definition: crypto_se_driver.h:821
@ PSA_KEY_CREATION_REGISTER
Definition: crypto_se_driver.h:843
psa_status_t(* psa_drv_se_mac_setup_t)(psa_drv_se_context_t *drv_context, void *op_context, psa_key_slot_number_t key_slot, psa_algorithm_t algorithm)
A function that starts a secure element MAC operation for a PSA Crypto Driver implementation
Definition: crypto_se_driver.h:185
psa_status_t(* psa_drv_se_mac_update_t)(void *op_context, const uint8_t *p_input, size_t input_length)
A function that continues a previously started secure element MAC operation
Definition: crypto_se_driver.h:200
psa_status_t(* psa_drv_se_mac_finish_verify_t)(void *op_context, const uint8_t *p_mac, size_t mac_length)
A function that completes a previously started secure element MAC operation by comparing the resultin...
Definition: crypto_se_driver.h:241
psa_status_t(* psa_drv_se_mac_abort_t)(void *op_context)
A function that aborts a previous started secure element MAC operation
Definition: crypto_se_driver.h:251
psa_status_t(* psa_drv_se_mac_verify_t)(psa_drv_se_context_t *drv_context, const uint8_t *p_input, size_t input_length, psa_key_slot_number_t key_slot, psa_algorithm_t alg, const uint8_t *p_mac, size_t mac_length)
A function that performs a secure element MAC operation in one command and compares the resulting MAC...
Definition: crypto_se_driver.h:300
psa_status_t(* psa_drv_se_mac_finish_t)(void *op_context, uint8_t *p_mac, size_t mac_size, size_t *p_mac_length)
a function that completes a previously started secure element MAC operation by returning the resultin...
Definition: crypto_se_driver.h:220
psa_status_t(* psa_drv_se_mac_generate_t)(psa_drv_se_context_t *drv_context, const uint8_t *p_input, size_t input_length, psa_key_slot_number_t key_slot, psa_algorithm_t alg, uint8_t *p_mac, size_t mac_size, size_t *p_mac_length)
A function that performs a secure element MAC operation in one command and returns the calculated MAC
Definition: crypto_se_driver.h:271
psa_status_t psa_register_se_driver(psa_key_location_t location, const psa_drv_se_t *methods)
A struct containing all of the function pointers needed to implement secure element Authenticated Enc...
Definition: crypto_se_driver.h:800
psa_drv_se_aead_decrypt_t MBEDTLS_PRIVATE(p_decrypt)
psa_drv_se_aead_encrypt_t MBEDTLS_PRIVATE(p_encrypt)
A struct containing all of the function pointers needed to implement asymmetric cryptographic operati...
Definition: crypto_se_driver.h:683
psa_drv_se_asymmetric_encrypt_t MBEDTLS_PRIVATE(p_encrypt)
psa_drv_se_asymmetric_decrypt_t MBEDTLS_PRIVATE(p_decrypt)
psa_drv_se_asymmetric_sign_t MBEDTLS_PRIVATE(p_sign)
psa_drv_se_asymmetric_verify_t MBEDTLS_PRIVATE(p_verify)
A struct containing all of the function pointers needed to implement cipher operations using secure e...
Definition: crypto_se_driver.h:510
psa_drv_se_cipher_set_iv_t MBEDTLS_PRIVATE(p_set_iv)
psa_drv_se_cipher_finish_t MBEDTLS_PRIVATE(p_finish)
psa_drv_se_cipher_ecb_t MBEDTLS_PRIVATE(p_ecb)
psa_drv_se_cipher_setup_t MBEDTLS_PRIVATE(p_setup)
psa_drv_se_cipher_update_t MBEDTLS_PRIVATE(p_update)
psa_drv_se_cipher_abort_t MBEDTLS_PRIVATE(p_abort)
size_t MBEDTLS_PRIVATE(context_size)
Driver context structure
Definition: crypto_se_driver.h:56
uintptr_t MBEDTLS_PRIVATE(transient_data)
const size_t MBEDTLS_PRIVATE(persistent_data_size)
const void *const MBEDTLS_PRIVATE(persistent_data)
A struct containing all of the function pointers needed to for secure element key derivation and agre...
Definition: crypto_se_driver.h:1265
size_t MBEDTLS_PRIVATE(context_size)
psa_drv_se_key_derivation_export_t MBEDTLS_PRIVATE(p_export)
psa_drv_se_key_derivation_derive_t MBEDTLS_PRIVATE(p_derive)
psa_drv_se_key_derivation_setup_t MBEDTLS_PRIVATE(p_setup)
psa_drv_se_key_derivation_collateral_t MBEDTLS_PRIVATE(p_collateral)
A struct containing all of the function pointers needed to for secure element key management
Definition: crypto_se_driver.h:1122
psa_drv_se_export_key_t MBEDTLS_PRIVATE(p_export_public)
psa_drv_se_import_key_t MBEDTLS_PRIVATE(p_import)
psa_drv_se_validate_slot_number_t MBEDTLS_PRIVATE(p_validate_slot_number)
psa_drv_se_destroy_key_t MBEDTLS_PRIVATE(p_destroy)
psa_drv_se_export_key_t MBEDTLS_PRIVATE(p_export)
psa_drv_se_allocate_key_t MBEDTLS_PRIVATE(p_allocate)
psa_drv_se_generate_key_t MBEDTLS_PRIVATE(p_generate)
A struct containing all of the function pointers needed to perform secure element MAC operations
Definition: crypto_se_driver.h:323
psa_drv_se_mac_finish_t MBEDTLS_PRIVATE(p_finish)
psa_drv_se_mac_finish_verify_t MBEDTLS_PRIVATE(p_finish_verify)
psa_drv_se_mac_setup_t MBEDTLS_PRIVATE(p_setup)
psa_drv_se_mac_verify_t MBEDTLS_PRIVATE(p_mac_verify)
psa_drv_se_mac_update_t MBEDTLS_PRIVATE(p_update)
psa_drv_se_mac_abort_t MBEDTLS_PRIVATE(p_abort)
size_t MBEDTLS_PRIVATE(context_size)
psa_drv_se_mac_generate_t MBEDTLS_PRIVATE(p_mac)
Definition: crypto_se_driver.h:1291
size_t MBEDTLS_PRIVATE(persistent_data_size)
uint32_t MBEDTLS_PRIVATE(hal_version)
psa_drv_se_init_t MBEDTLS_PRIVATE(p_init)
Definition: crypto_struct.h:338