| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| #ifndef OPENTITAN_SW_DEVICE_LIB_TESTING_KMAC_TESTUTILS_H_ |
| #define OPENTITAN_SW_DEVICE_LIB_TESTING_KMAC_TESTUTILS_H_ |
| |
| #include "sw/device/lib/dif/dif_kmac.h" |
| |
| /** |
| * Configure the KMAC block. |
| * |
| * This is a thin wrapper around `dif_kmac_configure`. It sets up a testing |
| * configuration that prioritizes speed over security, since we don't care |
| * about protecting test keys. For instance, it sets the entropy source to |
| * software so KMAC doesn't wait for fresh entropy, and minimizes masking. |
| * |
| * @param kmac KMAC context |
| * @param sideload Whether to configure KMAC to read a sideloaded key. |
| */ |
| void kmac_testutils_config(dif_kmac_t *kmac, bool sideload); |
| |
| /** |
| * Runs the full KMAC operation. |
| * |
| * Assumes that the KMAC block has already been initialized and configured, and |
| * that the sideloaded key has been loaded (if applicable). |
| * |
| * @param kmac KMAC block context |
| * @param mode Mode (security strength) for KMAC |
| * @param key KMAC key |
| * @param custom_string Customization string |
| * @param custom_string_len Length of customization string |
| * @param message Input message |
| * @param message_len Length of message in bytes |
| * @param output_len Requested length of output in words |
| * @param output Pre-allocated output buffer (length must match output_len) |
| */ |
| void kmac_testutils_kmac(const dif_kmac_t *kmac, dif_kmac_mode_kmac_t mode, |
| const dif_kmac_key_t *key, const char *custom_string, |
| const size_t custom_string_len, const char *message, |
| const size_t message_len, const size_t output_len, |
| uint32_t *output); |
| |
| #endif // OPENTITAN_SW_DEVICE_LIB_TESTING_KMAC_TESTUTILS_H_ |