Software APIs
crypto_fi_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_PENETRATIONTESTS_JSON_CRYPTO_FI_COMMANDS_H_
6 #define OPENTITAN_SW_DEVICE_TESTS_PENETRATIONTESTS_JSON_CRYPTO_FI_COMMANDS_H_
7 #include "sw/device/lib/ujson/ujson_derive.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #define CRYPTOFI_HMAC_CMD_MAX_MESSAGE_BYTES 16
13 #define CRYPTOFI_HMAC_CMD_MAX_KEY_BYTES 32
14 #define CRYPTOFI_HMAC_CMD_MAX_TAG_WORDS 8
15 
16 // clang-format off
17 
18 #define CRYPTOFI_SUBCOMMAND(_, value) \
19  value(_, Aes) \
20  value(_, Init) \
21  value(_, Kmac) \
22  value(_, KmacState) \
23  value(_, Sha256) \
24  value(_, ShadowRegAccess) \
25  value(_, ShadowRegRead)
26 UJSON_SERDE_ENUM(CryptoFiSubcommand, crypto_fi_subcommand_t, CRYPTOFI_SUBCOMMAND);
27 
28 #define CRYPTOFI_AES_MODE(field, string) \
29  field(key_trigger, bool) \
30  field(plaintext_trigger, bool) \
31  field(encrypt_trigger, bool) \
32  field(ciphertext_trigger, bool)
33 UJSON_SERDE_STRUCT(CryptoFiAesMode, crypto_fi_aes_mode_t, CRYPTOFI_AES_MODE);
34 
35 #define CRYPTOFI_KMAC_MODE(field, string) \
36  field(key_trigger, bool) \
37  field(absorb_trigger, bool) \
38  field(static_trigger, bool) \
39  field(squeeze_trigger, bool)
40 UJSON_SERDE_STRUCT(CryptoFiKmacMode, crypto_fi_kmac_mode_t, CRYPTOFI_KMAC_MODE);
41 
42 #define CRYPTOFI_AES_CIPHERTEXT(field, string) \
43  field(ciphertext, uint8_t, 16) \
44  field(alerts, uint32_t, 3) \
45  field(err_status, uint32_t) \
46  field(ast_alerts, uint32_t, 2)
47 UJSON_SERDE_STRUCT(FiAesCiphertext, crypto_fi_aes_ciphertext_t, CRYPTOFI_AES_CIPHERTEXT);
48 
49 #define CRYPTOFI_KMAC_STATE(field, string) \
50  field(share0, uint8_t, 200) \
51  field(share1, uint8_t, 200) \
52  field(digest, uint8_t, 8) \
53  field(alerts, uint32_t, 3) \
54  field(err_status, uint32_t) \
55  field(ast_alerts, uint32_t, 2)
56 UJSON_SERDE_STRUCT(FiKmacState, crypto_fi_kmac_state_t, CRYPTOFI_KMAC_STATE);
57 
58 #define CRYPTOFI_KMAC_DIGEST(field, string) \
59  field(digest, uint8_t, 8) \
60  field(digest_2nd, uint8_t, 8) \
61  field(alerts, uint32_t, 3) \
62  field(err_status, uint32_t) \
63  field(ast_alerts, uint32_t, 2)
64 UJSON_SERDE_STRUCT(FiKmacDigest, crypto_fi_kmac_digest_t, CRYPTOFI_KMAC_DIGEST);
65 
66 #define CRYPTOFI_TEST_RESULT_MULT(field, string) \
67  field(result, uint32_t, 3) \
68  field(alerts, uint32_t, 3) \
69  field(err_status, uint32_t) \
70  field(ast_alerts, uint32_t, 2)
71 UJSON_SERDE_STRUCT(CRYPTOFITestResultMult, crypto_fi_test_result_mult_t, CRYPTOFI_TEST_RESULT_MULT);
72 
73 #define CRYPTOFI_HMAC_MESSAGE(field, string) \
74  field(message, uint8_t, CRYPTOFI_HMAC_CMD_MAX_MESSAGE_BYTES)
75 UJSON_SERDE_STRUCT(FiHmacMessage, crypto_fi_hmac_message_t, CRYPTOFI_HMAC_MESSAGE);
76 
77 #define CRYPTOFI_HMAC_TAG(field, string) \
78  field(tag, uint32_t, CRYPTOFI_HMAC_CMD_MAX_TAG_WORDS) \
79  field(alerts, uint32_t, 3) \
80  field(err_status, uint32_t)
81 UJSON_SERDE_STRUCT(FiHmacTag, crypto_fi_hmac_tag_t, CRYPTOFI_HMAC_TAG);
82 
83 #define CRYPTOFI_HMAC_MODE(field, string) \
84  field(start_trigger, bool) \
85  field(msg_trigger, bool) \
86  field(process_trigger, bool) \
87  field(finish_trigger, bool)
88 UJSON_SERDE_STRUCT(CryptoFiHmacMode, crypto_fi_hmac_mode_t, CRYPTOFI_HMAC_MODE);
89 
90 // clang-format on
91 
92 #ifdef __cplusplus
93 }
94 #endif
95 #endif // OPENTITAN_SW_DEVICE_TESTS_PENETRATIONTESTS_JSON_CRYPTO_FI_COMMANDS_H_