Loading...
Searching...
No Matches
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
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#include "psa/crypto.h"
29
33#define PSA_INVALID_OPERATION (0xFF)
34
40typedef enum {
41 PSA_CBC_NO_PAD_AES_128,
42 PSA_CBC_NO_PAD_AES_192,
43 PSA_CBC_NO_PAD_AES_256,
44 PSA_CBC_PKCS7_AES_256,
45 PSA_STREAM_CIPHER_CHACHA20
47
53typedef enum {
54 PSA_CCM_AES_128,
55 PSA_CCM_AES_192,
56 PSA_CCM_AES_256
58
64typedef enum {
65 PSA_ECC_P160_K1,
66 PSA_ECC_P160_R1,
67 PSA_ECC_P160_R2,
68 PSA_ECC_P192_K1,
69 PSA_ECC_P192_R1,
70 PSA_ECC_P224_K1,
71 PSA_ECC_P224_R1,
72 PSA_ECC_P256_K1,
73 PSA_ECC_P256_R1,
74 PSA_ECC_P384_R1,
75 PSA_ECC_P521_R1,
76 PSA_ECC_FRP,
77 PSA_ECC_ED25519,
79
88#define PSA_ENCODE_ECC_KEY_TYPE_SECPR1(bits) \
89 ((bits == 256) || (bits == 520) ? PSA_ECC_P256_R1 : \
90 (bits == 192) || (bits == 392) ? PSA_ECC_P192_R1 : \
91 PSA_INVALID_OPERATION)
92
101#define PSA_ENCODE_ECC_KEY_TYPE_EDWARDS(bits) \
102 ((bits == 255) || (bits == 256) ? PSA_ECC_ED25519 : \
103 PSA_INVALID_OPERATION)
104
114#define PSA_ENCODE_ECC_KEY_TYPE(bits, curve) \
115 ((curve == PSA_ECC_FAMILY_SECP_R1) ? PSA_ENCODE_ECC_KEY_TYPE_SECPR1(bits) : \
116 (curve == PSA_ECC_FAMILY_TWISTED_EDWARDS) ? PSA_ENCODE_ECC_KEY_TYPE_EDWARDS(bits) : \
117 PSA_INVALID_OPERATION)
118
128#define GET_CBC_NO_PADDING_OPERATION(type, bits) \
129 ((type == PSA_KEY_TYPE_AES) ? \
130 ((bits == 128) ? PSA_CBC_NO_PAD_AES_128 : \
131 (bits == 192) ? PSA_CBC_NO_PAD_AES_192 : \
132 (bits == 256) ? PSA_CBC_NO_PAD_AES_256 : \
133 PSA_INVALID_OPERATION) : \
134 PSA_INVALID_OPERATION)
135
145#define GET_AES_CCM_OPERATION(type, bits) \
146 ((type == PSA_KEY_TYPE_AES) ? \
147 ((bits == 128) ? PSA_CCM_AES_128 : \
148 (bits == 192) ? PSA_CCM_AES_192 : \
149 (bits == 256) ? PSA_CCM_AES_256 : \
150 PSA_INVALID_OPERATION) : \
151 PSA_INVALID_OPERATION)
152
162#define GET_CBC_PKCS7_OPERATION(type, bits) \
163 (((alg == PSA_ALG_CBC_PKCS7) && (type == PSA_KEY_TYPE_AES)) ? PSA_CBC_PKCS7_AES_256 : \
164 PSA_INVALID_OPERATION)
165
175#define GET_CFB_OPERATION(type, bits) \
176 (PSA_INVALID_OPERATION)
177
187#define GET_CTR_OPERATION(type, bits) \
188 (PSA_INVALID_OPERATION)
189
199#define GET_ECB_NO_PADDING_OPERATION(type, bits) \
200 (PSA_INVALID_OPERATION)
201
211#define GET_OFB_OPERATION(type, bits) \
212 (PSA_INVALID_OPERATION)
213
223#define GET_STREAM_CIPHER_OPERATION(type, bits) \
224 (((type == PSA_KEY_TYPE_CHACHA20) && (bits == 256)) ? PSA_STREAM_CIPHER_CHACHA20 : \
225 PSA_INVALID_OPERATION)
226
236#define GET_XTS_OPERATION(type, bits) \
237 (PSA_INVALID_OPERATION)
238
249#define PSA_ENCODE_CIPHER_OPERATION(alg, type, bits) \
250 ((alg == PSA_ALG_CBC_NO_PADDING) ? GET_CBC_NO_PADDING_OPERATION(type, bits) : \
251 (alg == PSA_ALG_CBC_PKCS7) ? GET_CBC_PKCS7_OPERATION(type, bits) : \
252 (alg == PSA_ALG_CFB) ? GET_CFB_OPERATION(type, bits) : \
253 (alg == PSA_ALG_CTR) ? GET_CTR_OPERATION(type, bits) : \
254 (alg == PSA_ALG_ECB_NO_PADDING) ? GET_ECB_NO_PADDING_OPERATION(type, bits) : \
255 (alg == PSA_ALG_OFB) ? GET_OFB_OPERATION(type, bits) : \
256 (alg == PSA_ALG_STREAM_CIPHER) ? GET_STREAM_CIPHER_OPERATION(type, bits) : \
257 (alg == PSA_ALG_XTS) ? GET_XTS_OPERATION(type, bits) : \
258 PSA_INVALID_OPERATION)
259
270#define PSA_ENCODE_AEAD_OPERATION(alg, type, bits) \
271 ((PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg) == PSA_ALG_CCM) ? \
272 GET_AES_CCM_OPERATION(type, bits) : PSA_INVALID_OPERATION)
273
274#ifdef __cplusplus
275}
276#endif
277
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.