Software APIs
aes_commands.h
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #ifndef OPENTITAN_SW_DEVICE_TESTS_CRYPTO_CRYPTOTEST_JSON_AES_COMMANDS_H_
6 #define OPENTITAN_SW_DEVICE_TESTS_CRYPTO_CRYPTOTEST_JSON_AES_COMMANDS_H_
7 #include "sw/device/lib/ujson/ujson_derive.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #define AES_CMD_MAX_MSG_BYTES 64
13 #define AES_CMD_MAX_KEY_BYTES 32 // 256 / 8
14 
15 // clang-format off
16 
17 #define AES_SUBCOMMAND(_, value) \
18  value(_, AesBlock) \
19  value(_, AesGcm)
20 UJSON_SERDE_ENUM(AesSubcommand, aes_subcommand_t, AES_SUBCOMMAND);
21 
22 // AES arguments
23 #define AES_MODE(_, value) \
24  value(_, Ecb) \
25  value(_, Cbc) \
26  value(_, Cfb) \
27  value(_, Ofb) \
28  value(_, Ctr)
29 UJSON_SERDE_ENUM(CryptotestAesMode, cryptotest_aes_mode_t, AES_MODE);
30 
31 #define AES_OPERATION(_, value) \
32  value(_, Encrypt) \
33  value(_, Decrypt)
34 UJSON_SERDE_ENUM(CryptotestAesOperation, cryptotest_aes_operation_t, AES_OPERATION);
35 
36 #define AES_PADDING(_, value) \
37  value(_, Pkcs7) \
38  value(_, Iso9797M2) \
39  value(_, Null)
40 UJSON_SERDE_ENUM(CryptotestAesPadding, cryptotest_aes_padding_t, AES_PADDING);
41 
42 #define AES_DATA(field, string) \
43  field(key, uint8_t, AES_CMD_MAX_KEY_BYTES) \
44  field(key_length, size_t) \
45  field(iv, uint8_t, 16) \
46  field(input, uint8_t, AES_CMD_MAX_MSG_BYTES) \
47  field(input_len, size_t)
48 UJSON_SERDE_STRUCT(CryptotestAesData, cryptotest_aes_data_t, AES_DATA);
49 
50 #define AES_OUTPUT(field, string) \
51  field(output, uint8_t, AES_CMD_MAX_MSG_BYTES) \
52  field(output_len, uint32_t)
53 UJSON_SERDE_STRUCT(CryptotestAesOutput, cryptotest_aes_output_t, AES_OUTPUT);
54 
55 // clang-format on
56 
57 #ifdef __cplusplus
58 }
59 #endif
60 #endif // OPENTITAN_SW_DEVICE_TESTS_CRYPTO_CRYPTOTEST_JSON_AES_COMMANDS_H_