Loading...
Searching...
No Matches
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
23
24#ifdef __cplusplus
25extern "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.