Toggle navigation
Documentation
The friendly Operating System for the Internet of Things
crypto_sizes.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2021 HAW Hamburg
3
*
4
* This file is subject to the terms and conditions of the GNU Lesser
5
* General Public License v2.1. See the file LICENSE in the top level
6
* directory for more details.
7
*/
8
25
#ifndef PSA_CRYPTO_PSA_CRYPTO_SIZES_H
26
#define PSA_CRYPTO_PSA_CRYPTO_SIZES_H
27
28
#ifdef __cplusplus
29
extern
"C"
{
30
#endif
31
32
#include "
kernel_defines.h
"
33
#include "
crypto_values.h
"
34
42
#define PSA_BITS_TO_BYTES(bits) (size_t)(((bits) + 7) / 8)
43
51
#define PSA_BYTES_TO_BITS(bytes) ((bytes) * 8)
52
60
#if (IS_USED(MODULE_PSA_MAC_HMAC_SHA_256))
61
#define CONFIG_PSA_MAX_KEY_SIZE 64
62
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
63
IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519) || \
64
IS_USED(MODULE_PSA_CIPHER_AES_256_CBC) || \
65
IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256) || \
66
IS_USED(MODULE_PSA_CIPHER_CHACHA20))
67
#define CONFIG_PSA_MAX_KEY_SIZE 32
68
#elif (IS_USED(MODULE_PSA_CIPHER_AES_192_CBC) || \
69
IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
70
#define CONFIG_PSA_MAX_KEY_SIZE 24
71
#elif (IS_USED(MODULE_PSA_CIPHER_AES_128_CBC)) || \
72
(IS_USED(MODULE_PSA_CIPHER_AES_128_ECB))
73
#define CONFIG_PSA_MAX_KEY_SIZE 16
74
#else
75
#define CONFIG_PSA_MAX_KEY_SIZE 0
76
#endif
77
84
#ifndef CONFIG_PSA_ASYMMETRIC_KEYPAIR_COUNT
85
#define CONFIG_PSA_ASYMMETRIC_KEYPAIR_COUNT 0
86
#endif
87
94
#ifndef CONFIG_PSA_SINGLE_KEY_COUNT
95
#define CONFIG_PSA_SINGLE_KEY_COUNT 0
96
#endif
97
104
#ifndef CONFIG_PSA_PROTECTED_KEY_COUNT
105
#if (IS_USED(MODULE_PSA_SECURE_ELEMENT))
106
#define CONFIG_PSA_PROTECTED_KEY_COUNT 5
107
#else
108
#define CONFIG_PSA_PROTECTED_KEY_COUNT 0
109
#endif
110
#endif
111
124
#define PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE(ciphertext_length) \
125
/* implementation-defined value */
126
145
#define PSA_AEAD_DECRYPT_OUTPUT_SIZE(key_type, alg, ciphertext_length) \
146
/* implementation-defined value */
147
160
#define PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE(plaintext_length) \
161
/* implementation-defined value */
162
181
#define PSA_AEAD_ENCRYPT_OUTPUT_SIZE(key_type, alg, plaintext_length) \
182
/* implementation-defined value */
183
193
#define PSA_AEAD_FINISH_OUTPUT_MAX_SIZE
/* implementation-defined value */
194
213
#define PSA_AEAD_FINISH_OUTPUT_SIZE(key_type, alg) \
214
/* implementation-defined value */
215
235
#define PSA_AEAD_NONCE_LENGTH(key_type, alg)
/* implementation-defined value */
236
246
#define PSA_AEAD_NONCE_MAX_SIZE
/* implementation-defined value */
247
267
#define PSA_AEAD_TAG_LENGTH(key_type, key_bits, alg) \
268
/* implementation-defined value */
269
279
#define PSA_AEAD_TAG_MAX_SIZE
/* implementation-defined value */
280
292
#define PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(input_length) \
293
/* implementation-defined value */
294
313
#define PSA_AEAD_UPDATE_OUTPUT_SIZE(key_type, alg, input_length) \
314
/* implementation-defined value */
315
327
#define PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE
/* implementation-defined value */
328
346
#define PSA_AEAD_VERIFY_OUTPUT_SIZE(key_type, alg) \
347
/* implementation-defined value */
348
354
#define PSA_HASH_MAX_SIZE (64)
355
361
#if (IS_USED(MODULE_PSA_HASH_SHA3_256))
362
#define PSA_HASH_MAX_BLOCK_SIZE 136
363
#elif (IS_USED(MODULE_PSA_HASH_SHA_512) || \
364
IS_USED(MODULE_PSA_HASH_SHA_384) || \
365
IS_USED(MODULE_PSA_HASH_SHA_512_224) || \
366
IS_USED(MODULE_PSA_HASH_SHA_512_256))
367
#define PSA_HASH_MAX_BLOCK_SIZE 128
368
#elif (IS_USED(MODULE_PSA_HASH_SHA3_384))
369
#define PSA_HASH_MAX_BLOCK_SIZE 104
370
#elif (IS_USED(MODULE_PSA_HASH_SHA3_512))
371
#define PSA_HASH_MAX_BLOCK_SIZE 72
372
#elif (IS_USED(MODULE_PSA_HASH_MD5) || \
373
IS_USED(MODULE_PSA_HASH_SHA_1) || \
374
IS_USED(MODULE_PSA_HASH_SHA_224) || \
375
IS_USED(MODULE_PSA_HASH_SHA_256))
376
#define PSA_HASH_MAX_BLOCK_SIZE 64
377
#else
378
#define PSA_HASH_MAX_BLOCK_SIZE 0
379
#endif
380
397
#define PSA_HASH_BLOCK_LENGTH(alg) \
398
( \
399
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 : \
400
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 64 : \
401
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 64 : \
402
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 64 : \
403
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 64 : \
404
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 64 : \
405
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 64 : \
406
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 128 : \
407
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 128 : \
408
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 128 : \
409
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 128 : \
410
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 144 : \
411
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 136 : \
412
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 104 : \
413
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 72 : \
414
0)
415
430
#define PSA_HASH_LENGTH(alg) \
431
( \
432
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 : \
433
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 16 : \
434
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16 : \
435
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 : \
436
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20 : \
437
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 28 : \
438
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 32 : \
439
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 48 : \
440
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 64 : \
441
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 28 : \
442
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 32 : \
443
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 28 : \
444
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 32 : \
445
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 48 : \
446
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 64 : \
447
0)
448
471
#define PSA_MAC_LENGTH(key_type, key_bits, alg) \
472
((PSA_ALG_IS_HMAC(alg)) ? PSA_HASH_LENGTH(PSA_ALG_HMAC_GET_HASH(alg)) : \
473
PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) ? PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \
474
((void)(key_type), (void)(key_bits), 0))
475
486
#if (IS_USED(MODULE_PSA_MAC_HMAC_SHA_512) || \
487
IS_USED(MODULE_PSA_MAC_HMAC_SHA3_512))
488
#define PSA_MAC_MAX_SIZE (PSA_HASH_LENGTH(PSA_ALG_SHA3_512))
/* 64 */
489
#elif (IS_USED(MODULE_PSA_MAC_HMAC_SHA_384) || \
490
IS_USED(MODULE_PSA_MAC_HMAC_SHA3_384))
491
#define PSA_MAC_MAX_SIZE (PSA_HASH_LENGTH(PSA_ALG_SHA3_384))
/* 48 */
492
#elif (IS_USED(MODULE_PSA_MAC_HMAC_SHA_256) || \
493
IS_USED(MODULE_PSA_MAC_HMAC_SHA_512_256) || \
494
IS_USED(MODULE_PSA_MAC_HMAC_SHA3_256))
495
#define PSA_MAC_MAX_SIZE (PSA_HASH_LENGTH(PSA_ALG_SHA3_256))
/* 32 */
496
#elif (IS_USED(MODULE_PSA_MAC_HMAC_SHA_224) || \
497
IS_USED(MODULE_PSA_MAC_HMAC_SHA_512_224) || \
498
IS_USED(MODULE_PSA_MAC_HMAC_SHA3_224))
499
#define PSA_MAC_MAX_SIZE (PSA_HASH_LENGTH(PSA_ALG_SHA3_224))
/* 28 */
500
#elif (IS_USED(MODULE_PSA_MAC_HMAC_RIPEMD160) || \
501
IS_USED(MODULE_PSA_MAC_HMAC_SHA_1))
502
#define PSA_MAC_MAX_SIZE (PSA_HASH_LENGTH(PSA_ALG_SHA_1))
/* 20 */
503
#elif (IS_USED(MODULE_PSA_MAC_HMAC_MD2) || \
504
IS_USED(MODULE_PSA_MAC_HMAC_MD4) || \
505
IS_USED(MODULE_PSA_MAC_HMAC_MD5))
506
#define PSA_MAC_MAX_SIZE (PSA_HASH_LENGTH(PSA_ALG_MD5))
/* 16 */
507
#else
508
#define PSA_MAC_MAX_SIZE 0
509
#endif
510
523
#define PSA_BLOCK_CIPHER_BLOCK_LENGTH(type) \
524
(1u << (((type) >> 8) & 7))
525
531
#define PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE
/* implementation-defined value */
532
544
#define PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(input_length) \
545
(input_length)
546
565
#define PSA_CIPHER_DECRYPT_OUTPUT_SIZE(key_type, alg, input_length) \
566
(input_length - PSA_CIPHER_IV_LENGTH(key_type, alg))
567
579
#define PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(input_length) \
580
(PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(PSA_KEY_TYPE_AES, PSA_ALG_CBC_NO_PADDING, input_length))
581
600
#define PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(key_type, alg, input_length) \
601
(input_length + PSA_CIPHER_IV_LENGTH(key_type, alg))
602
612
#define PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE
/* implementation-defined value */
613
631
#define PSA_CIPHER_FINISH_OUTPUT_SIZE(key_type, alg) \
632
/* implementation-defined value */
633
660
#define PSA_CIPHER_IV_LENGTH(key_type, alg) \
661
((PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) > 1 && \
662
((alg) == PSA_ALG_CBC_NO_PADDING)) ? 16 : \
663
(key_type == PSA_KEY_TYPE_CHACHA20) ? 12 : 0)
664
674
#define PSA_CIPHER_IV_MAX_SIZE
/* implementation-defined value */
675
688
#define PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(input_length) \
689
/* implementation-defined value */
690
710
#define PSA_CIPHER_UPDATE_OUTPUT_SIZE(key_type, alg, input_length) \
711
/* implementation-defined value */
712
720
#define PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH ((size_t)4)
721
736
#define PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH(alg) \
737
/* specification-defined value */
738
753
#define PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH(alg) \
754
/* specification-defined value */
755
765
#define PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE
/* implementation-defined value */
766
791
#define PSA_HASH_SUSPEND_OUTPUT_SIZE(alg)
/* specification-defined value */
792
802
#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE \
803
/* implementation-defined value */
804
824
#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \
825
/* implementation-defined value */
826
836
#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE
/* implementation-defined value */
837
857
#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \
858
/* implementation-defined value */
859
870
#define PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) \
871
(size_t)\
872
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
873
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_SECP_R1 ? \
874
PSA_BITS_TO_BYTES(key_bits) : \
875
0))
876
913
#define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits) \
914
(PSA_KEY_TYPE_IS_PUBLIC_KEY(key_type) ? \
915
PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) : \
916
(PSA_KEY_TYPE_IS_ECC(key_type) ? \
917
PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) : \
918
0))
919
926
#define PSA_ECC_KEY_SIZE_IS_VALID(type, bits) \
927
(PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? \
928
(bits == 255) : \
929
(PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_SECP_R1 ? \
930
(bits == 128 || \
931
bits == 192 || \
932
bits == 224 || \
933
bits == 256 || \
934
bits == 384) : \
935
0))
936
940
#define PSA_MAX_PRIV_KEY_SIZE (PSA_BYTES_TO_BITS(CONFIG_PSA_MAX_KEY_SIZE))
941
951
#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
952
IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
953
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
954
(PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
955
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
956
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
957
(PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
958
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
959
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
960
(PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
961
#else
962
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE 0
963
#endif
964
977
#define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) \
978
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
979
((size_t)(2 * PSA_BITS_TO_BYTES(key_bits) + 1)))
980
1021
#define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) \
1022
(PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) : \
1023
0)
1024
1035
#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
1036
IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
1037
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
1038
(PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
1039
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
1040
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
1041
(PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
1042
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
1043
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
1044
(PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
1045
#else
1046
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE 0
1047
#endif
1048
1054
#define PSA_MAX_PRIV_KEY_BUFFER_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE))
1055
1059
#define PSA_MAX_ASYMMETRIC_KEYPAIR_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE) + \
1060
PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1061
1065
#if IS_USED(MODULE_PSA_ASYMMETRIC)
1066
#define PSA_MAX_KEY_DATA_SIZE (PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1067
#else
1068
#define PSA_MAX_KEY_DATA_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
1069
#endif
1070
1074
#define PSA_MAX_UNSTRUCTURED_KEY_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
1075
1085
#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits) \
1086
((size_t)(PSA_BITS_TO_BYTES(curve_bits) * 2))
1087
1106
#define PSA_SIGN_OUTPUT_SIZE(key_type, key_bits, alg) \
1107
(PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_ECDSA_SIGNATURE_SIZE(key_bits) : \
1108
((void)alg, 0))
1109
1110
#ifdef __cplusplus
1111
}
1112
#endif
1113
1114
#endif
/* PSA_CRYPTO_PSA_CRYPTO_SIZES_H */
crypto_values.h
Value definitions for PSA Crypto.
kernel_defines.h
Common macros and compiler attributes/pragmas configuration.
Generated on Thu Mar 27 2025 18:20:56 by
1.9.1