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 "psa/sizes.h"
29 #include "type.h"
30 
38 #if (IS_USED(MODULE_PSA_MAC_HMAC_SHA_256))
39 #define CONFIG_PSA_MAX_KEY_SIZE 64
40 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
41  IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519) || \
42  IS_USED(MODULE_PSA_CIPHER_AES_256_CBC) || \
43  IS_USED(MODULE_PSA_AEAD_AES_256_CCM) || \
44  IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256) || \
45  IS_USED(MODULE_PSA_CIPHER_CHACHA20))
46 #define CONFIG_PSA_MAX_KEY_SIZE 32
47 #elif (IS_USED(MODULE_PSA_CIPHER_AES_192_CBC) || \
48  IS_USED(MODULE_PSA_AEAD_AES_192_CCM) || \
49  IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
50 #define CONFIG_PSA_MAX_KEY_SIZE 24
51 #elif (IS_USED(MODULE_PSA_CIPHER_AES_128_CBC)) || \
52  (IS_USED(MODULE_PSA_AEAD_AES_128_CCM)) || \
53  (IS_USED(MODULE_PSA_CIPHER_AES_128_ECB))
54 #define CONFIG_PSA_MAX_KEY_SIZE 16
55 #else
56 #define CONFIG_PSA_MAX_KEY_SIZE 0
57 #endif
58 
69 #define PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) \
70  (size_t)\
71  (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
72  (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_SECP_R1 ? \
73  PSA_BITS_TO_BYTES(key_bits) : \
74  0))
75 
112 #define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits) \
113  (PSA_KEY_TYPE_IS_PUBLIC_KEY(key_type) ? \
114  PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) : \
115  (PSA_KEY_TYPE_IS_ECC(key_type) ? \
116  PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) : \
117  0))
118 
125 #define PSA_ECC_KEY_SIZE_IS_VALID(type, bits) \
126  (PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? \
127  (bits == 255) : \
128  (PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_SECP_R1 ? \
129  (bits == 128 || \
130  bits == 192 || \
131  bits == 224 || \
132  bits == 256 || \
133  bits == 384) : \
134  0))
135 
139 #define PSA_MAX_PRIV_KEY_SIZE (PSA_BYTES_TO_BITS(CONFIG_PSA_MAX_KEY_SIZE))
140 
150 #if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
151  IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
152 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
153  (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
154 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
155 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
156  (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
157 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
158 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
159  (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
160 #else
161 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE 0
162 #endif
163 
176 #define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) \
177  (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
178  ((size_t)(2 * PSA_BITS_TO_BYTES(key_bits) + 1)))
179 
220 #define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) \
221  (PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) : \
222  0)
223 
234 #if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
235  IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
236 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
237  (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
238 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
239 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
240  (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
241 #elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
242 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
243  (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
244 #else
245 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE 0
246 #endif
247 
253 #define PSA_MAX_PRIV_KEY_BUFFER_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE))
254 
258 #define PSA_MAX_ASYMMETRIC_KEYPAIR_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE) + \
259  PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
260 
264 #if IS_USED(MODULE_PSA_ASYMMETRIC)
265 #define PSA_MAX_KEY_DATA_SIZE (PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
266 #else
267 #define PSA_MAX_KEY_DATA_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
268 #endif
269 
273 #define PSA_MAX_UNSTRUCTURED_KEY_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
274 
275 #ifdef __cplusplus
276 }
277 #endif
278 
Key type definitions for the PSA Crypto API.
Size definitions for the PSA Crypto API.