37 #ifdef __DOXYGEN_ONLY__ 52 #include "crypto_types.h" 61 #define PSA_CRYPTO_API_VERSION_MAJOR 1 66 #define PSA_CRYPTO_API_VERSION_MINOR 0 72 #include "crypto_values.h" 123 #ifdef __DOXYGEN_ONLY__ 127 #define PSA_KEY_ATTRIBUTES_INIT \ 135 static psa_key_attributes_t psa_key_attributes_init(
void);
157 static void psa_set_key_id(psa_key_attributes_t *attributes, psa_key_id_t key);
159 #ifdef MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER 174 static void mbedtls_set_key_owner_id(psa_key_attributes_t *attributes,
175 mbedtls_key_owner_id_t owner);
203 static void psa_set_key_lifetime(psa_key_attributes_t *attributes, psa_key_lifetime_t lifetime);
217 static psa_key_id_t psa_get_key_id(
const psa_key_attributes_t *attributes);
229 static psa_key_lifetime_t psa_get_key_lifetime(
const psa_key_attributes_t *attributes);
247 static void psa_set_key_usage_flags(psa_key_attributes_t *attributes, psa_key_usage_t usage_flags);
259 static psa_key_usage_t psa_get_key_usage_flags(
const psa_key_attributes_t *attributes);
291 static void psa_set_key_algorithm(psa_key_attributes_t *attributes, psa_algorithm_t alg);
303 static psa_algorithm_t psa_get_key_algorithm(
const psa_key_attributes_t *attributes);
319 static void psa_set_key_type(psa_key_attributes_t *attributes, psa_key_type_t type);
335 static void psa_set_key_bits(psa_key_attributes_t *attributes,
size_t bits);
347 static psa_key_type_t psa_get_key_type(
const psa_key_attributes_t *attributes);
359 static size_t psa_get_key_bits(
const psa_key_attributes_t *attributes);
522 psa_status_t
psa_copy_key(psa_key_id_t source_key,
const psa_key_attributes_t *attributes, psa_key_id_t *target_key);
648 psa_status_t
psa_import_key(
const psa_key_attributes_t *attributes,
742 psa_status_t
psa_export_key(psa_key_id_t key, uint8_t *data,
size_t data_size,
size_t *data_length);
814 psa_status_t
psa_export_public_key(psa_key_id_t key, uint8_t *data,
size_t data_size,
size_t *data_length);
854 const uint8_t *input,
858 size_t *hash_length);
889 const uint8_t *input,
929 #ifdef __DOXYGEN_ONLY__ 933 #define PSA_HASH_OPERATION_INIT \ 992 psa_algorithm_t alg);
1018 const uint8_t *input,
1019 size_t input_length);
1066 size_t *hash_length);
1105 const uint8_t *hash,
1106 size_t hash_length);
1214 psa_algorithm_t alg,
1215 const uint8_t *input,
1216 size_t input_length,
1219 size_t *mac_length);
1255 psa_algorithm_t alg,
1256 const uint8_t *input,
1257 size_t input_length,
1297 #ifdef __DOXYGEN_ONLY__ 1301 #define PSA_MAC_OPERATION_INIT \ 1459 const uint8_t *input,
1460 size_t input_length);
1510 size_t *mac_length);
1627 psa_algorithm_t alg,
1628 const uint8_t *input,
1629 size_t input_length,
1632 size_t *output_length);
1674 psa_algorithm_t alg,
1675 const uint8_t *input,
1676 size_t input_length,
1679 size_t *output_length);
1716 #ifdef __DOXYGEN_ONLY__ 1720 #define PSA_CIPHER_OPERATION_INIT \ 1969 const uint8_t *input,
1970 size_t input_length,
1973 size_t *output_length);
2023 size_t *output_length);
2120 psa_algorithm_t alg,
2121 const uint8_t *nonce,
2122 size_t nonce_length,
2123 const uint8_t *additional_data,
2124 size_t additional_data_length,
2125 const uint8_t *plaintext,
2126 size_t plaintext_length,
2127 uint8_t *ciphertext,
2128 size_t ciphertext_size,
2129 size_t *ciphertext_length);
2193 psa_algorithm_t alg,
2194 const uint8_t *nonce,
2195 size_t nonce_length,
2196 const uint8_t *additional_data,
2197 size_t additional_data_length,
2198 const uint8_t *ciphertext,
2199 size_t ciphertext_length,
2201 size_t plaintext_size,
2202 size_t *plaintext_length);
2239 #ifdef __DOXYGEN_ONLY__ 2243 #define PSA_AEAD_OPERATION_INIT \ 2423 size_t *nonce_length);
2461 const uint8_t *nonce,
2462 size_t nonce_length);
2507 size_t plaintext_length);
2554 const uint8_t *input,
2555 size_t input_length);
2638 const uint8_t *input,
2639 size_t input_length,
2642 size_t *output_length);
2724 uint8_t *ciphertext,
2725 size_t ciphertext_size,
2726 size_t *ciphertext_length,
2729 size_t *tag_length);
2808 size_t plaintext_size,
2809 size_t *plaintext_length,
2908 psa_algorithm_t alg,
2909 const uint8_t *input,
2910 size_t input_length,
2912 size_t signature_size,
2913 size_t *signature_length);
2963 psa_algorithm_t alg,
2964 const uint8_t *input,
2965 size_t input_length,
2966 const uint8_t *signature,
2967 size_t signature_length);
3019 psa_algorithm_t alg,
3020 const uint8_t *hash,
3023 size_t signature_size,
3024 size_t *signature_length);
3073 psa_algorithm_t alg,
3074 const uint8_t *hash,
3076 const uint8_t *signature,
3077 size_t signature_length);
3131 psa_algorithm_t alg,
3132 const uint8_t *input,
3133 size_t input_length,
3134 const uint8_t *salt,
3138 size_t *output_length);
3192 psa_algorithm_t alg,
3193 const uint8_t *input,
3194 size_t input_length,
3195 const uint8_t *salt,
3199 size_t *output_length);
3243 #ifdef __DOXYGEN_ONLY__ 3247 #define PSA_KEY_DERIVATION_OPERATION_INIT \ 3371 #define PSA_KEY_DERIVATION_UNLIMITED_CAPACITY ((size_t) (-1)) 3414 psa_key_derivation_step_t step,
3415 const uint8_t *data,
3416 size_t data_length);
3457 psa_key_derivation_step_t step,
3523 psa_key_derivation_step_t step,
3590 psa_key_derivation_step_t step,
3591 psa_key_id_t private_key,
3592 const uint8_t *peer_key,
3593 size_t peer_key_length);
3637 size_t output_length);
3785 const psa_key_attributes_t *attributes,
3844 const uint8_t *expected_output,
3845 size_t output_length);
3908 psa_key_id_t expected);
3986 psa_key_id_t private_key,
3987 const uint8_t *peer_key,
3988 size_t peer_key_length,
3991 size_t *output_length);
4069 psa_status_t
psa_generate_key(
const psa_key_attributes_t *attributes, psa_key_id_t *key);
4133 uint8_t *hash_state,
4134 size_t hash_state_size,
4135 size_t *hash_state_length);
4170 typedef struct psa_sign_hash_interruptible_operation_s psa_sign_hash_interruptible_operation_t;
4203 typedef struct psa_verify_hash_interruptible_operation_s psa_verify_hash_interruptible_operation_t;
4277 void psa_interruptible_set_max_ops(uint32_t max_ops);
4296 uint32_t psa_interruptible_get_max_ops(
void);
4324 uint32_t psa_sign_hash_get_num_ops(
4325 const psa_sign_hash_interruptible_operation_t *operation);
4351 uint32_t psa_verify_hash_get_num_ops(
4352 const psa_verify_hash_interruptible_operation_t *operation);
4425 psa_status_t psa_sign_hash_start(
4426 psa_sign_hash_interruptible_operation_t *operation,
4427 psa_key_id_t key, psa_algorithm_t alg,
4428 const uint8_t *hash,
size_t hash_length);
4518 psa_status_t psa_sign_hash_complete(
4519 psa_sign_hash_interruptible_operation_t *operation,
4520 uint8_t *signature,
size_t signature_size,
4521 size_t *signature_length);
4560 psa_status_t psa_sign_hash_abort(
4561 psa_sign_hash_interruptible_operation_t *operation);
4637 psa_status_t psa_verify_hash_start(
4638 psa_verify_hash_interruptible_operation_t *operation,
4639 psa_key_id_t key, psa_algorithm_t alg,
4640 const uint8_t *hash,
size_t hash_length,
4641 const uint8_t *signature,
size_t signature_length);
4714 psa_status_t psa_verify_hash_complete(
4715 psa_verify_hash_interruptible_operation_t *operation);
4754 psa_status_t psa_verify_hash_abort(
4755 psa_verify_hash_interruptible_operation_t *operation);
4766 #include "crypto_sizes.h" 4770 #include "crypto_struct.h" 4774 #include "crypto_extra.h" void psa_reset_key_attributes(psa_key_attributes_t *attributes)
psa_status_t psa_cipher_update(psa_cipher_operation_t *operation, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_generate_random(uint8_t *output, size_t output_size)
Generate random bytes.
psa_status_t psa_key_derivation_verify_bytes(psa_key_derivation_operation_t *operation, const uint8_t *expected_output, size_t output_length)
psa_status_t psa_get_key_attributes(psa_key_id_t key, psa_key_attributes_t *attributes)
psa_status_t psa_mac_sign_finish(psa_mac_operation_t *operation, uint8_t *mac, size_t mac_size, size_t *mac_length)
psa_status_t psa_export_key(psa_key_id_t key, uint8_t *data, size_t data_size, size_t *data_length)
Export a key in binary format.
psa_status_t psa_import_key(const psa_key_attributes_t *attributes, const uint8_t *data, size_t data_length, psa_key_id_t *key)
Import a key in binary format.
psa_status_t psa_aead_decrypt_setup(psa_aead_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_key_derivation_set_capacity(psa_key_derivation_operation_t *operation, size_t capacity)
psa_status_t psa_sign_message(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
Sign a message with a private key. For hash-and-sign algorithms, this includes the hashing step...
psa_status_t psa_key_derivation_abort(psa_key_derivation_operation_t *operation)
psa_status_t psa_key_derivation_input_integer(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, uint64_t value)
psa_status_t psa_mac_verify_finish(psa_mac_operation_t *operation, const uint8_t *mac, size_t mac_length)
psa_status_t psa_key_derivation_verify_key(psa_key_derivation_operation_t *operation, psa_key_id_t expected)
struct psa_aead_operation_s psa_aead_operation_t
Definition: crypto.h:2232
psa_status_t psa_cipher_encrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_generate_key(const psa_key_attributes_t *attributes, psa_key_id_t *key)
Generate a key or key pair.
psa_status_t psa_mac_abort(psa_mac_operation_t *operation)
psa_status_t psa_asymmetric_decrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)
Decrypt a short message with a private key.
psa_status_t psa_mac_verify_setup(psa_mac_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_hash_resume(psa_hash_operation_t *operation, const uint8_t *hash_state, size_t hash_state_length)
Resume a previously suspended hash operation.
psa_status_t psa_hash_compute(psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *hash, size_t hash_size, size_t *hash_length)
psa_status_t psa_hash_update(psa_hash_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_mac_compute(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *mac, size_t mac_size, size_t *mac_length)
psa_status_t psa_aead_set_nonce(psa_aead_operation_t *operation, const uint8_t *nonce, size_t nonce_length)
psa_status_t psa_key_derivation_get_capacity(const psa_key_derivation_operation_t *operation, size_t *capacity)
psa_status_t psa_verify_hash(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, const uint8_t *signature, size_t signature_length)
Verify the signature of a hash or short message using a public key.
psa_status_t psa_aead_finish(psa_aead_operation_t *operation, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length, uint8_t *tag, size_t tag_size, size_t *tag_length)
psa_status_t psa_cipher_encrypt_setup(psa_cipher_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_asymmetric_encrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)
Encrypt a short message with a public key.
psa_status_t psa_cipher_finish(psa_cipher_operation_t *operation, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_aead_encrypt_setup(psa_aead_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_aead_update_ad(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_mac_verify(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *mac, size_t mac_length)
psa_status_t psa_destroy_key(psa_key_id_t key)
Destroy a key.
psa_status_t psa_hash_verify(psa_hash_operation_t *operation, const uint8_t *hash, size_t hash_length)
psa_status_t psa_verify_message(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *signature, size_t signature_length)
Verify the signature of a message with a public key, using a hash-and-sign verification algorithm...
psa_status_t psa_aead_set_lengths(psa_aead_operation_t *operation, size_t ad_length, size_t plaintext_length)
psa_status_t psa_hash_clone(const psa_hash_operation_t *source_operation, psa_hash_operation_t *target_operation)
psa_status_t psa_purge_key(psa_key_id_t key)
psa_status_t psa_hash_suspend(psa_hash_operation_t *operation, uint8_t *hash_state, size_t hash_state_size, size_t *hash_state_length)
Suspend an active hash operation.
struct psa_hash_operation_s psa_hash_operation_t
Definition: crypto.h:922
psa_status_t psa_cipher_set_iv(psa_cipher_operation_t *operation, const uint8_t *iv, size_t iv_length)
psa_status_t psa_aead_generate_nonce(psa_aead_operation_t *operation, uint8_t *nonce, size_t nonce_size, size_t *nonce_length)
psa_status_t psa_hash_setup(psa_hash_operation_t *operation, psa_algorithm_t alg)
psa_status_t psa_cipher_generate_iv(psa_cipher_operation_t *operation, uint8_t *iv, size_t iv_size, size_t *iv_length)
psa_status_t psa_key_derivation_output_key(const psa_key_attributes_t *attributes, psa_key_derivation_operation_t *operation, psa_key_id_t *key)
psa_status_t psa_aead_encrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
psa_status_t psa_aead_decrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *ciphertext, size_t ciphertext_length, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
psa_status_t psa_sign_hash(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
Sign a hash or short message with a private key.
psa_status_t psa_crypto_init(void)
Library initialization.
psa_status_t psa_key_derivation_output_bytes(psa_key_derivation_operation_t *operation, uint8_t *output, size_t output_length)
psa_status_t psa_key_derivation_input_bytes(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, const uint8_t *data, size_t data_length)
psa_status_t psa_aead_verify(psa_aead_operation_t *operation, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length, const uint8_t *tag, size_t tag_length)
struct psa_key_derivation_s psa_key_derivation_operation_t
Definition: crypto.h:3236
psa_status_t psa_mac_sign_setup(psa_mac_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_key_derivation_key_agreement(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, psa_key_id_t private_key, const uint8_t *peer_key, size_t peer_key_length)
psa_status_t psa_hash_abort(psa_hash_operation_t *operation)
struct psa_cipher_operation_s psa_cipher_operation_t
Definition: crypto.h:1709
psa_status_t psa_cipher_decrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_key_derivation_setup(psa_key_derivation_operation_t *operation, psa_algorithm_t alg)
psa_status_t psa_copy_key(psa_key_id_t source_key, const psa_key_attributes_t *attributes, psa_key_id_t *target_key)
psa_status_t psa_aead_abort(psa_aead_operation_t *operation)
psa_status_t psa_aead_update(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_export_public_key(psa_key_id_t key, uint8_t *data, size_t data_size, size_t *data_length)
Export a public key or the public part of a key pair in binary format.
psa_status_t psa_raw_key_agreement(psa_algorithm_t alg, psa_key_id_t private_key, const uint8_t *peer_key, size_t peer_key_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_cipher_decrypt_setup(psa_cipher_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_mac_update(psa_mac_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_cipher_abort(psa_cipher_operation_t *operation)
psa_status_t psa_key_derivation_input_key(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, psa_key_id_t key)
psa_status_t psa_hash_compare(psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *hash, size_t hash_length)
struct psa_mac_operation_s psa_mac_operation_t
Definition: crypto.h:1290
psa_status_t psa_hash_finish(psa_hash_operation_t *operation, uint8_t *hash, size_t hash_size, size_t *hash_length)