5#include "sw/device/lib/testing/kmac_testutils.h"
8#include "sw/device/lib/testing/test_framework/check.h"
10status_t kmac_testutils_config(
dif_kmac_t *kmac,
bool sideload) {
13 .entropy_mode = kDifKmacEntropyModeSoftware,
15 .entropy_fast_process =
true,
18 .entropy_hash_threshold = 0,
20 .entropy_wait_timer = 0,
22 .entropy_prescaler = 0,
23 .message_big_endian =
false,
25 .output_big_endian =
false,
32 TRY(dif_kmac_configure(kmac, config));
36status_t kmac_testutils_kmac(
const dif_kmac_t *kmac,
39 const char *custom_string,
40 const size_t custom_string_len,
41 const char *message,
const size_t message_len,
42 const size_t output_len, uint32_t *output,
46 TRY(dif_kmac_customization_string_init(custom_string, custom_string_len,
47 &kmac_custom_string));
51 TRY(dif_kmac_mode_kmac_start(kmac, &operation_state, mode, output_len, key,
52 &kmac_custom_string));
53 TRY(kmac_testutils_check_error(kmac));
57 TRY(dif_kmac_absorb(kmac, &operation_state, message, message_len, NULL));
58 TRY(kmac_testutils_check_error(kmac));
62 TRY(dif_kmac_squeeze(kmac, &operation_state, output, output_len, NULL,
64 TRY(kmac_testutils_check_error(kmac));
67 TRY(dif_kmac_end(kmac, &operation_state));
68 TRY(kmac_testutils_check_error(kmac));
73status_t kmac_testutils_check_error(
const dif_kmac_t *kmac) {
75 TRY(dif_kmac_has_error_occurred(kmac, &error));
85 TRY(dif_kmac_get_error(kmac, &err, &info));
88 TRY(dif_kmac_clear_err_irq(kmac));
91 TRY(dif_kmac_err_processed(kmac));
96 return FAILED_PRECONDITION();