se_asymmetric

# Secure Element Asymmetric Cryptography

psa_drv_se_asymmetric_t
psa_status_t(* typedef 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) )(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) psa_drv_se_asymmetric_sign_t

A function that signs a hash or short message with a private key in a secure element.

drv_context

The driver context structure.

key_slot

Key slot of an asymmetric key pair

alg

A signature algorithm that is compatible with the type of `key`

p_hash

The hash to sign

hash_length

Size of the `p_hash` buffer in bytes

p_signature

Buffer where the signature is to be written

signature_size

Size of the `p_signature` buffer in bytes

p_signature_length

On success, the number of bytes that make up the returned signature value

PSA_SUCCESS

psa_status_t(* typedef 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) )(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) psa_drv_se_asymmetric_verify_t

A function that verifies the signature a hash or short message using an asymmetric public key in a secure element.

drv_context

The driver context structure.

key_slot

Key slot of a public key or an asymmetric key pair

alg

A signature algorithm that is compatible with the type of `key`

p_hash

The hash whose signature is to be verified

hash_length

Size of the `p_hash` buffer in bytes

p_signature

Buffer containing the signature to verify

signature_length

Size of the `p_signature` buffer in bytes

PSA_SUCCESS

The signature is valid.

psa_status_t(* typedef 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) )(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) psa_drv_se_asymmetric_encrypt_t

A function that encrypts a short message with an asymmetric public key in a secure element.

drv_context

The driver context structure.

key_slot

Key slot of a public key or an asymmetric key pair

alg

An asymmetric encryption algorithm that is compatible with the type of `key`

p_input

The message to encrypt

input_length

Size of the `p_input` buffer in bytes

p_salt

A salt or label, if supported by the encryption algorithm If the algorithm does not support a salt, pass `NULL`. If the algorithm supports an optional salt and you do not want to pass a salt, pass `NULL`. For PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is supported.

salt_length

Size of the `p_salt` buffer in bytes If `p_salt` is `NULL`, pass 0.

p_output

Buffer where the encrypted message is to be written

output_size

Size of the `p_output` buffer in bytes

p_output_length

On success, the number of bytes that make up the returned output

PSA_SUCCESS

psa_status_t(* typedef 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) )(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) psa_drv_se_asymmetric_decrypt_t

A function that decrypts a short message with an asymmetric private key in a secure element.

drv_context

The driver context structure.

key_slot

Key slot of an asymmetric key pair

alg

An asymmetric encryption algorithm that is compatible with the type of `key`

p_input

The message to decrypt

input_length

Size of the `p_input` buffer in bytes

p_salt

A salt or label, if supported by the encryption algorithm If the algorithm does not support a salt, pass `NULL`. If the algorithm supports an optional salt and you do not want to pass a salt, pass `NULL`. For PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is supported.

salt_length

Size of the `p_salt` buffer in bytes If `p_salt` is `NULL`, pass 0.

p_output

Buffer where the decrypted message is to be written

output_size

Size of the `p_output` buffer in bytes

p_output_length

On success, the number of bytes that make up the returned output

PSA_SUCCESS

Since the amount of data that can (or should) be encrypted or signed using asymmetric keys is limited by the key size, asymmetric key operations using keys in a secure element must be done in single function calls.