11 #include "sw/device/lib/testing/aes_testutils.h"
12 #include "sw/device/lib/testing/keymgr_testutils.h"
13 #include "sw/device/lib/testing/kmac_testutils.h"
14 #include "sw/device/lib/testing/test_framework/check.h"
18 #include "kmac_regs.h"
20 #define TIMEOUT (1000 * 1000)
25 static const uint32_t kPlainText[] = {
34 static volatile const uint8_t kAESDigest[16] = {0};
36 static dif_keymgr_t keymgr;
37 static dif_kmac_t kmac;
39 OTTF_DEFINE_TEST_CONFIG();
44 static void init_peripheral_handles(
void) {
47 CHECK_DIF_OK(dif_keymgr_init(
55 .operation = crypt_op,
61 .reseed_on_key_change =
false,
62 .ctrl_aux_lock =
false,
66 LOG_INFO(
"Encrypting with 256-bit AES sideload key in ECB mode.");
68 LOG_INFO(
"Decrypting with 256-bit AES sideload key in ECB mode.");
82 LOG_INFO(
"Finished operation with AES sideloaded key.");
93 uint32_t max_key_version;
95 keymgr_testutils_max_key_version_get(&keymgr, &max_key_version));
97 if (sideload_params.
version > max_key_version) {
98 LOG_INFO(
"Key version %d is greater than the maximum key version %d",
99 sideload_params.
version, max_key_version);
100 LOG_INFO(
"Setting key version to the maximum key version %d",
102 sideload_params.
version = max_key_version;
105 const char *state_name;
106 CHECK_STATUS_OK(keymgr_testutils_state_string_get(&keymgr, &state_name));
109 keymgr_testutils_generate_versioned_key(&keymgr, sideload_params));
110 LOG_INFO(
"Keymgr generated HW output for Aes at %s State", state_name);
120 memcpy(in_data_plain.data, kPlainText,
sizeof(kPlainText));
126 CHECK_ARRAYS_NE(out_data_cipher.data, kPlainText,
ARRAYSIZE(kPlainText));
131 LOG_INFO(
"AES Plaintext (HW Core): 0x%08x%08x%08x%08x",
132 in_data_plain.data[0], in_data_plain.data[1],
133 in_data_plain.data[2], in_data_plain.data[3]);
134 LOG_INFO(
"AES Ciphertext (HW Core): 0x%08x%08x%08x%08x",
135 out_data_cipher.data[3], out_data_cipher.data[2],
136 out_data_cipher.data[1], out_data_cipher.data[0]);
138 "AES Expected Ciphertext (from C model): "
139 "0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
140 kAESDigest[15], kAESDigest[14], kAESDigest[13], kAESDigest[12],
141 kAESDigest[11], kAESDigest[10], kAESDigest[9], kAESDigest[8],
142 kAESDigest[7], kAESDigest[6], kAESDigest[5], kAESDigest[4],
143 kAESDigest[3], kAESDigest[2], kAESDigest[1], kAESDigest[0]);
144 CHECK_ARRAYS_EQ(out_data_cipher.data, (uint32_t *)kAESDigest,
152 CHECK_ARRAYS_EQ(out_data_plain.data, kPlainText,
ARRAYSIZE(kPlainText));
155 LOG_INFO(
"Clearing the sideloaded key.");
169 CHECK_ARRAYS_NE(out_data_plain.data, kPlainText,
ARRAYSIZE(kPlainText));
174 keymgr_testutils_generate_versioned_key(&keymgr, sideload_params));
175 LOG_INFO(
"Keymgr generated HW output for Aes at %s State", state_name);
179 &out_data_second_cipher));
182 CHECK_ARRAYS_EQ(out_data_cipher.data, out_data_second_cipher.data,
187 init_peripheral_handles();
190 CHECK_STATUS_OK(keymgr_testutils_initialize(&keymgr, &kmac));