psa_crypto_operation_encoder.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2022 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 
9 #pragma once
10 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 #include "psa/crypto.h"
32 
36 #define PSA_INVALID_OPERATION (0xFF)
37 
43 typedef enum {
44  PSA_CBC_NO_PAD_AES_128,
45  PSA_CBC_NO_PAD_AES_192,
46  PSA_CBC_NO_PAD_AES_256,
47  PSA_CBC_PKCS7_AES_256,
48  PSA_STREAM_CIPHER_CHACHA20
50 
56 typedef enum {
57  PSA_CCM_AES_128,
58  PSA_CCM_AES_192,
59  PSA_CCM_AES_256
61 
67 typedef enum {
68  PSA_ECC_P160_K1,
69  PSA_ECC_P160_R1,
70  PSA_ECC_P160_R2,
71  PSA_ECC_P192_K1,
72  PSA_ECC_P192_R1,
73  PSA_ECC_P224_K1,
74  PSA_ECC_P224_R1,
75  PSA_ECC_P256_K1,
76  PSA_ECC_P256_R1,
77  PSA_ECC_P384_R1,
78  PSA_ECC_P521_R1,
79  PSA_ECC_FRP,
80  PSA_ECC_ED25519,
82 
91 #define PSA_ENCODE_ECC_KEY_TYPE_SECPR1(bits) \
92  ((bits == 256) || (bits == 520) ? PSA_ECC_P256_R1 : \
93  (bits == 192) || (bits == 392) ? PSA_ECC_P192_R1 : \
94  PSA_INVALID_OPERATION)
95 
104 #define PSA_ENCODE_ECC_KEY_TYPE_EDWARDS(bits) \
105  ((bits == 255) || (bits == 256) ? PSA_ECC_ED25519 : \
106  PSA_INVALID_OPERATION)
107 
117 #define PSA_ENCODE_ECC_KEY_TYPE(bits, curve) \
118  ((curve == PSA_ECC_FAMILY_SECP_R1) ? PSA_ENCODE_ECC_KEY_TYPE_SECPR1(bits) : \
119  (curve == PSA_ECC_FAMILY_TWISTED_EDWARDS) ? PSA_ENCODE_ECC_KEY_TYPE_EDWARDS(bits) : \
120  PSA_INVALID_OPERATION)
121 
131 #define GET_CBC_NO_PADDING_OPERATION(type, bits) \
132  ((type == PSA_KEY_TYPE_AES) ? \
133  ((bits == 128) ? PSA_CBC_NO_PAD_AES_128 : \
134  (bits == 192) ? PSA_CBC_NO_PAD_AES_192 : \
135  (bits == 256) ? PSA_CBC_NO_PAD_AES_256 : \
136  PSA_INVALID_OPERATION) : \
137  PSA_INVALID_OPERATION)
138 
148 #define GET_AES_CCM_OPERATION(type, bits) \
149  ((type == PSA_KEY_TYPE_AES) ? \
150  ((bits == 128) ? PSA_CCM_AES_128 : \
151  (bits == 192) ? PSA_CCM_AES_192 : \
152  (bits == 256) ? PSA_CCM_AES_256 : \
153  PSA_INVALID_OPERATION) : \
154  PSA_INVALID_OPERATION)
155 
165 #define GET_CBC_PKCS7_OPERATION(type, bits) \
166  (((alg == PSA_ALG_CBC_PKCS7) && (type == PSA_KEY_TYPE_AES)) ? PSA_CBC_PKCS7_AES_256 : \
167  PSA_INVALID_OPERATION)
168 
178 #define GET_CFB_OPERATION(type, bits) \
179  (PSA_INVALID_OPERATION)
180 
190 #define GET_CTR_OPERATION(type, bits) \
191  (PSA_INVALID_OPERATION)
192 
202 #define GET_ECB_NO_PADDING_OPERATION(type, bits) \
203  (PSA_INVALID_OPERATION)
204 
214 #define GET_OFB_OPERATION(type, bits) \
215  (PSA_INVALID_OPERATION)
216 
226 #define GET_STREAM_CIPHER_OPERATION(type, bits) \
227  (((type == PSA_KEY_TYPE_CHACHA20) && (bits == 256)) ? PSA_STREAM_CIPHER_CHACHA20 : \
228  PSA_INVALID_OPERATION)
229 
239 #define GET_XTS_OPERATION(type, bits) \
240  (PSA_INVALID_OPERATION)
241 
252 #define PSA_ENCODE_CIPHER_OPERATION(alg, type, bits) \
253  ((alg == PSA_ALG_CBC_NO_PADDING) ? GET_CBC_NO_PADDING_OPERATION(type, bits) : \
254  (alg == PSA_ALG_CBC_PKCS7) ? GET_CBC_PKCS7_OPERATION(type, bits) : \
255  (alg == PSA_ALG_CFB) ? GET_CFB_OPERATION(type, bits) : \
256  (alg == PSA_ALG_CTR) ? GET_CTR_OPERATION(type, bits) : \
257  (alg == PSA_ALG_ECB_NO_PADDING) ? GET_ECB_NO_PADDING_OPERATION(type, bits) : \
258  (alg == PSA_ALG_OFB) ? GET_OFB_OPERATION(type, bits) : \
259  (alg == PSA_ALG_STREAM_CIPHER) ? GET_STREAM_CIPHER_OPERATION(type, bits) : \
260  (alg == PSA_ALG_XTS) ? GET_XTS_OPERATION(type, bits) : \
261  PSA_INVALID_OPERATION)
262 
273 #define PSA_ENCODE_AEAD_OPERATION(alg, type, bits) \
274  ((PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg) == PSA_ALG_CCM) ? \
275  GET_AES_CCM_OPERATION(type, bits) : PSA_INVALID_OPERATION)
276 
277 #ifdef __cplusplus
278 }
279 #endif
280 
Function declarations for PSA Crypto.
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.
PSA key slot management function declarations.