5 #include "hw/ip/aes/model/aes_modes.h"
11 #include "sw/device/lib/testing/aes_testutils.h"
12 #include "sw/device/lib/testing/clkmgr_testutils.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
16 #define TIMEOUT (1000 * 1000)
21 static const uint8_t kKeyShare1[] = {
22 0x0f, 0x1f, 0x2f, 0x3F, 0x4f, 0x5f, 0x6f, 0x7f, 0x8f, 0x9f, 0xaf,
23 0xbf, 0xcf, 0xdf, 0xef, 0xff, 0x0a, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a,
24 0x6a, 0x7a, 0x8a, 0x9a, 0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa,
27 OTTF_DEFINE_TEST_CONFIG();
28 static dif_clkmgr_t clkmgr;
30 #if defined(OPENTITAN_IS_EARLGREY)
32 #elif defined(OPENTITAN_IS_DARJEELING)
33 kTopDarjeelingHintableClocksMainAes
35 #error Unsupported top
39 static bool is_hintable_clock_enabled(
const dif_clkmgr_t *clkmgr,
47 static status_t initialize_clkmgr(
void) {
48 CHECK_DIF_OK(dif_clkmgr_init_from_dt(kDtClkmgrAon, &clkmgr));
55 return CLKMGR_TESTUTILS_CHECK_CLOCK_HINT(clkmgr, kAesClock,
59 status_t execute_test(dif_aes_t *aes) {
62 uint8_t key_share0[
sizeof(kAesModesKey256)];
63 for (
int i = 0; i <
sizeof(kAesModesKey256); ++i) {
64 key_share0[i] = kAesModesKey256[i] ^ kKeyShare1[i];
69 memcpy(key.share0, key_share0,
sizeof(key.share0));
70 memcpy(key.share1, kKeyShare1,
sizeof(key.share1));
85 .reseed_on_key_change =
false,
86 .ctrl_aux_lock =
false,
92 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
97 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
107 memcpy(in_data_cipher.data, kAesModesCipherTextEcb256,
108 sizeof(in_data_cipher.data));
114 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
122 IBEX_SPIN_FOR(!is_hintable_clock_enabled(&clkmgr, kAesClock), TIMEOUT);
126 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
131 CLKMGR_TESTUTILS_SET_AND_CHECK_CLOCK_HINT(
138 TRY_CHECK_ARRAYS_EQ((uint8_t *)out_data.data, kAesModesPlainText,
139 sizeof(out_data.data));
145 CHECK_STATUS_OK(initialize_clkmgr());
148 CHECK_DIF_OK(dif_aes_init_from_dt(kDtAes, &aes));
151 return status_ok(execute_test(&aes));