blob: 5b05f46d7d7299c6e4613d4514f5e11d2ce5915f [file] [log] [blame]
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +00001/*
2 * Copyright (c) 2023, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#ifndef __PSA_CRYPTO_SID_H__
9#define __PSA_CRYPTO_SID_H__
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14#include <stdint.h>
15
16/**
17 * \brief Type associated to the group of a function encoding. There can be
18 * nine groups (Random, Key management, Hash, MAC, Cipher, AEAD,
19 * Asym sign, Asym encrypt, Key derivation).
20 */
21enum tfm_crypto_group_id {
22 TFM_CRYPTO_GROUP_ID_RANDOM = 0x0,
23 TFM_CRYPTO_GROUP_ID_KEY_MANAGEMENT,
24 TFM_CRYPTO_GROUP_ID_HASH,
25 TFM_CRYPTO_GROUP_ID_MAC,
26 TFM_CRYPTO_GROUP_ID_CIPHER,
27 TFM_CRYPTO_GROUP_ID_AEAD,
28 TFM_CRYPTO_GROUP_ID_ASYM_SIGN,
29 TFM_CRYPTO_GROUP_ID_ASYM_ENCRYPT,
30 TFM_CRYPTO_GROUP_ID_KEY_DERIVATION,
31};
32
33/* X macro describing each of the available PSA Crypto APIs */
34#define KEY_MANAGEMENT_FUNCS \
35 X(TFM_CRYPTO_GET_KEY_ATTRIBUTES) \
36 X(TFM_CRYPTO_RESET_KEY_ATTRIBUTES) \
37 X(TFM_CRYPTO_OPEN_KEY) \
38 X(TFM_CRYPTO_CLOSE_KEY) \
39 X(TFM_CRYPTO_IMPORT_KEY) \
40 X(TFM_CRYPTO_DESTROY_KEY) \
41 X(TFM_CRYPTO_EXPORT_KEY) \
42 X(TFM_CRYPTO_EXPORT_PUBLIC_KEY) \
43 X(TFM_CRYPTO_PURGE_KEY) \
44 X(TFM_CRYPTO_COPY_KEY) \
45 X(TFM_CRYPTO_GENERATE_KEY)
46
47#define HASH_FUNCS \
48 X(TFM_CRYPTO_HASH_COMPUTE) \
49 X(TFM_CRYPTO_HASH_COMPARE) \
50 X(TFM_CRYPTO_HASH_SETUP) \
51 X(TFM_CRYPTO_HASH_UPDATE) \
52 X(TFM_CRYPTO_HASH_CLONE) \
53 X(TFM_CRYPTO_HASH_FINISH) \
54 X(TFM_CRYPTO_HASH_VERIFY) \
55 X(TFM_CRYPTO_HASH_ABORT)
56
57#define MAC_FUNCS \
58 X(TFM_CRYPTO_MAC_COMPUTE) \
59 X(TFM_CRYPTO_MAC_VERIFY) \
60 X(TFM_CRYPTO_MAC_SIGN_SETUP) \
61 X(TFM_CRYPTO_MAC_VERIFY_SETUP) \
62 X(TFM_CRYPTO_MAC_UPDATE) \
63 X(TFM_CRYPTO_MAC_SIGN_FINISH) \
64 X(TFM_CRYPTO_MAC_VERIFY_FINISH) \
65 X(TFM_CRYPTO_MAC_ABORT)
66
67#define CIPHER_FUNCS \
68 X(TFM_CRYPTO_CIPHER_ENCRYPT) \
69 X(TFM_CRYPTO_CIPHER_DECRYPT) \
70 X(TFM_CRYPTO_CIPHER_ENCRYPT_SETUP) \
71 X(TFM_CRYPTO_CIPHER_DECRYPT_SETUP) \
72 X(TFM_CRYPTO_CIPHER_GENERATE_IV) \
73 X(TFM_CRYPTO_CIPHER_SET_IV) \
74 X(TFM_CRYPTO_CIPHER_UPDATE) \
75 X(TFM_CRYPTO_CIPHER_FINISH) \
76 X(TFM_CRYPTO_CIPHER_ABORT)
77
78#define AEAD_FUNCS \
79 X(TFM_CRYPTO_AEAD_ENCRYPT) \
80 X(TFM_CRYPTO_AEAD_DECRYPT) \
81 X(TFM_CRYPTO_AEAD_ENCRYPT_SETUP) \
82 X(TFM_CRYPTO_AEAD_DECRYPT_SETUP) \
83 X(TFM_CRYPTO_AEAD_GENERATE_NONCE) \
84 X(TFM_CRYPTO_AEAD_SET_NONCE) \
85 X(TFM_CRYPTO_AEAD_SET_LENGTHS) \
86 X(TFM_CRYPTO_AEAD_UPDATE_AD) \
87 X(TFM_CRYPTO_AEAD_UPDATE) \
88 X(TFM_CRYPTO_AEAD_FINISH) \
89 X(TFM_CRYPTO_AEAD_VERIFY) \
90 X(TFM_CRYPTO_AEAD_ABORT)
91
92#define ASYMMETRIC_SIGN_FUNCS \
93 X(TFM_CRYPTO_ASYMMETRIC_SIGN_MESSAGE) \
94 X(TFM_CRYPTO_ASYMMETRIC_VERIFY_MESSAGE) \
95 X(TFM_CRYPTO_ASYMMETRIC_SIGN_HASH) \
96 X(TFM_CRYPTO_ASYMMETRIC_VERIFY_HASH)
97
98#define AYSMMETRIC_ENCRYPT_FUNCS \
99 X(TFM_CRYPTO_ASYMMETRIC_ENCRYPT) \
100 X(TFM_CRYPTO_ASYMMETRIC_DECRYPT)
101
102#define KEY_DERIVATION_FUNCS \
103 X(TFM_CRYPTO_RAW_KEY_AGREEMENT) \
104 X(TFM_CRYPTO_KEY_DERIVATION_SETUP) \
105 X(TFM_CRYPTO_KEY_DERIVATION_GET_CAPACITY) \
106 X(TFM_CRYPTO_KEY_DERIVATION_SET_CAPACITY) \
107 X(TFM_CRYPTO_KEY_DERIVATION_INPUT_BYTES) \
108 X(TFM_CRYPTO_KEY_DERIVATION_INPUT_KEY) \
109 X(TFM_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT) \
110 X(TFM_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES) \
111 X(TFM_CRYPTO_KEY_DERIVATION_OUTPUT_KEY) \
112 X(TFM_CRYPTO_KEY_DERIVATION_ABORT)
113
114#define RANDOM_FUNCS \
115 X(TFM_CRYPTO_GENERATE_RANDOM)
116
117/*
118 * Define function IDs in each group. The function ID will be encoded into
119 * tfm_crypto_func_sid below.
120 * Each group is defined as a dedicated enum in case the total number of
121 * PSA Crypto APIs exceeds 256.
122 */
123#define X(func_id) func_id,
124enum tfm_crypto_key_management_func_id {
125 KEY_MANAGEMENT_FUNCS
126};
127enum tfm_crypto_hash_func_id {
128 HASH_FUNCS
129};
130enum tfm_crypto_mac_func_id {
131 MAC_FUNCS
132};
133enum tfm_crypto_cipher_func_id {
134 CIPHER_FUNCS
135};
136enum tfm_crypto_aead_func_id {
137 AEAD_FUNCS
138};
139enum tfm_crypto_asym_sign_func_id {
140 ASYMMETRIC_SIGN_FUNCS
141};
142enum tfm_crypto_asym_encrypt_func_id {
143 AYSMMETRIC_ENCRYPT_FUNCS
144};
145enum tfm_crypto_key_derivation_func_id {
146 KEY_DERIVATION_FUNCS
147};
148enum tfm_crypto_random_func_id {
149 RANDOM_FUNCS
150};
151#undef X
152
153#define FUNC_ID(func_id) (((func_id) & 0xFF) << 8)
154
155/*
156 * Numerical progressive value identifying a function API exposed through
157 * the interfaces (S or NS). It's used to dispatch the requests from S/NS
158 * to the corresponding API implementation in the Crypto service backend.
159 *
160 * Each function SID is encoded as uint16_t.
161 * | Func ID | Group ID |
162 * 15 8 7 0
163 * Func ID is defined in each group func_id enum above
164 * Group ID is defined in tfm_crypto_group_id.
165 */
166enum tfm_crypto_func_sid {
167
168#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
169 (TFM_CRYPTO_GROUP_ID_KEY_MANAGEMENT & 0xFF)),
170
171 KEY_MANAGEMENT_FUNCS
172
173#undef X
174#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
175 (TFM_CRYPTO_GROUP_ID_HASH & 0xFF)),
176 HASH_FUNCS
177
178#undef X
179#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
180 (TFM_CRYPTO_GROUP_ID_MAC & 0xFF)),
181 MAC_FUNCS
182
183#undef X
184#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
185 (TFM_CRYPTO_GROUP_ID_CIPHER & 0xFF)),
186 CIPHER_FUNCS
187
188#undef X
189#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
190 (TFM_CRYPTO_GROUP_ID_AEAD & 0xFF)),
191 AEAD_FUNCS
192
193#undef X
194#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
195 (TFM_CRYPTO_GROUP_ID_ASYM_SIGN & 0xFF)),
196 ASYMMETRIC_SIGN_FUNCS
197
198#undef X
199#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
200 (TFM_CRYPTO_GROUP_ID_ASYM_ENCRYPT & 0xFF)),
201 AYSMMETRIC_ENCRYPT_FUNCS
202
203#undef X
204#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
205 (TFM_CRYPTO_GROUP_ID_KEY_DERIVATION & 0xFF)),
206 KEY_DERIVATION_FUNCS
207
208#undef X
209#define X(func_id) func_id ## _SID = (uint16_t)((FUNC_ID(func_id)) | \
210 (TFM_CRYPTO_GROUP_ID_RANDOM & 0xFF)),
211 RANDOM_FUNCS
212
213};
214#undef X
215
216/**
217 * \brief Define an invalid value for an SID
218 *
219 */
220#define TFM_CRYPTO_SID_INVALID (~0x0u)
221
222/**
223 * \brief This value is used to mark an handle as invalid.
224 *
225 */
226#define TFM_CRYPTO_INVALID_HANDLE (0x0u)
227
228/**
229 * \brief Define miscellaneous literal constants that are used in the service
230 *
231 */
232enum {
233 TFM_CRYPTO_NOT_IN_USE = 0,
234 TFM_CRYPTO_IN_USE = 1
235};
236
237#ifdef __cplusplus
238}
239#endif
240
241#endif /* __PSA_CRYPTO_SID_H__ */