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 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #include "kernel_defines.h"
29 #include "psa/hash/algorithm.h"
30 
45 #define PSA_HASH_LENGTH(alg) \
46  ( \
47  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 : \
48  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 16 : \
49  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16 : \
50  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 : \
51  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20 : \
52  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 28 : \
53  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 32 : \
54  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 48 : \
55  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 64 : \
56  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 28 : \
57  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 32 : \
58  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 28 : \
59  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 32 : \
60  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 48 : \
61  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 64 : \
62  0)
63 
69 #define PSA_HASH_MAX_SIZE (64)
70 
76 #if (IS_USED(MODULE_PSA_HASH_SHA3_256))
77 #define PSA_HASH_MAX_BLOCK_SIZE 136
78 #elif (IS_USED(MODULE_PSA_HASH_SHA_512) || \
79  IS_USED(MODULE_PSA_HASH_SHA_384) || \
80  IS_USED(MODULE_PSA_HASH_SHA_512_224) || \
81  IS_USED(MODULE_PSA_HASH_SHA_512_256))
82 #define PSA_HASH_MAX_BLOCK_SIZE 128
83 #elif (IS_USED(MODULE_PSA_HASH_SHA3_384))
84 #define PSA_HASH_MAX_BLOCK_SIZE 104
85 #elif (IS_USED(MODULE_PSA_HASH_SHA3_512))
86 #define PSA_HASH_MAX_BLOCK_SIZE 72
87 #elif (IS_USED(MODULE_PSA_HASH_MD5) || \
88  IS_USED(MODULE_PSA_HASH_SHA_1) || \
89  IS_USED(MODULE_PSA_HASH_SHA_224) || \
90  IS_USED(MODULE_PSA_HASH_SHA_256))
91 #define PSA_HASH_MAX_BLOCK_SIZE 64
92 #else
93 #define PSA_HASH_MAX_BLOCK_SIZE 0
94 #endif
95 
120 #define PSA_HASH_SUSPEND_OUTPUT_SIZE(alg) /* specification-defined value */
121 
131 #define PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE /* implementation-defined value */
132 
140 #define PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH ((size_t)4)
141 
156 #define PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH(alg) \
157 /* specification-defined value */
158 
173 #define PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH(alg) \
174 /* specification-defined value */
175 
192 #define PSA_HASH_BLOCK_LENGTH(alg) \
193  ( \
194  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 : \
195  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 64 : \
196  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 64 : \
197  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 64 : \
198  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 64 : \
199  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 64 : \
200  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 64 : \
201  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 128 : \
202  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 128 : \
203  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 128 : \
204  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 128 : \
205  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 144 : \
206  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 136 : \
207  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 104 : \
208  PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 72 : \
209  0)
210 
211 #ifdef __cplusplus
212 }
213 #endif
214 
Hash algorithm definitions for the PSA Crypto API.
Common macros and compiler attributes/pragmas configuration.