1 /**
2  * \file psa/crypto_sizes.h
3  *
4  * \brief PSA cryptography module: Mbed TLS buffer size macros
5  *
6  * \note This file may not be included directly. Applications must
7  * include psa/crypto.h.
8  *
9  * This file contains the definitions of macros that are useful to
10  * compute buffer sizes. The signatures and semantics of these macros
11  * are standardized, but the definitions are not, because they depend on
12  * the available algorithms and, in some cases, on permitted tolerances
13  * on buffer sizes.
14  *
15  * In implementations with isolation between the application and the
16  * cryptography module, implementers should take care to ensure that
17  * the definitions that are exposed to applications match what the
18  * module implements.
19  *
20  * Macros that compute sizes whose values do not depend on the
21  * implementation are in crypto.h.
22  */
23 /*
24  *  Copyright The Mbed TLS Contributors
25  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
26  */
27 
28 #ifndef PSA_CRYPTO_SIZES_H
29 #define PSA_CRYPTO_SIZES_H
30 
31 /*
32  * Include the build-time configuration information file. Here, we do not
33  * include `"mbedtls/build_info.h"` directly but `"psa/build_info.h"`, which
34  * is basically just an alias to it. This is to ease the maintenance of the
35  * PSA cryptography repository which has a different build system and
36  * configuration.
37  */
38 #include "psa/build_info.h"
39 
40 #define PSA_BITS_TO_BYTES(bits) (((bits) + 7u) / 8u)
41 #define PSA_BYTES_TO_BITS(bytes) ((bytes) * 8u)
42 #define PSA_MAX_OF_THREE(a, b, c) ((a) <= (b) ? (b) <= (c) ? \
43                                    (c) : (b) : (a) <= (c) ? (c) : (a))
44 
45 #define PSA_ROUND_UP_TO_MULTIPLE(block_size, length) \
46     (((length) + (block_size) - 1) / (block_size) * (block_size))
47 
48 /** The size of the output of psa_hash_finish(), in bytes.
49  *
50  * This is also the hash size that psa_hash_verify() expects.
51  *
52  * \param alg   A hash algorithm (\c PSA_ALG_XXX value such that
53  *              #PSA_ALG_IS_HASH(\p alg) is true), or an HMAC algorithm
54  *              (#PSA_ALG_HMAC(\c hash_alg) where \c hash_alg is a
55  *              hash algorithm).
56  *
57  * \return The hash size for the specified hash algorithm.
58  *         If the hash algorithm is not recognized, return 0.
59  */
60 #define PSA_HASH_LENGTH(alg)                                        \
61     (                                                               \
62         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16u :           \
63         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20u :     \
64         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20u :         \
65         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 28u :       \
66         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 32u :       \
67         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 48u :       \
68         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 64u :       \
69         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 28u :   \
70         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 32u :   \
71         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 28u :      \
72         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 32u :      \
73         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 48u :      \
74         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 64u :      \
75         0u)
76 
77 /** The input block size of a hash algorithm, in bytes.
78  *
79  * Hash algorithms process their input data in blocks. Hash operations will
80  * retain any partial blocks until they have enough input to fill the block or
81  * until the operation is finished.
82  * This affects the output from psa_hash_suspend().
83  *
84  * \param alg   A hash algorithm (\c PSA_ALG_XXX value such that
85  *              PSA_ALG_IS_HASH(\p alg) is true).
86  *
87  * \return      The block size in bytes for the specified hash algorithm.
88  *              If the hash algorithm is not recognized, return 0.
89  *              An implementation can return either 0 or the correct size for a
90  *              hash algorithm that it recognizes, but does not support.
91  */
92 #define PSA_HASH_BLOCK_LENGTH(alg)                                  \
93     (                                                               \
94         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 64u :           \
95         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 64u :     \
96         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 64u :         \
97         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 64u :       \
98         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 64u :       \
99         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 128u :      \
100         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 128u :      \
101         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 128u :  \
102         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 128u :  \
103         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 144u :     \
104         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 136u :     \
105         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 104u :     \
106         PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 72u :      \
107         0u)
108 
109 /** \def PSA_HASH_MAX_SIZE
110  *
111  * Maximum size of a hash.
112  *
113  * This macro expands to a compile-time constant integer. This value
114  * is the maximum size of a hash in bytes.
115  */
116 /* Note: for HMAC-SHA-3, the block size is 144 bytes for HMAC-SHA3-224,
117  * 136 bytes for HMAC-SHA3-256, 104 bytes for SHA3-384, 72 bytes for
118  * HMAC-SHA3-512. */
119 /* Note: PSA_HASH_MAX_SIZE should be kept in sync with MBEDTLS_MD_MAX_SIZE,
120  * see the note on MBEDTLS_MD_MAX_SIZE for details. */
121 #if defined(PSA_WANT_ALG_SHA3_224)
122 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 144u
123 #elif defined(PSA_WANT_ALG_SHA3_256)
124 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 136u
125 #elif defined(PSA_WANT_ALG_SHA_512)
126 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 128u
127 #elif defined(PSA_WANT_ALG_SHA_384)
128 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 128u
129 #elif defined(PSA_WANT_ALG_SHA3_384)
130 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 104u
131 #elif defined(PSA_WANT_ALG_SHA3_512)
132 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 72u
133 #elif defined(PSA_WANT_ALG_SHA_256)
134 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 64u
135 #elif defined(PSA_WANT_ALG_SHA_224)
136 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 64u
137 #else /* SHA-1 or smaller */
138 #define PSA_HMAC_MAX_HASH_BLOCK_SIZE 64u
139 #endif
140 
141 #if defined(PSA_WANT_ALG_SHA_512) || defined(PSA_WANT_ALG_SHA3_512)
142 #define PSA_HASH_MAX_SIZE 64u
143 #elif defined(PSA_WANT_ALG_SHA_384) || defined(PSA_WANT_ALG_SHA3_384)
144 #define PSA_HASH_MAX_SIZE 48u
145 #elif defined(PSA_WANT_ALG_SHA_256) || defined(PSA_WANT_ALG_SHA3_256)
146 #define PSA_HASH_MAX_SIZE 32u
147 #elif defined(PSA_WANT_ALG_SHA_224) || defined(PSA_WANT_ALG_SHA3_224)
148 #define PSA_HASH_MAX_SIZE 28u
149 #else /* SHA-1 or smaller */
150 #define PSA_HASH_MAX_SIZE 20u
151 #endif
152 
153 /** \def PSA_MAC_MAX_SIZE
154  *
155  * Maximum size of a MAC.
156  *
157  * This macro expands to a compile-time constant integer. This value
158  * is the maximum size of a MAC in bytes.
159  */
160 /* All non-HMAC MACs have a maximum size that's smaller than the
161  * minimum possible value of PSA_HASH_MAX_SIZE in this implementation. */
162 /* Note that the encoding of truncated MAC algorithms limits this value
163  * to 64 bytes.
164  */
165 #define PSA_MAC_MAX_SIZE PSA_HASH_MAX_SIZE
166 
167 /** The length of a tag for an AEAD algorithm, in bytes.
168  *
169  * This macro can be used to allocate a buffer of sufficient size to store the
170  * tag output from psa_aead_finish().
171  *
172  * See also #PSA_AEAD_TAG_MAX_SIZE.
173  *
174  * \param key_type            The type of the AEAD key.
175  * \param key_bits            The size of the AEAD key in bits.
176  * \param alg                 An AEAD algorithm
177  *                            (\c PSA_ALG_XXX value such that
178  *                            #PSA_ALG_IS_AEAD(\p alg) is true).
179  *
180  * \return                    The tag length for the specified algorithm and key.
181  *                            If the AEAD algorithm does not have an identified
182  *                            tag that can be distinguished from the rest of
183  *                            the ciphertext, return 0.
184  *                            If the key type or AEAD algorithm is not
185  *                            recognized, or the parameters are incompatible,
186  *                            return 0.
187  */
188 #define PSA_AEAD_TAG_LENGTH(key_type, key_bits, alg)                        \
189     (PSA_AEAD_NONCE_LENGTH(key_type, alg) != 0 ?                            \
190      PSA_ALG_AEAD_GET_TAG_LENGTH(alg) :                                     \
191      ((void) (key_bits), 0u))
192 
193 /** The maximum tag size for all supported AEAD algorithms, in bytes.
194  *
195  * See also #PSA_AEAD_TAG_LENGTH(\p key_type, \p key_bits, \p alg).
196  */
197 #define PSA_AEAD_TAG_MAX_SIZE       16u
198 
199 /* The maximum size of an RSA key on this implementation, in bits.
200  * This is a vendor-specific macro.
201  *
202  * Mbed TLS does not set a hard limit on the size of RSA keys: any key
203  * whose parameters fit in a bignum is accepted. However large keys can
204  * induce a large memory usage and long computation times. Unlike other
205  * auxiliary macros in this file and in crypto.h, which reflect how the
206  * library is configured, this macro defines how the library is
207  * configured. This implementation refuses to import or generate an
208  * RSA key whose size is larger than the value defined here.
209  *
210  * Note that an implementation may set different size limits for different
211  * operations, and does not need to accept all key sizes up to the limit. */
212 #define PSA_VENDOR_RSA_MAX_KEY_BITS 4096u
213 
214 /* The minimum size of an RSA key on this implementation, in bits.
215  * This is a vendor-specific macro.
216  *
217  * Limits RSA key generation to a minimum due to avoid accidental misuse.
218  * This value cannot be less than 128 bits.
219  */
220 #if defined(MBEDTLS_RSA_GEN_KEY_MIN_BITS)
221 #define PSA_VENDOR_RSA_GENERATE_MIN_KEY_BITS MBEDTLS_RSA_GEN_KEY_MIN_BITS
222 #else
223 #define PSA_VENDOR_RSA_GENERATE_MIN_KEY_BITS 1024
224 #endif
225 
226 /* The maximum size of an DH key on this implementation, in bits.
227  *
228  * Note that an implementation may set different size limits for different
229  * operations, and does not need to accept all key sizes up to the limit. */
230 #define PSA_VENDOR_FFDH_MAX_KEY_BITS 8192u
231 
232 /* The maximum size of an ECC key on this implementation, in bits.
233  * This is a vendor-specific macro. */
234 #if defined(PSA_WANT_ECC_SECP_R1_521)
235 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 521u
236 #elif defined(PSA_WANT_ECC_BRAINPOOL_P_R1_512)
237 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 512u
238 #elif defined(PSA_WANT_ECC_MONTGOMERY_448)
239 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 448u
240 #elif defined(PSA_WANT_ECC_SECP_R1_384)
241 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 384u
242 #elif defined(PSA_WANT_ECC_BRAINPOOL_P_R1_384)
243 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 384u
244 #elif defined(PSA_WANT_ECC_SECP_R1_256)
245 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 256u
246 #elif defined(PSA_WANT_ECC_SECP_K1_256)
247 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 256u
248 #elif defined(PSA_WANT_ECC_BRAINPOOL_P_R1_256)
249 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 256u
250 #elif defined(PSA_WANT_ECC_MONTGOMERY_255)
251 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 255u
252 #elif defined(PSA_WANT_ECC_SECP_R1_224)
253 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 224u
254 #elif defined(PSA_WANT_ECC_SECP_K1_224)
255 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 224u
256 #elif defined(PSA_WANT_ECC_SECP_R1_192)
257 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 192u
258 #elif defined(PSA_WANT_ECC_SECP_K1_192)
259 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 192u
260 #else
261 #define PSA_VENDOR_ECC_MAX_CURVE_BITS 0u
262 #endif
263 
264 /** This macro returns the maximum supported length of the PSK for the
265  * TLS-1.2 PSK-to-MS key derivation
266  * (#PSA_ALG_TLS12_PSK_TO_MS(\c hash_alg)).
267  *
268  * The maximum supported length does not depend on the chosen hash algorithm.
269  *
270  * Quoting RFC 4279, Sect 5.3:
271  * TLS implementations supporting these ciphersuites MUST support
272  * arbitrary PSK identities up to 128 octets in length, and arbitrary
273  * PSKs up to 64 octets in length.  Supporting longer identities and
274  * keys is RECOMMENDED.
275  *
276  * Therefore, no implementation should define a value smaller than 64
277  * for #PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE.
278  */
279 #define PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE 128u
280 
281 /* The expected size of input passed to psa_tls12_ecjpake_to_pms_input,
282  * which is expected to work with P-256 curve only. */
283 #define PSA_TLS12_ECJPAKE_TO_PMS_INPUT_SIZE 65u
284 
285 /* The size of a serialized K.X coordinate to be used in
286  * psa_tls12_ecjpake_to_pms_input. This function only accepts the P-256
287  * curve. */
288 #define PSA_TLS12_ECJPAKE_TO_PMS_DATA_SIZE 32u
289 
290 /* The maximum number of iterations for PBKDF2 on this implementation, in bits.
291  * This is a vendor-specific macro. This can be configured if necessary */
292 #define PSA_VENDOR_PBKDF2_MAX_ITERATIONS 0xffffffffU
293 
294 /** The maximum size of a block cipher. */
295 #define PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE 16u
296 
297 /** The size of the output of psa_mac_sign_finish(), in bytes.
298  *
299  * This is also the MAC size that psa_mac_verify_finish() expects.
300  *
301  * \warning This macro may evaluate its arguments multiple times or
302  *          zero times, so you should not pass arguments that contain
303  *          side effects.
304  *
305  * \param key_type      The type of the MAC key.
306  * \param key_bits      The size of the MAC key in bits.
307  * \param alg           A MAC algorithm (\c PSA_ALG_XXX value such that
308  *                      #PSA_ALG_IS_MAC(\p alg) is true).
309  *
310  * \return              The MAC size for the specified algorithm with
311  *                      the specified key parameters.
312  * \return              0 if the MAC algorithm is not recognized.
313  * \return              Either 0 or the correct size for a MAC algorithm that
314  *                      the implementation recognizes, but does not support.
315  * \return              Unspecified if the key parameters are not consistent
316  *                      with the algorithm.
317  */
318 #define PSA_MAC_LENGTH(key_type, key_bits, alg)                                   \
319     ((alg) & PSA_ALG_MAC_TRUNCATION_MASK ? PSA_MAC_TRUNCATED_LENGTH(alg) :        \
320      PSA_ALG_IS_HMAC(alg) ? PSA_HASH_LENGTH(PSA_ALG_HMAC_GET_HASH(alg)) :         \
321      PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) ? PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \
322      ((void) (key_type), (void) (key_bits), 0u))
323 
324 /** The maximum size of the output of psa_aead_encrypt(), in bytes.
325  *
326  * If the size of the ciphertext buffer is at least this large, it is
327  * guaranteed that psa_aead_encrypt() will not fail due to an
328  * insufficient buffer size. Depending on the algorithm, the actual size of
329  * the ciphertext may be smaller.
330  *
331  * See also #PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE(\p plaintext_length).
332  *
333  * \warning This macro may evaluate its arguments multiple times or
334  *          zero times, so you should not pass arguments that contain
335  *          side effects.
336  *
337  * \param key_type            A symmetric key type that is
338  *                            compatible with algorithm \p alg.
339  * \param alg                 An AEAD algorithm
340  *                            (\c PSA_ALG_XXX value such that
341  *                            #PSA_ALG_IS_AEAD(\p alg) is true).
342  * \param plaintext_length    Size of the plaintext in bytes.
343  *
344  * \return                    The AEAD ciphertext size for the specified
345  *                            algorithm.
346  *                            If the key type or AEAD algorithm is not
347  *                            recognized, or the parameters are incompatible,
348  *                            return 0.
349  */
350 #define PSA_AEAD_ENCRYPT_OUTPUT_SIZE(key_type, alg, plaintext_length) \
351     (PSA_AEAD_NONCE_LENGTH(key_type, alg) != 0 ?                      \
352      (plaintext_length) + PSA_ALG_AEAD_GET_TAG_LENGTH(alg) :          \
353      0u)
354 
355 /** A sufficient output buffer size for psa_aead_encrypt(), for any of the
356  *  supported key types and AEAD algorithms.
357  *
358  * If the size of the ciphertext buffer is at least this large, it is guaranteed
359  * that psa_aead_encrypt() will not fail due to an insufficient buffer size.
360  *
361  * \note This macro returns a compile-time constant if its arguments are
362  *       compile-time constants.
363  *
364  * See also #PSA_AEAD_ENCRYPT_OUTPUT_SIZE(\p key_type, \p alg,
365  * \p plaintext_length).
366  *
367  * \param plaintext_length    Size of the plaintext in bytes.
368  *
369  * \return                    A sufficient output buffer size for any of the
370  *                            supported key types and AEAD algorithms.
371  *
372  */
373 #define PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE(plaintext_length)          \
374     ((plaintext_length) + PSA_AEAD_TAG_MAX_SIZE)
375 
376 
377 /** The maximum size of the output of psa_aead_decrypt(), in bytes.
378  *
379  * If the size of the plaintext buffer is at least this large, it is
380  * guaranteed that psa_aead_decrypt() will not fail due to an
381  * insufficient buffer size. Depending on the algorithm, the actual size of
382  * the plaintext may be smaller.
383  *
384  * See also #PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE(\p ciphertext_length).
385  *
386  * \warning This macro may evaluate its arguments multiple times or
387  *          zero times, so you should not pass arguments that contain
388  *          side effects.
389  *
390  * \param key_type            A symmetric key type that is
391  *                            compatible with algorithm \p alg.
392  * \param alg                 An AEAD algorithm
393  *                            (\c PSA_ALG_XXX value such that
394  *                            #PSA_ALG_IS_AEAD(\p alg) is true).
395  * \param ciphertext_length   Size of the plaintext in bytes.
396  *
397  * \return                    The AEAD ciphertext size for the specified
398  *                            algorithm.
399  *                            If the key type or AEAD algorithm is not
400  *                            recognized, or the parameters are incompatible,
401  *                            return 0.
402  */
403 #define PSA_AEAD_DECRYPT_OUTPUT_SIZE(key_type, alg, ciphertext_length) \
404     (PSA_AEAD_NONCE_LENGTH(key_type, alg) != 0 &&                      \
405      (ciphertext_length) > PSA_ALG_AEAD_GET_TAG_LENGTH(alg) ?      \
406      (ciphertext_length) - PSA_ALG_AEAD_GET_TAG_LENGTH(alg) :      \
407      0u)
408 
409 /** A sufficient output buffer size for psa_aead_decrypt(), for any of the
410  *  supported key types and AEAD algorithms.
411  *
412  * If the size of the plaintext buffer is at least this large, it is guaranteed
413  * that psa_aead_decrypt() will not fail due to an insufficient buffer size.
414  *
415  * \note This macro returns a compile-time constant if its arguments are
416  *       compile-time constants.
417  *
418  * See also #PSA_AEAD_DECRYPT_OUTPUT_SIZE(\p key_type, \p alg,
419  * \p ciphertext_length).
420  *
421  * \param ciphertext_length   Size of the ciphertext in bytes.
422  *
423  * \return                    A sufficient output buffer size for any of the
424  *                            supported key types and AEAD algorithms.
425  *
426  */
427 #define PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE(ciphertext_length)     \
428     (ciphertext_length)
429 
430 /** The default nonce size for an AEAD algorithm, in bytes.
431  *
432  * This macro can be used to allocate a buffer of sufficient size to
433  * store the nonce output from #psa_aead_generate_nonce().
434  *
435  * See also #PSA_AEAD_NONCE_MAX_SIZE.
436  *
437  * \note This is not the maximum size of nonce supported as input to
438  *       #psa_aead_set_nonce(), #psa_aead_encrypt() or #psa_aead_decrypt(),
439  *       just the default size that is generated by #psa_aead_generate_nonce().
440  *
441  * \warning This macro may evaluate its arguments multiple times or
442  *          zero times, so you should not pass arguments that contain
443  *          side effects.
444  *
445  * \param key_type  A symmetric key type that is compatible with
446  *                  algorithm \p alg.
447  *
448  * \param alg       An AEAD algorithm (\c PSA_ALG_XXX value such that
449  *                  #PSA_ALG_IS_AEAD(\p alg) is true).
450  *
451  * \return The default nonce size for the specified key type and algorithm.
452  *         If the key type or AEAD algorithm is not recognized,
453  *         or the parameters are incompatible, return 0.
454  */
455 #define PSA_AEAD_NONCE_LENGTH(key_type, alg) \
456     (PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) == 16 ? \
457      MBEDTLS_PSA_ALG_AEAD_EQUAL(alg, PSA_ALG_CCM) ? 13u : \
458      MBEDTLS_PSA_ALG_AEAD_EQUAL(alg, PSA_ALG_GCM) ? 12u : \
459      0u : \
460      (key_type) == PSA_KEY_TYPE_CHACHA20 && \
461      MBEDTLS_PSA_ALG_AEAD_EQUAL(alg, PSA_ALG_CHACHA20_POLY1305) ? 12u : \
462      0u)
463 
464 /** The maximum default nonce size among all supported pairs of key types and
465  *  AEAD algorithms, in bytes.
466  *
467  * This is equal to or greater than any value that #PSA_AEAD_NONCE_LENGTH()
468  * may return.
469  *
470  * \note This is not the maximum size of nonce supported as input to
471  *       #psa_aead_set_nonce(), #psa_aead_encrypt() or #psa_aead_decrypt(),
472  *       just the largest size that may be generated by
473  *       #psa_aead_generate_nonce().
474  */
475 #define PSA_AEAD_NONCE_MAX_SIZE 13u
476 
477 /** A sufficient output buffer size for psa_aead_update().
478  *
479  * If the size of the output buffer is at least this large, it is
480  * guaranteed that psa_aead_update() will not fail due to an
481  * insufficient buffer size. The actual size of the output may be smaller
482  * in any given call.
483  *
484  * See also #PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(\p input_length).
485  *
486  * \warning This macro may evaluate its arguments multiple times or
487  *          zero times, so you should not pass arguments that contain
488  *          side effects.
489  *
490  * \param key_type            A symmetric key type that is
491  *                            compatible with algorithm \p alg.
492  * \param alg                 An AEAD algorithm
493  *                            (\c PSA_ALG_XXX value such that
494  *                            #PSA_ALG_IS_AEAD(\p alg) is true).
495  * \param input_length        Size of the input in bytes.
496  *
497  * \return                    A sufficient output buffer size for the specified
498  *                            algorithm.
499  *                            If the key type or AEAD algorithm is not
500  *                            recognized, or the parameters are incompatible,
501  *                            return 0.
502  */
503 /* For all the AEAD modes defined in this specification, it is possible
504  * to emit output without delay. However, hardware may not always be
505  * capable of this. So for modes based on a block cipher, allow the
506  * implementation to delay the output until it has a full block. */
507 #define PSA_AEAD_UPDATE_OUTPUT_SIZE(key_type, alg, input_length)                             \
508     (PSA_AEAD_NONCE_LENGTH(key_type, alg) != 0 ?                                             \
509      PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) ?                                              \
510      PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type), (input_length)) : \
511      (input_length) : \
512      0u)
513 
514 /** A sufficient output buffer size for psa_aead_update(), for any of the
515  *  supported key types and AEAD algorithms.
516  *
517  * If the size of the output buffer is at least this large, it is guaranteed
518  * that psa_aead_update() will not fail due to an insufficient buffer size.
519  *
520  * See also #PSA_AEAD_UPDATE_OUTPUT_SIZE(\p key_type, \p alg, \p input_length).
521  *
522  * \param input_length      Size of the input in bytes.
523  */
524 #define PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(input_length)                           \
525     (PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE, (input_length)))
526 
527 /** A sufficient ciphertext buffer size for psa_aead_finish().
528  *
529  * If the size of the ciphertext buffer is at least this large, it is
530  * guaranteed that psa_aead_finish() will not fail due to an
531  * insufficient ciphertext buffer size. The actual size of the output may
532  * be smaller in any given call.
533  *
534  * See also #PSA_AEAD_FINISH_OUTPUT_MAX_SIZE.
535  *
536  * \param key_type            A symmetric key type that is
537                               compatible with algorithm \p alg.
538  * \param alg                 An AEAD algorithm
539  *                            (\c PSA_ALG_XXX value such that
540  *                            #PSA_ALG_IS_AEAD(\p alg) is true).
541  *
542  * \return                    A sufficient ciphertext buffer size for the
543  *                            specified algorithm.
544  *                            If the key type or AEAD algorithm is not
545  *                            recognized, or the parameters are incompatible,
546  *                            return 0.
547  */
548 #define PSA_AEAD_FINISH_OUTPUT_SIZE(key_type, alg) \
549     (PSA_AEAD_NONCE_LENGTH(key_type, alg) != 0 &&  \
550      PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) ?    \
551      PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \
552      0u)
553 
554 /** A sufficient ciphertext buffer size for psa_aead_finish(), for any of the
555  *  supported key types and AEAD algorithms.
556  *
557  * See also #PSA_AEAD_FINISH_OUTPUT_SIZE(\p key_type, \p alg).
558  */
559 #define PSA_AEAD_FINISH_OUTPUT_MAX_SIZE     (PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE)
560 
561 /** A sufficient plaintext buffer size for psa_aead_verify().
562  *
563  * If the size of the plaintext buffer is at least this large, it is
564  * guaranteed that psa_aead_verify() will not fail due to an
565  * insufficient plaintext buffer size. The actual size of the output may
566  * be smaller in any given call.
567  *
568  * See also #PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE.
569  *
570  * \param key_type            A symmetric key type that is
571  *                            compatible with algorithm \p alg.
572  * \param alg                 An AEAD algorithm
573  *                            (\c PSA_ALG_XXX value such that
574  *                            #PSA_ALG_IS_AEAD(\p alg) is true).
575  *
576  * \return                    A sufficient plaintext buffer size for the
577  *                            specified algorithm.
578  *                            If the key type or AEAD algorithm is not
579  *                            recognized, or the parameters are incompatible,
580  *                            return 0.
581  */
582 #define PSA_AEAD_VERIFY_OUTPUT_SIZE(key_type, alg) \
583     (PSA_AEAD_NONCE_LENGTH(key_type, alg) != 0 &&  \
584      PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) ?    \
585      PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \
586      0u)
587 
588 /** A sufficient plaintext buffer size for psa_aead_verify(), for any of the
589  *  supported key types and AEAD algorithms.
590  *
591  * See also #PSA_AEAD_VERIFY_OUTPUT_SIZE(\p key_type, \p alg).
592  */
593 #define PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE     (PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE)
594 
595 #define PSA_RSA_MINIMUM_PADDING_SIZE(alg)                         \
596     (PSA_ALG_IS_RSA_OAEP(alg) ?                                   \
597      2u * PSA_HASH_LENGTH(PSA_ALG_RSA_OAEP_GET_HASH(alg)) + 1u :   \
598      11u /*PKCS#1v1.5*/)
599 
600 /**
601  * \brief ECDSA signature size for a given curve bit size
602  *
603  * \param curve_bits    Curve size in bits.
604  * \return              Signature size in bytes.
605  *
606  * \note This macro returns a compile-time constant if its argument is one.
607  */
608 #define PSA_ECDSA_SIGNATURE_SIZE(curve_bits)    \
609     (PSA_BITS_TO_BYTES(curve_bits) * 2u)
610 
611 /** Sufficient signature buffer size for psa_sign_hash().
612  *
613  * This macro returns a sufficient buffer size for a signature using a key
614  * of the specified type and size, with the specified algorithm.
615  * Note that the actual size of the signature may be smaller
616  * (some algorithms produce a variable-size signature).
617  *
618  * \warning This function may call its arguments multiple times or
619  *          zero times, so you should not pass arguments that contain
620  *          side effects.
621  *
622  * \param key_type  An asymmetric key type (this may indifferently be a
623  *                  key pair type or a public key type).
624  * \param key_bits  The size of the key in bits.
625  * \param alg       The signature algorithm.
626  *
627  * \return If the parameters are valid and supported, return
628  *         a buffer size in bytes that guarantees that
629  *         psa_sign_hash() will not fail with
630  *         #PSA_ERROR_BUFFER_TOO_SMALL.
631  *         If the parameters are a valid combination that is not supported,
632  *         return either a sensible size or 0.
633  *         If the parameters are not valid, the
634  *         return value is unspecified.
635  */
636 #define PSA_SIGN_OUTPUT_SIZE(key_type, key_bits, alg)        \
637     (PSA_KEY_TYPE_IS_RSA(key_type) ? ((void) alg, PSA_BITS_TO_BYTES(key_bits)) : \
638      PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_ECDSA_SIGNATURE_SIZE(key_bits) : \
639      ((void) alg, 0u))
640 
641 #define PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE     \
642     PSA_ECDSA_SIGNATURE_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS)
643 
644 /** \def PSA_SIGNATURE_MAX_SIZE
645  *
646  * Maximum size of an asymmetric signature.
647  *
648  * This macro expands to a compile-time constant integer. This value
649  * is the maximum size of a signature in bytes.
650  */
651 #define PSA_SIGNATURE_MAX_SIZE      1
652 
653 #if (defined(PSA_WANT_ALG_ECDSA) || defined(PSA_WANT_ALG_DETERMINISTIC_ECDSA)) && \
654     (PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE > PSA_SIGNATURE_MAX_SIZE)
655 #undef PSA_SIGNATURE_MAX_SIZE
656 #define PSA_SIGNATURE_MAX_SIZE      PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE
657 #endif
658 #if (defined(PSA_WANT_ALG_RSA_PKCS1V15_SIGN) || defined(PSA_WANT_ALG_RSA_PSS)) && \
659     (PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS) > PSA_SIGNATURE_MAX_SIZE)
660 #undef PSA_SIGNATURE_MAX_SIZE
661 #define PSA_SIGNATURE_MAX_SIZE      PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS)
662 #endif
663 
664 /** Sufficient output buffer size for psa_asymmetric_encrypt().
665  *
666  * This macro returns a sufficient buffer size for a ciphertext produced using
667  * a key of the specified type and size, with the specified algorithm.
668  * Note that the actual size of the ciphertext may be smaller, depending
669  * on the algorithm.
670  *
671  * \warning This function may call its arguments multiple times or
672  *          zero times, so you should not pass arguments that contain
673  *          side effects.
674  *
675  * \param key_type  An asymmetric key type (this may indifferently be a
676  *                  key pair type or a public key type).
677  * \param key_bits  The size of the key in bits.
678  * \param alg       The asymmetric encryption algorithm.
679  *
680  * \return If the parameters are valid and supported, return
681  *         a buffer size in bytes that guarantees that
682  *         psa_asymmetric_encrypt() will not fail with
683  *         #PSA_ERROR_BUFFER_TOO_SMALL.
684  *         If the parameters are a valid combination that is not supported,
685  *         return either a sensible size or 0.
686  *         If the parameters are not valid, the
687  *         return value is unspecified.
688  */
689 #define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg)     \
690     (PSA_KEY_TYPE_IS_RSA(key_type) ?                                    \
691      ((void) alg, PSA_BITS_TO_BYTES(key_bits)) :                         \
692      0u)
693 
694 /** A sufficient output buffer size for psa_asymmetric_encrypt(), for any
695  *  supported asymmetric encryption.
696  *
697  * See also #PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(\p key_type, \p key_bits, \p alg).
698  */
699 /* This macro assumes that RSA is the only supported asymmetric encryption. */
700 #define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE          \
701     (PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS))
702 
703 /** Sufficient output buffer size for psa_asymmetric_decrypt().
704  *
705  * This macro returns a sufficient buffer size for a plaintext produced using
706  * a key of the specified type and size, with the specified algorithm.
707  * Note that the actual size of the plaintext may be smaller, depending
708  * on the algorithm.
709  *
710  * \warning This function may call its arguments multiple times or
711  *          zero times, so you should not pass arguments that contain
712  *          side effects.
713  *
714  * \param key_type  An asymmetric key type (this may indifferently be a
715  *                  key pair type or a public key type).
716  * \param key_bits  The size of the key in bits.
717  * \param alg       The asymmetric encryption algorithm.
718  *
719  * \return If the parameters are valid and supported, return
720  *         a buffer size in bytes that guarantees that
721  *         psa_asymmetric_decrypt() will not fail with
722  *         #PSA_ERROR_BUFFER_TOO_SMALL.
723  *         If the parameters are a valid combination that is not supported,
724  *         return either a sensible size or 0.
725  *         If the parameters are not valid, the
726  *         return value is unspecified.
727  */
728 #define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg)     \
729     (PSA_KEY_TYPE_IS_RSA(key_type) ?                                    \
730      PSA_BITS_TO_BYTES(key_bits) - PSA_RSA_MINIMUM_PADDING_SIZE(alg) :  \
731      0u)
732 
733 /** A sufficient output buffer size for psa_asymmetric_decrypt(), for any
734  *  supported asymmetric decryption.
735  *
736  * This macro assumes that RSA is the only supported asymmetric encryption.
737  *
738  * See also #PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(\p key_type, \p key_bits, \p alg).
739  */
740 #define PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE          \
741     (PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS))
742 
743 /* Maximum size of the ASN.1 encoding of an INTEGER with the specified
744  * number of bits.
745  *
746  * This definition assumes that bits <= 2^19 - 9 so that the length field
747  * is at most 3 bytes. The length of the encoding is the length of the
748  * bit string padded to a whole number of bytes plus:
749  * - 1 type byte;
750  * - 1 to 3 length bytes;
751  * - 0 to 1 bytes of leading 0 due to the sign bit.
752  */
753 #define PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(bits)      \
754     ((bits) / 8u + 5u)
755 
756 /* Maximum size of the export encoding of an RSA public key.
757  * Assumes that the public exponent is less than 2^32.
758  *
759  * RSAPublicKey  ::=  SEQUENCE  {
760  *    modulus            INTEGER,    -- n
761  *    publicExponent     INTEGER  }  -- e
762  *
763  * - 4 bytes of SEQUENCE overhead;
764  * - n : INTEGER;
765  * - 7 bytes for the public exponent.
766  */
767 #define PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits)        \
768     (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) + 11u)
769 
770 /* Maximum size of the export encoding of an RSA key pair.
771  * Assumes that the public exponent is less than 2^32 and that the size
772  * difference between the two primes is at most 1 bit.
773  *
774  * RSAPrivateKey ::= SEQUENCE {
775  *     version           Version,  -- 0
776  *     modulus           INTEGER,  -- N-bit
777  *     publicExponent    INTEGER,  -- 32-bit
778  *     privateExponent   INTEGER,  -- N-bit
779  *     prime1            INTEGER,  -- N/2-bit
780  *     prime2            INTEGER,  -- N/2-bit
781  *     exponent1         INTEGER,  -- N/2-bit
782  *     exponent2         INTEGER,  -- N/2-bit
783  *     coefficient       INTEGER,  -- N/2-bit
784  * }
785  *
786  * - 4 bytes of SEQUENCE overhead;
787  * - 3 bytes of version;
788  * - 7 half-size INTEGERs plus 2 full-size INTEGERs,
789  *   overapproximated as 9 half-size INTEGERS;
790  * - 7 bytes for the public exponent.
791  */
792 #define PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(key_bits)   \
793     (9u * PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE((key_bits) / 2u + 1u) + 14u)
794 
795 /* Maximum size of the export encoding of a DSA public key.
796  *
797  * SubjectPublicKeyInfo  ::=  SEQUENCE  {
798  *      algorithm            AlgorithmIdentifier,
799  *      subjectPublicKey     BIT STRING  } -- contains DSAPublicKey
800  * AlgorithmIdentifier  ::=  SEQUENCE  {
801  *      algorithm               OBJECT IDENTIFIER,
802  *      parameters              Dss-Params  } -- SEQUENCE of 3 INTEGERs
803  * DSAPublicKey  ::=  INTEGER -- public key, Y
804  *
805  * - 3 * 4 bytes of SEQUENCE overhead;
806  * - 1 + 1 + 7 bytes of algorithm (DSA OID);
807  * - 4 bytes of BIT STRING overhead;
808  * - 3 full-size INTEGERs (p, g, y);
809  * - 1 + 1 + 32 bytes for 1 sub-size INTEGER (q <= 256 bits).
810  */
811 #define PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits)        \
812     (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3u + 59u)
813 
814 /* Maximum size of the export encoding of a DSA key pair.
815  *
816  * DSAPrivateKey ::= SEQUENCE {
817  *     version             Version,  -- 0
818  *     prime               INTEGER,  -- p
819  *     subprime            INTEGER,  -- q
820  *     generator           INTEGER,  -- g
821  *     public              INTEGER,  -- y
822  *     private             INTEGER,  -- x
823  * }
824  *
825  * - 4 bytes of SEQUENCE overhead;
826  * - 3 bytes of version;
827  * - 3 full-size INTEGERs (p, g, y);
828  * - 2 * (1 + 1 + 32) bytes for 2 sub-size INTEGERs (q, x <= 256 bits).
829  */
830 #define PSA_KEY_EXPORT_DSA_KEY_PAIR_MAX_SIZE(key_bits)   \
831     (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3u + 75u)
832 
833 /* Maximum size of the export encoding of an ECC public key.
834  *
835  * The representation of an ECC public key is:
836  *      - The byte 0x04;
837  *      - `x_P` as a `ceiling(m/8)`-byte string, big-endian;
838  *      - `y_P` as a `ceiling(m/8)`-byte string, big-endian;
839  *      - where m is the bit size associated with the curve.
840  *
841  * - 1 byte + 2 * point size.
842  */
843 #define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits)        \
844     (2u * PSA_BITS_TO_BYTES(key_bits) + 1u)
845 
846 /* Maximum size of the export encoding of an ECC key pair.
847  *
848  * An ECC key pair is represented by the secret value.
849  */
850 #define PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(key_bits)   \
851     (PSA_BITS_TO_BYTES(key_bits))
852 
853 /* Maximum size of the export encoding of an DH key pair.
854  *
855  * An DH key pair is represented by the secret value.
856  */
857 #define PSA_KEY_EXPORT_FFDH_KEY_PAIR_MAX_SIZE(key_bits)   \
858     (PSA_BITS_TO_BYTES(key_bits))
859 
860 /* Maximum size of the export encoding of an DH public key.
861  */
862 #define PSA_KEY_EXPORT_FFDH_PUBLIC_KEY_MAX_SIZE(key_bits)   \
863     (PSA_BITS_TO_BYTES(key_bits))
864 
865 /** Sufficient output buffer size for psa_export_key() or
866  * psa_export_public_key().
867  *
868  * This macro returns a compile-time constant if its arguments are
869  * compile-time constants.
870  *
871  * \warning This macro may evaluate its arguments multiple times or
872  *          zero times, so you should not pass arguments that contain
873  *          side effects.
874  *
875  * The following code illustrates how to allocate enough memory to export
876  * a key by querying the key type and size at runtime.
877  * \code{c}
878  * psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
879  * psa_status_t status;
880  * status = psa_get_key_attributes(key, &attributes);
881  * if (status != PSA_SUCCESS) handle_error(...);
882  * psa_key_type_t key_type = psa_get_key_type(&attributes);
883  * size_t key_bits = psa_get_key_bits(&attributes);
884  * size_t buffer_size = PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits);
885  * psa_reset_key_attributes(&attributes);
886  * uint8_t *buffer = malloc(buffer_size);
887  * if (buffer == NULL) handle_error(...);
888  * size_t buffer_length;
889  * status = psa_export_key(key, buffer, buffer_size, &buffer_length);
890  * if (status != PSA_SUCCESS) handle_error(...);
891  * \endcode
892  *
893  * \param key_type  A supported key type.
894  * \param key_bits  The size of the key in bits.
895  *
896  * \return If the parameters are valid and supported, return
897  *         a buffer size in bytes that guarantees that
898  *         psa_export_key() or psa_export_public_key() will not fail with
899  *         #PSA_ERROR_BUFFER_TOO_SMALL.
900  *         If the parameters are a valid combination that is not supported,
901  *         return either a sensible size or 0.
902  *         If the parameters are not valid, the return value is unspecified.
903  */
904 #define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits)                                              \
905     (PSA_KEY_TYPE_IS_UNSTRUCTURED(key_type) ? PSA_BITS_TO_BYTES(key_bits) :                         \
906      PSA_KEY_TYPE_IS_DH(key_type) ? PSA_BITS_TO_BYTES(key_bits) :                                   \
907      (key_type) == PSA_KEY_TYPE_RSA_KEY_PAIR ? PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(key_bits) :     \
908      (key_type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY ? PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \
909      (key_type) == PSA_KEY_TYPE_DSA_KEY_PAIR ? PSA_KEY_EXPORT_DSA_KEY_PAIR_MAX_SIZE(key_bits) :     \
910      (key_type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY ? PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \
911      PSA_KEY_TYPE_IS_ECC_KEY_PAIR(key_type) ? PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(key_bits) :      \
912      PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) :  \
913      0u)
914 
915 /** Sufficient output buffer size for psa_export_public_key().
916  *
917  * This macro returns a compile-time constant if its arguments are
918  * compile-time constants.
919  *
920  * \warning This macro may evaluate its arguments multiple times or
921  *          zero times, so you should not pass arguments that contain
922  *          side effects.
923  *
924  * The following code illustrates how to allocate enough memory to export
925  * a public key by querying the key type and size at runtime.
926  * \code{c}
927  * psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
928  * psa_status_t status;
929  * status = psa_get_key_attributes(key, &attributes);
930  * if (status != PSA_SUCCESS) handle_error(...);
931  * psa_key_type_t key_type = psa_get_key_type(&attributes);
932  * size_t key_bits = psa_get_key_bits(&attributes);
933  * size_t buffer_size = PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits);
934  * psa_reset_key_attributes(&attributes);
935  * uint8_t *buffer = malloc(buffer_size);
936  * if (buffer == NULL) handle_error(...);
937  * size_t buffer_length;
938  * status = psa_export_public_key(key, buffer, buffer_size, &buffer_length);
939  * if (status != PSA_SUCCESS) handle_error(...);
940  * \endcode
941  *
942  * \param key_type      A public key or key pair key type.
943  * \param key_bits      The size of the key in bits.
944  *
945  * \return              If the parameters are valid and supported, return
946  *                      a buffer size in bytes that guarantees that
947  *                      psa_export_public_key() will not fail with
948  *                      #PSA_ERROR_BUFFER_TOO_SMALL.
949  *                      If the parameters are a valid combination that is not
950  *                      supported, return either a sensible size or 0.
951  *                      If the parameters are not valid,
952  *                      the return value is unspecified.
953  *
954  *                      If the parameters are valid and supported,
955  *                      return the same result as
956  *                      #PSA_EXPORT_KEY_OUTPUT_SIZE(
957  *                          \p #PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(\p key_type),
958  *                          \p key_bits).
959  */
960 #define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits)                           \
961     (PSA_KEY_TYPE_IS_RSA(key_type) ? PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \
962      PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) : \
963      PSA_KEY_TYPE_IS_DH(key_type) ? PSA_BITS_TO_BYTES(key_bits) : \
964      0u)
965 
966 /** Sufficient buffer size for exporting any asymmetric key pair.
967  *
968  * This macro expands to a compile-time constant integer. This value is
969  * a sufficient buffer size when calling psa_export_key() to export any
970  * asymmetric key pair, regardless of the exact key type and key size.
971  *
972  * See also #PSA_EXPORT_KEY_OUTPUT_SIZE(\p key_type, \p key_bits).
973  */
974 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE            1
975 
976 #if defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC) && \
977     (PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS) > \
978      PSA_EXPORT_KEY_PAIR_MAX_SIZE)
979 #undef PSA_EXPORT_KEY_PAIR_MAX_SIZE
980 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE    \
981     PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS)
982 #endif
983 #if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_BASIC) && \
984     (PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS) > \
985      PSA_EXPORT_KEY_PAIR_MAX_SIZE)
986 #undef PSA_EXPORT_KEY_PAIR_MAX_SIZE
987 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE    \
988     PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS)
989 #endif
990 #if defined(PSA_WANT_KEY_TYPE_DH_KEY_PAIR_BASIC) && \
991     (PSA_KEY_EXPORT_FFDH_KEY_PAIR_MAX_SIZE(PSA_VENDOR_FFDH_MAX_KEY_BITS) > \
992      PSA_EXPORT_KEY_PAIR_MAX_SIZE)
993 #undef PSA_EXPORT_KEY_PAIR_MAX_SIZE
994 #define PSA_EXPORT_KEY_PAIR_MAX_SIZE    \
995     PSA_KEY_EXPORT_FFDH_KEY_PAIR_MAX_SIZE(PSA_VENDOR_FFDH_MAX_KEY_BITS)
996 #endif
997 
998 /** Sufficient buffer size for exporting any asymmetric public key.
999  *
1000  * This macro expands to a compile-time constant integer. This value is
1001  * a sufficient buffer size when calling psa_export_key() or
1002  * psa_export_public_key() to export any asymmetric public key,
1003  * regardless of the exact key type and key size.
1004  *
1005  * See also #PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(\p key_type, \p key_bits).
1006  */
1007 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE            1
1008 
1009 #if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY) && \
1010     (PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS) > \
1011      PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1012 #undef PSA_EXPORT_PUBLIC_KEY_MAX_SIZE
1013 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE    \
1014     PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS)
1015 #endif
1016 #if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) && \
1017     (PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS) > \
1018      PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1019 #undef PSA_EXPORT_PUBLIC_KEY_MAX_SIZE
1020 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE    \
1021     PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS)
1022 #endif
1023 #if defined(PSA_WANT_KEY_TYPE_DH_PUBLIC_KEY) && \
1024     (PSA_KEY_EXPORT_FFDH_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_FFDH_MAX_KEY_BITS) > \
1025      PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1026 #undef PSA_EXPORT_PUBLIC_KEY_MAX_SIZE
1027 #define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE    \
1028     PSA_KEY_EXPORT_FFDH_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_FFDH_MAX_KEY_BITS)
1029 #endif
1030 
1031 /** Sufficient output buffer size for psa_raw_key_agreement().
1032  *
1033  * This macro returns a compile-time constant if its arguments are
1034  * compile-time constants.
1035  *
1036  * \warning This macro may evaluate its arguments multiple times or
1037  *          zero times, so you should not pass arguments that contain
1038  *          side effects.
1039  *
1040  * See also #PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE.
1041  *
1042  * \param key_type      A supported key type.
1043  * \param key_bits      The size of the key in bits.
1044  *
1045  * \return              If the parameters are valid and supported, return
1046  *                      a buffer size in bytes that guarantees that
1047  *                      psa_raw_key_agreement() will not fail with
1048  *                      #PSA_ERROR_BUFFER_TOO_SMALL.
1049  *                      If the parameters are a valid combination that
1050  *                      is not supported, return either a sensible size or 0.
1051  *                      If the parameters are not valid,
1052  *                      the return value is unspecified.
1053  */
1054 #define PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE(key_type, key_bits)   \
1055     ((PSA_KEY_TYPE_IS_ECC_KEY_PAIR(key_type) || \
1056       PSA_KEY_TYPE_IS_DH_KEY_PAIR(key_type)) ? PSA_BITS_TO_BYTES(key_bits) : 0u)
1057 
1058 /** Maximum size of the output from psa_raw_key_agreement().
1059  *
1060  * This macro expands to a compile-time constant integer. This value is the
1061  * maximum size of the output any raw key agreement algorithm, in bytes.
1062  *
1063  * See also #PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE(\p key_type, \p key_bits).
1064  */
1065 #define PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE       1
1066 
1067 #if defined(PSA_WANT_ALG_ECDH) && \
1068     (PSA_BITS_TO_BYTES(PSA_VENDOR_ECC_MAX_CURVE_BITS) > PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE)
1069 #undef PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE
1070 #define PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE    PSA_BITS_TO_BYTES(PSA_VENDOR_ECC_MAX_CURVE_BITS)
1071 #endif
1072 #if defined(PSA_WANT_ALG_FFDH) && \
1073     (PSA_BITS_TO_BYTES(PSA_VENDOR_FFDH_MAX_KEY_BITS) > PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE)
1074 #undef PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE
1075 #define PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE    PSA_BITS_TO_BYTES(PSA_VENDOR_FFDH_MAX_KEY_BITS)
1076 #endif
1077 
1078 /** The default IV size for a cipher algorithm, in bytes.
1079  *
1080  * The IV that is generated as part of a call to #psa_cipher_encrypt() is always
1081  * the default IV length for the algorithm.
1082  *
1083  * This macro can be used to allocate a buffer of sufficient size to
1084  * store the IV output from #psa_cipher_generate_iv() when using
1085  * a multi-part cipher operation.
1086  *
1087  * See also #PSA_CIPHER_IV_MAX_SIZE.
1088  *
1089  * \warning This macro may evaluate its arguments multiple times or
1090  *          zero times, so you should not pass arguments that contain
1091  *          side effects.
1092  *
1093  * \param key_type  A symmetric key type that is compatible with algorithm \p alg.
1094  *
1095  * \param alg       A cipher algorithm (\c PSA_ALG_XXX value such that #PSA_ALG_IS_CIPHER(\p alg) is true).
1096  *
1097  * \return The default IV size for the specified key type and algorithm.
1098  *         If the algorithm does not use an IV, return 0.
1099  *         If the key type or cipher algorithm is not recognized,
1100  *         or the parameters are incompatible, return 0.
1101  */
1102 #define PSA_CIPHER_IV_LENGTH(key_type, alg) \
1103     (PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) > 1 && \
1104      ((alg) == PSA_ALG_CTR || \
1105       (alg) == PSA_ALG_CFB || \
1106       (alg) == PSA_ALG_OFB || \
1107       (alg) == PSA_ALG_XTS || \
1108       (alg) == PSA_ALG_CBC_NO_PADDING || \
1109       (alg) == PSA_ALG_CBC_PKCS7) ? PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \
1110      (key_type) == PSA_KEY_TYPE_CHACHA20 && \
1111      (alg) == PSA_ALG_STREAM_CIPHER ? 12u : \
1112      (alg) == PSA_ALG_CCM_STAR_NO_TAG ? 13u : \
1113      0u)
1114 
1115 /** The maximum IV size for all supported cipher algorithms, in bytes.
1116  *
1117  * See also #PSA_CIPHER_IV_LENGTH().
1118  */
1119 #define PSA_CIPHER_IV_MAX_SIZE 16u
1120 
1121 /** The maximum size of the output of psa_cipher_encrypt(), in bytes.
1122  *
1123  * If the size of the output buffer is at least this large, it is guaranteed
1124  * that psa_cipher_encrypt() will not fail due to an insufficient buffer size.
1125  * Depending on the algorithm, the actual size of the output might be smaller.
1126  *
1127  * See also #PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(\p input_length).
1128  *
1129  * \warning This macro may evaluate its arguments multiple times or
1130  *          zero times, so you should not pass arguments that contain
1131  *          side effects.
1132  *
1133  * \param key_type      A symmetric key type that is compatible with algorithm
1134  *                      alg.
1135  * \param alg           A cipher algorithm (\c PSA_ALG_XXX value such that
1136  *                      #PSA_ALG_IS_CIPHER(\p alg) is true).
1137  * \param input_length  Size of the input in bytes.
1138  *
1139  * \return              A sufficient output size for the specified key type and
1140  *                      algorithm. If the key type or cipher algorithm is not
1141  *                      recognized, or the parameters are incompatible,
1142  *                      return 0.
1143  */
1144 #define PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(key_type, alg, input_length)     \
1145     (alg == PSA_ALG_CBC_PKCS7 ?                                         \
1146      (PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) != 0 ?                    \
1147       PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type), \
1148                                (input_length) + 1u) +                   \
1149       PSA_CIPHER_IV_LENGTH((key_type), (alg)) : 0u) :                   \
1150      (PSA_ALG_IS_CIPHER(alg) ?                                          \
1151       (input_length) + PSA_CIPHER_IV_LENGTH((key_type), (alg)) :        \
1152       0u))
1153 
1154 /** A sufficient output buffer size for psa_cipher_encrypt(), for any of the
1155  *  supported key types and cipher algorithms.
1156  *
1157  * If the size of the output buffer is at least this large, it is guaranteed
1158  * that psa_cipher_encrypt() will not fail due to an insufficient buffer size.
1159  *
1160  * See also #PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(\p key_type, \p alg, \p input_length).
1161  *
1162  * \param input_length  Size of the input in bytes.
1163  *
1164  */
1165 #define PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(input_length)                \
1166     (PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE,          \
1167                               (input_length) + 1u) +                    \
1168      PSA_CIPHER_IV_MAX_SIZE)
1169 
1170 /** The maximum size of the output of psa_cipher_decrypt(), in bytes.
1171  *
1172  * If the size of the output buffer is at least this large, it is guaranteed
1173  * that psa_cipher_decrypt() will not fail due to an insufficient buffer size.
1174  * Depending on the algorithm, the actual size of the output might be smaller.
1175  *
1176  * See also #PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(\p input_length).
1177  *
1178  * \param key_type      A symmetric key type that is compatible with algorithm
1179  *                      alg.
1180  * \param alg           A cipher algorithm (\c PSA_ALG_XXX value such that
1181  *                      #PSA_ALG_IS_CIPHER(\p alg) is true).
1182  * \param input_length  Size of the input in bytes.
1183  *
1184  * \return              A sufficient output size for the specified key type and
1185  *                      algorithm. If the key type or cipher algorithm is not
1186  *                      recognized, or the parameters are incompatible,
1187  *                      return 0.
1188  */
1189 #define PSA_CIPHER_DECRYPT_OUTPUT_SIZE(key_type, alg, input_length)     \
1190     (PSA_ALG_IS_CIPHER(alg) &&                                          \
1191      ((key_type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_SYMMETRIC ? \
1192      (input_length) :                                                   \
1193      0u)
1194 
1195 /** A sufficient output buffer size for psa_cipher_decrypt(), for any of the
1196  *  supported key types and cipher algorithms.
1197  *
1198  * If the size of the output buffer is at least this large, it is guaranteed
1199  * that psa_cipher_decrypt() will not fail due to an insufficient buffer size.
1200  *
1201  * See also #PSA_CIPHER_DECRYPT_OUTPUT_SIZE(\p key_type, \p alg, \p input_length).
1202  *
1203  * \param input_length  Size of the input in bytes.
1204  */
1205 #define PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(input_length)    \
1206     (input_length)
1207 
1208 /** A sufficient output buffer size for psa_cipher_update().
1209  *
1210  * If the size of the output buffer is at least this large, it is guaranteed
1211  * that psa_cipher_update() will not fail due to an insufficient buffer size.
1212  * The actual size of the output might be smaller in any given call.
1213  *
1214  * See also #PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(\p input_length).
1215  *
1216  * \param key_type      A symmetric key type that is compatible with algorithm
1217  *                      alg.
1218  * \param alg           A cipher algorithm (PSA_ALG_XXX value such that
1219  *                      #PSA_ALG_IS_CIPHER(\p alg) is true).
1220  * \param input_length  Size of the input in bytes.
1221  *
1222  * \return              A sufficient output size for the specified key type and
1223  *                      algorithm. If the key type or cipher algorithm is not
1224  *                      recognized, or the parameters are incompatible, return 0.
1225  */
1226 #define PSA_CIPHER_UPDATE_OUTPUT_SIZE(key_type, alg, input_length)      \
1227     (PSA_ALG_IS_CIPHER(alg) ?                                           \
1228      (PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) != 0 ?                    \
1229       (((alg) == PSA_ALG_CBC_PKCS7      ||                              \
1230         (alg) == PSA_ALG_CBC_NO_PADDING ||                              \
1231         (alg) == PSA_ALG_ECB_NO_PADDING) ?                              \
1232        PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type), \
1233                                 input_length) :                         \
1234        (input_length)) : 0u) :                                          \
1235      0u)
1236 
1237 /** A sufficient output buffer size for psa_cipher_update(), for any of the
1238  *  supported key types and cipher algorithms.
1239  *
1240  * If the size of the output buffer is at least this large, it is guaranteed
1241  * that psa_cipher_update() will not fail due to an insufficient buffer size.
1242  *
1243  * See also #PSA_CIPHER_UPDATE_OUTPUT_SIZE(\p key_type, \p alg, \p input_length).
1244  *
1245  * \param input_length  Size of the input in bytes.
1246  */
1247 #define PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(input_length)     \
1248     (PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE, input_length))
1249 
1250 /** A sufficient ciphertext buffer size for psa_cipher_finish().
1251  *
1252  * If the size of the ciphertext buffer is at least this large, it is
1253  * guaranteed that psa_cipher_finish() will not fail due to an insufficient
1254  * ciphertext buffer size. The actual size of the output might be smaller in
1255  * any given call.
1256  *
1257  * See also #PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE().
1258  *
1259  * \param key_type      A symmetric key type that is compatible with algorithm
1260  *                      alg.
1261  * \param alg           A cipher algorithm (PSA_ALG_XXX value such that
1262  *                      #PSA_ALG_IS_CIPHER(\p alg) is true).
1263  * \return              A sufficient output size for the specified key type and
1264  *                      algorithm. If the key type or cipher algorithm is not
1265  *                      recognized, or the parameters are incompatible, return 0.
1266  */
1267 #define PSA_CIPHER_FINISH_OUTPUT_SIZE(key_type, alg)    \
1268     (PSA_ALG_IS_CIPHER(alg) ?                           \
1269      (alg == PSA_ALG_CBC_PKCS7 ?                        \
1270       PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) :         \
1271       0u) :                                             \
1272      0u)
1273 
1274 /** A sufficient ciphertext buffer size for psa_cipher_finish(), for any of the
1275  *  supported key types and cipher algorithms.
1276  *
1277  * See also #PSA_CIPHER_FINISH_OUTPUT_SIZE(\p key_type, \p alg).
1278  */
1279 #define PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE           \
1280     (PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE)
1281 
1282 #endif /* PSA_CRYPTO_SIZES_H */
1283