psa_crypto_operation_encoder.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2022 HAW Hamburg
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 //#include "unaligned.h"
28 #include "psa/aead/algorithm.h"
29 #include "psa/cipher/algorithm.h"
30 
34 #define PSA_INVALID_OPERATION (0xFF)
35 
41 typedef enum {
42  PSA_CBC_NO_PAD_AES_128,
43  PSA_CBC_NO_PAD_AES_192,
44  PSA_CBC_NO_PAD_AES_256,
45  PSA_CBC_PKCS7_AES_256,
46  PSA_STREAM_CIPHER_CHACHA20
48 
54 typedef enum {
55  PSA_CCM_AES_128,
56  PSA_CCM_AES_192,
57  PSA_CCM_AES_256
59 
65 typedef enum {
66  PSA_ECC_P160_K1,
67  PSA_ECC_P160_R1,
68  PSA_ECC_P160_R2,
69  PSA_ECC_P192_K1,
70  PSA_ECC_P192_R1,
71  PSA_ECC_P224_K1,
72  PSA_ECC_P224_R1,
73  PSA_ECC_P256_K1,
74  PSA_ECC_P256_R1,
75  PSA_ECC_P384_R1,
76  PSA_ECC_P521_R1,
77  PSA_ECC_FRP,
78  PSA_ECC_ED25519,
80 
89 #define PSA_ENCODE_ECC_KEY_TYPE_SECPR1(bits) \
90  ((bits == 256) || (bits == 520) ? PSA_ECC_P256_R1 : \
91  (bits == 192) || (bits == 392) ? PSA_ECC_P192_R1 : \
92  PSA_INVALID_OPERATION)
93 
102 #define PSA_ENCODE_ECC_KEY_TYPE_EDWARDS(bits) \
103  ((bits == 255) || (bits == 256) ? PSA_ECC_ED25519 : \
104  PSA_INVALID_OPERATION)
105 
115 #define PSA_ENCODE_ECC_KEY_TYPE(bits, curve) \
116  ((curve == PSA_ECC_FAMILY_SECP_R1) ? PSA_ENCODE_ECC_KEY_TYPE_SECPR1(bits) : \
117  (curve == PSA_ECC_FAMILY_TWISTED_EDWARDS) ? PSA_ENCODE_ECC_KEY_TYPE_EDWARDS(bits) : \
118  PSA_INVALID_OPERATION)
119 
129 #define GET_CBC_NO_PADDING_OPERATION(type, bits) \
130  ((type == PSA_KEY_TYPE_AES) ? \
131  ((bits == 128) ? PSA_CBC_NO_PAD_AES_128 : \
132  (bits == 192) ? PSA_CBC_NO_PAD_AES_192 : \
133  (bits == 256) ? PSA_CBC_NO_PAD_AES_256 : \
134  PSA_INVALID_OPERATION) : \
135  PSA_INVALID_OPERATION)
136 
146 #define GET_AES_CCM_OPERATION(type, bits) \
147  ((type == PSA_KEY_TYPE_AES) ? \
148  ((bits == 128) ? PSA_CCM_AES_128 : \
149  (bits == 192) ? PSA_CCM_AES_192 : \
150  (bits == 256) ? PSA_CCM_AES_256 : \
151  PSA_INVALID_OPERATION) : \
152  PSA_INVALID_OPERATION)
153 
163 #define GET_CBC_PKCS7_OPERATION(type, bits) \
164  (((alg == PSA_ALG_CBC_PKCS7) && (type == PSA_KEY_TYPE_AES)) ? PSA_CBC_PKCS7_AES_256 : \
165  PSA_INVALID_OPERATION)
166 
176 #define GET_CFB_OPERATION(type, bits) \
177  (PSA_INVALID_OPERATION)
178 
188 #define GET_CTR_OPERATION(type, bits) \
189  (PSA_INVALID_OPERATION)
190 
200 #define GET_ECB_NO_PADDING_OPERATION(type, bits) \
201  (PSA_INVALID_OPERATION)
202 
212 #define GET_OFB_OPERATION(type, bits) \
213  (PSA_INVALID_OPERATION)
214 
224 #define GET_STREAM_CIPHER_OPERATION(type, bits) \
225  (((type == PSA_KEY_TYPE_CHACHA20) && (bits == 256)) ? PSA_STREAM_CIPHER_CHACHA20 : \
226  PSA_INVALID_OPERATION)
227 
237 #define GET_XTS_OPERATION(type, bits) \
238  (PSA_INVALID_OPERATION)
239 
250 #define PSA_ENCODE_CIPHER_OPERATION(alg, type, bits) \
251  ((alg == PSA_ALG_CBC_NO_PADDING) ? GET_CBC_NO_PADDING_OPERATION(type, bits) : \
252  (alg == PSA_ALG_CBC_PKCS7) ? GET_CBC_PKCS7_OPERATION(type, bits) : \
253  (alg == PSA_ALG_CFB) ? GET_CFB_OPERATION(type, bits) : \
254  (alg == PSA_ALG_CTR) ? GET_CTR_OPERATION(type, bits) : \
255  (alg == PSA_ALG_ECB_NO_PADDING) ? GET_ECB_NO_PADDING_OPERATION(type, bits) : \
256  (alg == PSA_ALG_OFB) ? GET_OFB_OPERATION(type, bits) : \
257  (alg == PSA_ALG_STREAM_CIPHER) ? GET_STREAM_CIPHER_OPERATION(type, bits) : \
258  (alg == PSA_ALG_XTS) ? GET_XTS_OPERATION(type, bits) : \
259  PSA_INVALID_OPERATION)
260 
271 #define PSA_ENCODE_AEAD_OPERATION(alg, type, bits) \
272  ((PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg) == PSA_ALG_CCM) ? \
273  GET_AES_CCM_OPERATION(type, bits) : PSA_INVALID_OPERATION)
274 
275 #ifdef __cplusplus
276 }
277 #endif
278 
AEAD algorithm definitions for the PSA Crypto API.
Cipher algorithm definitions for the PSA Crypto API.
psa_cipher_op_t
Enum encoding available cipher operations.
psa_aead_op_t
Enum encoding available aead operations.
psa_asym_key_t
Enum encoding available asymmetric key types and sizes.