blob: 2eaa28b3f304ee71c3de808241bdec8fba1ae8c6 [file] [log] [blame]
Antonio de Angelis8908f472018-08-31 15:44:25 +01001/*
Antonio de Angelisc26af632021-10-07 15:04:12 +01002 * Copyright (c) 2018-2022, Arm Limited. All rights reserved.
Antonio de Angelis8908f472018-08-31 15:44:25 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#ifndef __TFM_CRYPTO_DEFS_H__
9#define __TFM_CRYPTO_DEFS_H__
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#include <stdint.h>
16#include <limits.h>
17#include "tfm_api.h"
Jamie Foxcc31d402019-01-28 17:13:52 +000018#include "psa/crypto.h"
Antonio de Angelis8908f472018-08-31 15:44:25 +010019
20/**
Antonio de Angelis4743e672019-04-11 11:38:48 +010021 * \brief This type is used to overcome a limitation in the number of maximum
22 * IOVECs that can be used especially in psa_aead_encrypt and
23 * psa_aead_decrypt. To be removed in case the AEAD APIs number of
24 * parameters passed gets restructured
25 */
26#define TFM_CRYPTO_MAX_NONCE_LENGTH (16u)
27struct tfm_crypto_aead_pack_input {
28 uint8_t nonce[TFM_CRYPTO_MAX_NONCE_LENGTH];
29 uint32_t nonce_length;
30};
31
32/**
33 * \brief Structure used to pack non-pointer types in a call
34 *
35 */
36struct tfm_crypto_pack_iovec {
37 uint32_t sfn_id; /*!< Secure function ID used to dispatch the
38 * request
39 */
Antonio de Angelis04debbd2019-10-14 12:12:52 +010040 uint16_t step; /*!< Key derivation step */
Maulik Patel28659c42021-01-06 14:09:22 +000041 psa_key_id_t key_id; /*!< Key id */
Antonio de Angelis4743e672019-04-11 11:38:48 +010042 psa_algorithm_t alg; /*!< Algorithm */
Jamie Fox0e54ebc2019-04-09 14:21:04 +010043 uint32_t op_handle; /*!< Frontend context handle associated to a
Antonio de Angelis4743e672019-04-11 11:38:48 +010044 * multipart operation
45 */
Antonio de Angelis04debbd2019-10-14 12:12:52 +010046 size_t capacity; /*!< Key derivation capacity */
Antonio de Angelisc26af632021-10-07 15:04:12 +010047 size_t ad_length; /*!< Additional Data length for multipart AEAD */
48 size_t plaintext_length; /*!< Plaintext length for multipart AEAD */
Antonio de Angelis4743e672019-04-11 11:38:48 +010049
50 struct tfm_crypto_aead_pack_input aead_in; /*!< FixMe: Temporarily used for
51 * AEAD until the API is
52 * restructured
53 */
54};
55
56/**
Edison Ai080b2e22019-04-17 16:27:21 +080057 * \brief Define a progressive numerical value for each SID which can be used
Antonio de Angelisc26af632021-10-07 15:04:12 +010058 * when dispatching the requests to the service. Note: This has to
59 * match exactly with the list of APIs defined in tfm_crypto_api.h by
60 * the LIST_TFM_CRYPTO_UNIFORM_SIGNATURE_API X macro.
Antonio de Angelis4743e672019-04-11 11:38:48 +010061 */
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +010062enum {
Antonio de Angelis04debbd2019-10-14 12:12:52 +010063 TFM_CRYPTO_GET_KEY_ATTRIBUTES_SID = (0u),
64 TFM_CRYPTO_RESET_KEY_ATTRIBUTES_SID,
Jamie Foxdadb4e82019-09-03 17:59:41 +010065 TFM_CRYPTO_OPEN_KEY_SID,
66 TFM_CRYPTO_CLOSE_KEY_SID,
Edison Ai080b2e22019-04-17 16:27:21 +080067 TFM_CRYPTO_IMPORT_KEY_SID,
68 TFM_CRYPTO_DESTROY_KEY_SID,
Edison Ai080b2e22019-04-17 16:27:21 +080069 TFM_CRYPTO_EXPORT_KEY_SID,
70 TFM_CRYPTO_EXPORT_PUBLIC_KEY_SID,
Maulik Patel28659c42021-01-06 14:09:22 +000071 TFM_CRYPTO_PURGE_KEY_SID,
Edison Ai080b2e22019-04-17 16:27:21 +080072 TFM_CRYPTO_COPY_KEY_SID,
Antonio de Angelis04debbd2019-10-14 12:12:52 +010073 TFM_CRYPTO_HASH_COMPUTE_SID,
74 TFM_CRYPTO_HASH_COMPARE_SID,
Edison Ai080b2e22019-04-17 16:27:21 +080075 TFM_CRYPTO_HASH_SETUP_SID,
76 TFM_CRYPTO_HASH_UPDATE_SID,
77 TFM_CRYPTO_HASH_FINISH_SID,
78 TFM_CRYPTO_HASH_VERIFY_SID,
79 TFM_CRYPTO_HASH_ABORT_SID,
80 TFM_CRYPTO_HASH_CLONE_SID,
Antonio de Angelis04debbd2019-10-14 12:12:52 +010081 TFM_CRYPTO_MAC_COMPUTE_SID,
82 TFM_CRYPTO_MAC_VERIFY_SID,
Edison Ai080b2e22019-04-17 16:27:21 +080083 TFM_CRYPTO_MAC_SIGN_SETUP_SID,
84 TFM_CRYPTO_MAC_VERIFY_SETUP_SID,
85 TFM_CRYPTO_MAC_UPDATE_SID,
86 TFM_CRYPTO_MAC_SIGN_FINISH_SID,
87 TFM_CRYPTO_MAC_VERIFY_FINISH_SID,
88 TFM_CRYPTO_MAC_ABORT_SID,
Antonio de Angelis04debbd2019-10-14 12:12:52 +010089 TFM_CRYPTO_CIPHER_ENCRYPT_SID,
90 TFM_CRYPTO_CIPHER_DECRYPT_SID,
91 TFM_CRYPTO_CIPHER_ENCRYPT_SETUP_SID,
92 TFM_CRYPTO_CIPHER_DECRYPT_SETUP_SID,
93 TFM_CRYPTO_CIPHER_GENERATE_IV_SID,
94 TFM_CRYPTO_CIPHER_SET_IV_SID,
95 TFM_CRYPTO_CIPHER_UPDATE_SID,
96 TFM_CRYPTO_CIPHER_FINISH_SID,
97 TFM_CRYPTO_CIPHER_ABORT_SID,
Edison Ai080b2e22019-04-17 16:27:21 +080098 TFM_CRYPTO_AEAD_ENCRYPT_SID,
99 TFM_CRYPTO_AEAD_DECRYPT_SID,
Antonio de Angelis04debbd2019-10-14 12:12:52 +0100100 TFM_CRYPTO_AEAD_ENCRYPT_SETUP_SID,
101 TFM_CRYPTO_AEAD_DECRYPT_SETUP_SID,
102 TFM_CRYPTO_AEAD_GENERATE_NONCE_SID,
103 TFM_CRYPTO_AEAD_SET_NONCE_SID,
104 TFM_CRYPTO_AEAD_SET_LENGTHS_SID,
105 TFM_CRYPTO_AEAD_UPDATE_AD_SID,
106 TFM_CRYPTO_AEAD_UPDATE_SID,
107 TFM_CRYPTO_AEAD_FINISH_SID,
108 TFM_CRYPTO_AEAD_VERIFY_SID,
109 TFM_CRYPTO_AEAD_ABORT_SID,
Summer Qinb9492d22021-06-22 18:00:54 +0800110 TFM_CRYPTO_SIGN_MESSAGE_SID,
111 TFM_CRYPTO_VERIFY_MESSAGE_SID,
Antonio de Angelis04debbd2019-10-14 12:12:52 +0100112 TFM_CRYPTO_SIGN_HASH_SID,
113 TFM_CRYPTO_VERIFY_HASH_SID,
Edison Ai080b2e22019-04-17 16:27:21 +0800114 TFM_CRYPTO_ASYMMETRIC_ENCRYPT_SID,
115 TFM_CRYPTO_ASYMMETRIC_DECRYPT_SID,
Antonio de Angelis04debbd2019-10-14 12:12:52 +0100116 TFM_CRYPTO_KEY_DERIVATION_SETUP_SID,
117 TFM_CRYPTO_KEY_DERIVATION_GET_CAPACITY_SID,
118 TFM_CRYPTO_KEY_DERIVATION_SET_CAPACITY_SID,
119 TFM_CRYPTO_KEY_DERIVATION_INPUT_BYTES_SID,
120 TFM_CRYPTO_KEY_DERIVATION_INPUT_KEY_SID,
121 TFM_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT_SID,
122 TFM_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES_SID,
123 TFM_CRYPTO_KEY_DERIVATION_OUTPUT_KEY_SID,
124 TFM_CRYPTO_KEY_DERIVATION_ABORT_SID,
125 TFM_CRYPTO_RAW_KEY_AGREEMENT_SID,
Edison Ai080b2e22019-04-17 16:27:21 +0800126 TFM_CRYPTO_GENERATE_RANDOM_SID,
127 TFM_CRYPTO_GENERATE_KEY_SID,
128 TFM_CRYPTO_SID_MAX,
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +0100129};
Antonio de Angelis4743e672019-04-11 11:38:48 +0100130
131/**
Edison Ai080b2e22019-04-17 16:27:21 +0800132 * \brief Define an invalid value for an SID
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +0100133 *
Antonio de Angelis4743e672019-04-11 11:38:48 +0100134 */
Edison Ai080b2e22019-04-17 16:27:21 +0800135#define TFM_CRYPTO_SID_INVALID (~0x0u)
Antonio de Angelis4743e672019-04-11 11:38:48 +0100136
137/**
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100138 * \brief This value is used to mark an handle as invalid.
139 *
140 */
Jamie Fox707caf72019-05-29 15:14:18 +0100141#define TFM_CRYPTO_INVALID_HANDLE (0x0u)
Antonio de Angelis8908f472018-08-31 15:44:25 +0100142
143/**
Jamie Foxdadb4e82019-09-03 17:59:41 +0100144 * \brief The persistent key identifier that refers to the hardware unique key.
145 *
146 */
147#define TFM_CRYPTO_KEY_ID_HUK (0xFFFF815Bu)
148
149/**
150 * \brief The algorithm identifier that refers to key derivation from the
151 * hardware unique key.
152 *
153 */
154#define TFM_CRYPTO_ALG_HUK_DERIVATION ((psa_algorithm_t)0xB0000F00)
155
156/**
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000157 * \brief Define miscellaneous literal constants that are used in the service
Antonio de Angelis377a1552018-11-22 17:02:40 +0000158 *
159 */
Antonio de Angelis8908f472018-08-31 15:44:25 +0100160enum {
161 TFM_CRYPTO_NOT_IN_USE = 0,
162 TFM_CRYPTO_IN_USE = 1
163};
164
Antonio de Angelis8908f472018-08-31 15:44:25 +0100165#ifdef __cplusplus
166}
167#endif
168
169#endif /* __TFM_CRYPTO_DEFS_H__ */