Software APIs
kmac_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_KMAC_COMMANDS_H_
6 #define OPENTITAN_SW_DEVICE_TESTS_CRYPTO_CRYPTOTEST_JSON_KMAC_COMMANDS_H_
7 #include "sw/device/lib/ujson/ujson_derive.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 // These two are >= the longest size our test vectors happen to use.
13 #define KMAC_CMD_MAX_MESSAGE_BYTES 256
14 #define KMAC_CMD_MAX_TAG_BYTES 64
15 
16 // These two are the longest size OpenTitan's KMAC hardware IP supports
17 #define KMAC_CMD_MAX_CUSTOMIZATION_STRING_BYTES 36
18 #define KMAC_CMD_MAX_KEY_BYTES 64
19 
20 // clang-format off
21 
22 #define KMAC_MODE(_, value) \
23  value(_, Kmac128) \
24  value(_, Kmac256)
25 UJSON_SERDE_ENUM(CryptotestKmacMode, cryptotest_kmac_mode_t, KMAC_MODE);
26 
27 #define KMAC_REQUIRED_TAG_LENGTH(field, string) \
28  field(required_tag_length, size_t)
29 UJSON_SERDE_STRUCT(CryptotestKmacRequiredTagLength, cryptotest_kmac_required_tag_length_t, KMAC_REQUIRED_TAG_LENGTH);
30 
31 #define KMAC_MESSAGE(field, string) \
32  field(message, uint8_t, KMAC_CMD_MAX_MESSAGE_BYTES) \
33  field(message_len, size_t)
34 UJSON_SERDE_STRUCT(CryptotestKmacMessage, cryptotest_kmac_message_t, KMAC_MESSAGE);
35 
36 #define KMAC_KEY(field, string) \
37  field(key, uint8_t, KMAC_CMD_MAX_KEY_BYTES) \
38  field(key_len, size_t)
39 UJSON_SERDE_STRUCT(CryptotestKmacKey, cryptotest_kmac_key_t, KMAC_KEY);
40 
41 #define KMAC_CUSTOMIZATION_STRING(field, string) \
42  field(customization_string, uint8_t, KMAC_CMD_MAX_CUSTOMIZATION_STRING_BYTES) \
43  field(customization_string_len, size_t)
44 UJSON_SERDE_STRUCT(CryptotestKmacCustomizationString, cryptotest_kmac_customization_string_t, KMAC_CUSTOMIZATION_STRING);
45 
46 #define KMAC_TAG(field, string) \
47  field(tag, uint8_t, KMAC_CMD_MAX_TAG_BYTES) \
48  field(tag_len, size_t)
49 UJSON_SERDE_STRUCT(CryptotestKmacTag, cryptotest_kmac_tag_t, KMAC_TAG);
50 
51 // clang-format on
52 
53 #ifdef __cplusplus
54 }
55 #endif
56 #endif // OPENTITAN_SW_DEVICE_TESTS_CRYPTO_CRYPTOTEST_JSON_KMAC_COMMANDS_H_