Toggle navigation
Documentation
The friendly Operating System for the Internet of Things
Loading...
Searching...
No Matches
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
#ifndef CONFIG_PSA_MAX_KEY_SIZE
61
#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
62
IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519) || \
63
IS_USED(MODULE_PSA_CIPHER_AES_256_CBC) || \
64
IS_USED(MODULE_PSA_MAC_HMAC_SHA_256) || \
65
IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
66
#define CONFIG_PSA_MAX_KEY_SIZE 32
67
#elif (IS_USED(MODULE_PSA_CIPHER_AES_192_CBC) || \
68
IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
69
#define CONFIG_PSA_MAX_KEY_SIZE 24
70
#elif (IS_USED(MODULE_PSA_CIPHER_AES_128_CBC)) || \
71
(IS_USED(MODULE_PSA_CIPHER_AES_128_ECB))
72
#define CONFIG_PSA_MAX_KEY_SIZE 16
73
#else
74
#define CONFIG_PSA_MAX_KEY_SIZE 0
75
#endif
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
372
#define PSA_HASH_BLOCK_LENGTH(alg)
/* implementation-defined value */
373
388
#define PSA_HASH_LENGTH(alg) \
389
( \
390
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 : \
391
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 16 : \
392
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16 : \
393
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 : \
394
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20 : \
395
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 28 : \
396
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 32 : \
397
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 48 : \
398
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 64 : \
399
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 28 : \
400
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 32 : \
401
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 28 : \
402
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 32 : \
403
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 48 : \
404
PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 64 : \
405
0)
406
429
#define PSA_MAC_LENGTH(key_type, key_bits, alg) \
430
((PSA_ALG_IS_HMAC(alg)) ? PSA_HASH_LENGTH(PSA_ALG_HMAC_GET_HASH(alg)) : \
431
PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) ? PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \
432
((void)(key_type), (void)(key_bits), 0))
433
444
#define PSA_MAC_MAX_SIZE (PSA_HASH_MAX_SIZE)
445
458
#define PSA_BLOCK_CIPHER_BLOCK_LENGTH(type) \
459
(1u << (((type) >> 8) & 7))
460
466
#define PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE
/* implementation-defined value */
467
479
#define PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(input_length) \
480
(input_length)
481
500
#define PSA_CIPHER_DECRYPT_OUTPUT_SIZE(key_type, alg, input_length) \
501
(input_length - PSA_CIPHER_IV_LENGTH(key_type, alg))
502
514
#define PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(input_length) \
515
(PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(PSA_KEY_TYPE_AES, PSA_ALG_CBC_NO_PADDING, input_length))
516
535
#define PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(key_type, alg, input_length) \
536
(input_length + PSA_CIPHER_IV_LENGTH(key_type, alg))
537
547
#define PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE
/* implementation-defined value */
548
566
#define PSA_CIPHER_FINISH_OUTPUT_SIZE(key_type, alg) \
567
/* implementation-defined value */
568
595
#define PSA_CIPHER_IV_LENGTH(key_type, alg) \
596
(PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) > 1 && \
597
((alg) == PSA_ALG_CBC_NO_PADDING) ? 16 : 0)
598
608
#define PSA_CIPHER_IV_MAX_SIZE
/* implementation-defined value */
609
622
#define PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(input_length) \
623
/* implementation-defined value */
624
644
#define PSA_CIPHER_UPDATE_OUTPUT_SIZE(key_type, alg, input_length) \
645
/* implementation-defined value */
646
654
#define PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH ((size_t)4)
655
670
#define PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH(alg) \
671
/* specification-defined value */
672
687
#define PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH(alg) \
688
/* specification-defined value */
689
699
#define PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE
/* implementation-defined value */
700
725
#define PSA_HASH_SUSPEND_OUTPUT_SIZE(alg)
/* specification-defined value */
726
736
#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE \
737
/* implementation-defined value */
738
758
#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \
759
/* implementation-defined value */
760
770
#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE
/* implementation-defined value */
771
791
#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \
792
/* implementation-defined value */
793
804
#define PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) \
805
(size_t)\
806
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
807
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_SECP_R1 ? PSA_BITS_TO_BYTES(key_bits) : \
808
0))
809
846
#define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits) \
847
(PSA_KEY_TYPE_IS_PUBLIC_KEY(key_type) ? PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) : \
848
(PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_KEY_MAX_SIZE(key_type, key_bits) : \
849
0))
850
857
#define PSA_ECC_KEY_SIZE_IS_VALID(type, bits) \
858
(PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? \
859
(bits == 255) : \
860
(PSA_KEY_TYPE_ECC_GET_FAMILY(type) == PSA_ECC_FAMILY_SECP_R1 ? \
861
(bits == 128 || \
862
bits == 192 || \
863
bits == 224 || \
864
bits == 256 || \
865
bits == 384) : \
866
0))
867
871
#define PSA_MAX_PRIV_KEY_SIZE (PSA_BYTES_TO_BITS(CONFIG_PSA_MAX_KEY_SIZE))
872
882
#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
883
IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
884
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
885
(PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
886
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
887
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
888
(PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
889
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
890
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \
891
(PSA_EXPORT_KEY_OUTPUT_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
892
#else
893
#define PSA_EXPORT_KEY_PAIR_MAX_SIZE 0
894
#endif
895
908
#define PSA_ECC_KEY_GET_CURVE_FROM_PUBLIC_KEY(key_type, key_bits) \
909
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 255 : \
910
((size_t)((key_bits - 8) / 2)))
911
915
#define PSA_ECC_KEY_GET_CURVE(key_type, key_bits) \
916
(PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(key_type) ? \
917
PSA_ECC_KEY_GET_CURVE_FROM_PUBLIC_KEY(key_type, key_bits) : \
918
(size_t)key_bits)
919
932
#define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) \
933
(PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) == PSA_ECC_FAMILY_TWISTED_EDWARDS ? 32 : \
934
((size_t)(2 * PSA_BITS_TO_BYTES(key_bits) + 1)))
935
976
#define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) \
977
(PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_type, key_bits) : \
978
0)
979
990
#if (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P256R1) || \
991
IS_USED(MODULE_PSA_SECURE_ELEMENT_ATECCX08A_ECC_P256))
992
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
993
(PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 256))
994
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_P192R1))
995
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
996
(PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_SECT_R1, 192))
997
#elif (IS_USED(MODULE_PSA_ASYMMETRIC_ECC_ED25519))
998
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \
999
(PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_ECC_FAMILY_TWISTED_EDWARDS, 255))
1000
#else
1001
#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE 0
1002
#endif
1003
1009
#define PSA_MAX_PRIV_KEY_BUFFER_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE))
1010
1014
#define PSA_MAX_ASYMMETRIC_KEYPAIR_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_PRIV_KEY_SIZE) + \
1015
PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1016
1020
#if IS_USED(MODULE_PSA_ASYMMETRIC)
1021
#define PSA_MAX_KEY_DATA_SIZE (PSA_EXPORT_PUBLIC_KEY_MAX_SIZE)
1022
#else
1023
#define PSA_MAX_KEY_DATA_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
1024
#endif
1025
1029
#define PSA_MAX_UNSTRUCTURED_KEY_SIZE (CONFIG_PSA_MAX_KEY_SIZE)
1030
1040
#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits) \
1041
((size_t)(PSA_BITS_TO_BYTES(curve_bits) * 2))
1042
1061
#define PSA_SIGN_OUTPUT_SIZE(key_type, key_bits, alg) \
1062
(PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_ECDSA_SIGNATURE_SIZE(PSA_ECC_KEY_GET_CURVE(key_type, key_bits)) : \
1063
((void)alg, 0))
1064
1065
#ifdef __cplusplus
1066
}
1067
#endif
1068
1069
#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 Mon May 13 2024 16:38:59 by
1.9.8