blob: fe057ce40030aa8786da5343e6227d757a677aae [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 */
Bence Balogh7ae8b4c2024-07-10 11:07:09 +020021enum tfm_crypto_group_id_t {
22 TFM_CRYPTO_GROUP_ID_RANDOM = UINT8_C(1),
23 TFM_CRYPTO_GROUP_ID_KEY_MANAGEMENT = UINT8_C(2),
24 TFM_CRYPTO_GROUP_ID_HASH = UINT8_C(3),
25 TFM_CRYPTO_GROUP_ID_MAC = UINT8_C(4),
26 TFM_CRYPTO_GROUP_ID_CIPHER = UINT8_C(5),
27 TFM_CRYPTO_GROUP_ID_AEAD = UINT8_C(6),
28 TFM_CRYPTO_GROUP_ID_ASYM_SIGN = UINT8_C(7),
29 TFM_CRYPTO_GROUP_ID_ASYM_ENCRYPT = UINT8_C(8),
30 TFM_CRYPTO_GROUP_ID_KEY_DERIVATION = UINT8_C(9)
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +000031};
32
Bence Balogh7ae8b4c2024-07-10 11:07:09 +020033/* Set of X macros describing each of the available PSA Crypto APIs */
34#define RANDOM_FUNCS \
35 X(TFM_CRYPTO_GENERATE_RANDOM)
36
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +000037#define KEY_MANAGEMENT_FUNCS \
38 X(TFM_CRYPTO_GET_KEY_ATTRIBUTES) \
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +000039 X(TFM_CRYPTO_OPEN_KEY) \
40 X(TFM_CRYPTO_CLOSE_KEY) \
41 X(TFM_CRYPTO_IMPORT_KEY) \
42 X(TFM_CRYPTO_DESTROY_KEY) \
43 X(TFM_CRYPTO_EXPORT_KEY) \
44 X(TFM_CRYPTO_EXPORT_PUBLIC_KEY) \
45 X(TFM_CRYPTO_PURGE_KEY) \
46 X(TFM_CRYPTO_COPY_KEY) \
47 X(TFM_CRYPTO_GENERATE_KEY)
48
49#define HASH_FUNCS \
50 X(TFM_CRYPTO_HASH_COMPUTE) \
51 X(TFM_CRYPTO_HASH_COMPARE) \
52 X(TFM_CRYPTO_HASH_SETUP) \
53 X(TFM_CRYPTO_HASH_UPDATE) \
54 X(TFM_CRYPTO_HASH_CLONE) \
55 X(TFM_CRYPTO_HASH_FINISH) \
56 X(TFM_CRYPTO_HASH_VERIFY) \
57 X(TFM_CRYPTO_HASH_ABORT)
58
59#define MAC_FUNCS \
60 X(TFM_CRYPTO_MAC_COMPUTE) \
61 X(TFM_CRYPTO_MAC_VERIFY) \
62 X(TFM_CRYPTO_MAC_SIGN_SETUP) \
63 X(TFM_CRYPTO_MAC_VERIFY_SETUP) \
64 X(TFM_CRYPTO_MAC_UPDATE) \
65 X(TFM_CRYPTO_MAC_SIGN_FINISH) \
66 X(TFM_CRYPTO_MAC_VERIFY_FINISH) \
67 X(TFM_CRYPTO_MAC_ABORT)
68
69#define CIPHER_FUNCS \
70 X(TFM_CRYPTO_CIPHER_ENCRYPT) \
71 X(TFM_CRYPTO_CIPHER_DECRYPT) \
72 X(TFM_CRYPTO_CIPHER_ENCRYPT_SETUP) \
73 X(TFM_CRYPTO_CIPHER_DECRYPT_SETUP) \
74 X(TFM_CRYPTO_CIPHER_GENERATE_IV) \
75 X(TFM_CRYPTO_CIPHER_SET_IV) \
76 X(TFM_CRYPTO_CIPHER_UPDATE) \
77 X(TFM_CRYPTO_CIPHER_FINISH) \
78 X(TFM_CRYPTO_CIPHER_ABORT)
79
80#define AEAD_FUNCS \
81 X(TFM_CRYPTO_AEAD_ENCRYPT) \
82 X(TFM_CRYPTO_AEAD_DECRYPT) \
83 X(TFM_CRYPTO_AEAD_ENCRYPT_SETUP) \
84 X(TFM_CRYPTO_AEAD_DECRYPT_SETUP) \
85 X(TFM_CRYPTO_AEAD_GENERATE_NONCE) \
86 X(TFM_CRYPTO_AEAD_SET_NONCE) \
87 X(TFM_CRYPTO_AEAD_SET_LENGTHS) \
88 X(TFM_CRYPTO_AEAD_UPDATE_AD) \
89 X(TFM_CRYPTO_AEAD_UPDATE) \
90 X(TFM_CRYPTO_AEAD_FINISH) \
91 X(TFM_CRYPTO_AEAD_VERIFY) \
92 X(TFM_CRYPTO_AEAD_ABORT)
93
Bence Balogh7ae8b4c2024-07-10 11:07:09 +020094#define ASYM_SIGN_FUNCS \
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +000095 X(TFM_CRYPTO_ASYMMETRIC_SIGN_MESSAGE) \
96 X(TFM_CRYPTO_ASYMMETRIC_VERIFY_MESSAGE) \
97 X(TFM_CRYPTO_ASYMMETRIC_SIGN_HASH) \
98 X(TFM_CRYPTO_ASYMMETRIC_VERIFY_HASH)
99
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200100#define ASYM_ENCRYPT_FUNCS \
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000101 X(TFM_CRYPTO_ASYMMETRIC_ENCRYPT) \
102 X(TFM_CRYPTO_ASYMMETRIC_DECRYPT)
103
104#define KEY_DERIVATION_FUNCS \
105 X(TFM_CRYPTO_RAW_KEY_AGREEMENT) \
106 X(TFM_CRYPTO_KEY_DERIVATION_SETUP) \
107 X(TFM_CRYPTO_KEY_DERIVATION_GET_CAPACITY) \
108 X(TFM_CRYPTO_KEY_DERIVATION_SET_CAPACITY) \
109 X(TFM_CRYPTO_KEY_DERIVATION_INPUT_BYTES) \
110 X(TFM_CRYPTO_KEY_DERIVATION_INPUT_KEY) \
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200111 X(TFM_CRYPTO_KEY_DERIVATION_INPUT_INTEGER) \
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000112 X(TFM_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT) \
113 X(TFM_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES) \
114 X(TFM_CRYPTO_KEY_DERIVATION_OUTPUT_KEY) \
115 X(TFM_CRYPTO_KEY_DERIVATION_ABORT)
116
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200117#define BASE__VALUE(x) ((uint16_t)((((uint16_t)(x)) << 8) & 0xFF00))
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000118
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200119/**
120 * \brief This type defines numerical progressive values identifying a function API
121 * exposed through the interfaces (S or NS). It's used to dispatch the requests
122 * from S/NS to the corresponding API implementation in the Crypto service backend.
123 *
124 * \note Each function SID is encoded as uint16_t.
125 * +------------+------------+
126 * | Group ID | Func ID |
127 * +------------+------------+
128 * (MSB)15 8 7 0(LSB)
129 *
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000130 */
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200131enum tfm_crypto_func_sid_t {
132#define X(FUNCTION_NAME) FUNCTION_NAME ## _SID,
133 BASE__RANDOM = BASE__VALUE(TFM_CRYPTO_GROUP_ID_RANDOM) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000134 RANDOM_FUNCS
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200135 BASE__KEY_MANAGEMENT = BASE__VALUE(TFM_CRYPTO_GROUP_ID_KEY_MANAGEMENT) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000136 KEY_MANAGEMENT_FUNCS
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200137 BASE__HASH = BASE__VALUE(TFM_CRYPTO_GROUP_ID_HASH) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000138 HASH_FUNCS
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200139 BASE__MAC = BASE__VALUE(TFM_CRYPTO_GROUP_ID_MAC) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000140 MAC_FUNCS
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200141 BASE__CIPHER = BASE__VALUE(TFM_CRYPTO_GROUP_ID_CIPHER) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000142 CIPHER_FUNCS
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200143 BASE__AEAD = BASE__VALUE(TFM_CRYPTO_GROUP_ID_AEAD) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000144 AEAD_FUNCS
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200145 BASE__ASYM_SIGN = BASE__VALUE(TFM_CRYPTO_GROUP_ID_ASYM_SIGN) - 1,
146 ASYM_SIGN_FUNCS
147 BASE__ASYM_ENCRYPT = BASE__VALUE(TFM_CRYPTO_GROUP_ID_ASYM_ENCRYPT) - 1,
148 ASYM_ENCRYPT_FUNCS
149 BASE__KEY_DERIVATION = BASE__VALUE(TFM_CRYPTO_GROUP_ID_KEY_DERIVATION) - 1,
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000150 KEY_DERIVATION_FUNCS
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000151#undef X
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000152};
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000153
154/**
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200155 * \brief This macro is used to extract the group_id from an encoded function id
156 * by accessing the upper 8 bits. A \a _function_id is uint16_t type
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000157 */
Bence Balogh7ae8b4c2024-07-10 11:07:09 +0200158#define TFM_CRYPTO_GET_GROUP_ID(_function_id) \
159 ((enum tfm_crypto_group_id_t)(((uint16_t)(_function_id) >> 8) & 0xFF))
Mohamed Omar Asaker0d292e72023-02-09 00:22:40 +0000160
161#ifdef __cplusplus
162}
163#endif
164
165#endif /* __PSA_CRYPTO_SID_H__ */