sizes.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2025 TU Dresden
3  * Copyright (C) 2021 HAW Hamburg
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser
6  * General Public License v2.1. See the file LICENSE in the top level
7  * directory for more details.
8  */
9 
10 #pragma once
11 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #include "modules.h"
29 #include "psa/sizes.h"
30 #include "type.h"
31 
39 #if (IS_USED(MODULE_PSA_MAC_HMAC_SHA_256))
40 #define CONFIG_PSA_MAX_KEY_SIZE 64
41 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
42  IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519) || \
43  IS_USED(MODULE_PSA_CIPHER_AES_256_CBC) || \
44  IS_USED(MODULE_PSA_AEAD_AES_256_CCM) || \
45  IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256) || \
46  IS_USED(MODULE_PSA_CIPHER_CHACHA20))
47 #define CONFIG_PSA_MAX_KEY_SIZE 32
48 #elif (IS_USED(MODULE_PSA_CIPHER_AES_192_CBC) || \
49  IS_USED(MODULE_PSA_AEAD_AES_192_CCM) || \
50  IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
51 #define CONFIG_PSA_MAX_KEY_SIZE 24
52 #elif (IS_USED(MODULE_PSA_CIPHER_AES_128_CBC)) || \
53  (IS_USED(MODULE_PSA_AEAD_AES_128_CCM)) || \
54  (IS_USED(MODULE_PSA_CIPHER_AES_128_ECB))
55 #define CONFIG_PSA_MAX_KEY_SIZE 16
56 #else
57 #define CONFIG_PSA_MAX_KEY_SIZE 0
58 #endif
59 
70 #define PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) \
71  (size_t)\
72  (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
73  (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_SECP_R1 ? \
74  PSA_BITS_TO_BYTES(key_bits) : \
75  0))
76 
113 #define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits) \
114  (PSA_KEY_TYPE_IS_PUBLIC_KEY(key_type) ? \
115  PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) : \
116  (PSA_KEY_TYPE_IS_ECC(key_type) ? \
117  PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) : \
118  0))
119 
126 #define PSA_ECC_KEY_SIZE_IS_VALID(type, bits) \
127  (PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? \
128  (bits == 255) : \
129  (PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_SECP_R1 ? \
130  (bits == 128 || \
131  bits == 192 || \
132  bits == 224 || \
133  bits == 256 || \
134  bits == 384) : \
135  0))
136 
140 #define PSA_MAX_PRIV_KEY_SIZE (PSA_BYTES_TO_BITS(CONFIG_PSA_MAX_KEY_SIZE))
141 
151 #if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
152  IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
153 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
154  (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
155 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
156 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
157  (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
158 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
159 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
160  (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
161 #else
162 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE 0
163 #endif
164 
177 #define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) \
178  (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
179  ((size_t)(2 * PSA_BITS_TO_BYTES(key_bits) + 1)))
180 
221 #define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) \
222  (PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) : \
223  0)
224 
235 #if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
236  IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
237 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
238  (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
239 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
240 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
241  (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
242 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
243 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
244  (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
245 #else
246 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE 0
247 #endif
248 
254 #define PSA_MAX_PRIV_KEY_BUFFER_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE))
255 
259 #define PSA_MAX_ASYMMETRIC_KEYPAIR_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE) + \
260  PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
261 
265 #if IS_USED(MODULE_PSA_ASYMMETRIC)
266 #define PSA_MAX_KEY_DATA_SIZE (PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
267 #else
268 #define PSA_MAX_KEY_DATA_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
269 #endif
270 
274 #define PSA_MAX_UNSTRUCTURED_KEY_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
275 
276 #ifdef __cplusplus
277 }
278 #endif
279 
Common macros and compiler attributes/pragmas configuration.
Key type definitions for the PSA Crypto API.
Size definitions for the PSA Crypto API.