Loading...
Searching...
No Matches
sizes.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 TU Dresden
3 * SPDX-FileCopyrightText: 2021 HAW Hamburg
4 * SPDX-License-Identifier: LGPL-2.1-only
5 */
6
7#pragma once
8
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#include "psa/sizes.h"
26#include "type.h"
27
35#if (IS_USED(MODULE_PSA_MAC_HMAC_SHA_256))
36#define CONFIG_PSA_MAX_KEY_SIZE 64
37#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
38 IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519) || \
39 IS_USED(MODULE_PSA_CIPHER_AES_256_CBC) || \
40 IS_USED(MODULE_PSA_AEAD_AES_256_CCM) || \
41 IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256) || \
42 IS_USED(MODULE_PSA_CIPHER_CHACHA20))
43#define CONFIG_PSA_MAX_KEY_SIZE 32
44#elif (IS_USED(MODULE_PSA_CIPHER_AES_192_CBC) || \
45 IS_USED(MODULE_PSA_AEAD_AES_192_CCM) || \
46 IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
47#define CONFIG_PSA_MAX_KEY_SIZE 24
48#elif (IS_USED(MODULE_PSA_CIPHER_AES_128_CBC)) || \
49 (IS_USED(MODULE_PSA_AEAD_AES_128_CCM)) || \
50 (IS_USED(MODULE_PSA_CIPHER_AES_128_ECB))
51#define CONFIG_PSA_MAX_KEY_SIZE 16
52#else
53#define CONFIG_PSA_MAX_KEY_SIZE 0
54#endif
55
66#define PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) \
67 (size_t)\
68 (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
69 (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_SECP_R1 ? \
70 PSA_BITS_TO_BYTES(key_bits) : \
71 0))
72
109#define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits) \
110 (PSA_KEY_TYPE_IS_PUBLIC_KEY(key_type) ? \
111 PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) : \
112 (PSA_KEY_TYPE_IS_ECC(key_type) ? \
113 PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) : \
114 0))
115
122#define PSA_ECC_KEY_SIZE_IS_VALID(type, bits) \
123 (PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? \
124 (bits == 255) : \
125 (PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_SECP_R1 ? \
126 (bits == 128 || \
127 bits == 192 || \
128 bits == 224 || \
129 bits == 256 || \
130 bits == 384) : \
131 0))
132
136#define PSA_MAX_PRIV_KEY_SIZE (PSA_BYTES_TO_BITS(CONFIG_PSA_MAX_KEY_SIZE))
137
147#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
148 IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
149#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
150 (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
151#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
152#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
153 (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
154#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
155#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
156 (PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
157#else
158#define PSA_EXPORT_KEY_PAIR_MAX_SIZE 0
159#endif
160
173#define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) \
174 (PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
175 ((size_t)(2 * PSA_BITS_TO_BYTES(key_bits) + 1)))
176
217#define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) \
218 (PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) : \
219 0)
220
231#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
232 IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
233#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
234 (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
235#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
236#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
237 (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
238#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
239#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
240 (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
241#else
242#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE 0
243#endif
244
250#define PSA_MAX_PRIV_KEY_BUFFER_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE))
251
255#define PSA_MAX_ASYMMETRIC_KEYPAIR_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE) + \
256 PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
257
261#if IS_USED(MODULE_PSA_ASYMMETRIC)
262#define PSA_MAX_KEY_DATA_SIZE (PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
263#else
264#define PSA_MAX_KEY_DATA_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
265#endif
266
270#define PSA_MAX_UNSTRUCTURED_KEY_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
271
272#ifdef __cplusplus
273}
274#endif
275
Key type definitions for the PSA Crypto API.
Size definitions for the PSA Crypto API.