5 #include "dt/dt_hmac.h"
10 #include "sw/device/lib/testing/clkmgr_testutils.h"
11 #include "sw/device/lib/testing/hmac_testutils.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
15 #define TIMEOUT (1000 * 1000)
17 OTTF_DEFINE_TEST_CONFIG();
18 static_assert(kDtHmacCount >= 1,
19 "This test requires at least one HMAC instance");
21 static const dt_hmac_t kTestHmac = (dt_hmac_t)0;
23 static dif_hmac_t hmac;
24 static dif_clkmgr_t clkmgr;
32 static bool is_hintable_clock_enabled(
const dif_clkmgr_t *clkmgr,
41 CHECK_DIF_OK(dif_clkmgr_init_from_dt(kDtClkmgrAon, &clkmgr));
43 &clkmgr, dt_hmac_instance_id(kTestHmac), &hmac_clock));
59 IBEX_SPIN_FOR(!is_hintable_clock_enabled(&clkmgr, clock), TIMEOUT);
78 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
83 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
88 TRY(hmac_testutils_push_message(&hmac, (
char *)kHmacRefLongKey,
89 sizeof(kHmacRefLongKey)));
92 hmac_testutils_check_message_length(&hmac,
sizeof(kHmacRefLongKey) * 8));
93 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
99 CHECK_STATUS_OK(handle_end_of_process(hmac_clock));
102 CHECK_STATUS_OK(hmac_testutils_finish_polled(&hmac, &key_digest));
103 CHECK_ARRAYS_EQ(key_digest.digest, kHmacRefExpectedLongKeyDigest.digest,
109 kHmacTransactionConfig));
110 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
114 hmac_testutils_push_message(&hmac, kHmacRefData,
sizeof(kHmacRefData)));
116 hmac_testutils_check_message_length(&hmac,
sizeof(kHmacRefData) * 8));
120 CHECK_STATUS_OK(handle_end_of_process(hmac_clock));
122 return hmac_testutils_finish_and_check_polled(&hmac, &kHmacRefExpectedDigest);
126 CHECK_STATUS_OK(initialize_clkmgr(hmac_clock));
128 CHECK_DIF_OK(dif_hmac_init_from_dt(kTestHmac, &hmac));
130 return status_ok(execute_test());