15 #include "sw/device/lib/testing/entropy_testutils.h"
16 #include "sw/device/lib/testing/keymgr_testutils.h"
18 #include "sw/device/lib/testing/test_framework/check.h"
22 #include "otbn_regs.h"
24 static dif_keymgr_t keymgr;
25 static dif_kmac_t kmac;
26 static dif_otbn_t otbn;
33 static const otbn_addr_t kOtbnVarEncU =
35 static const otbn_addr_t kOtbnVarEncResult =
38 OTTF_DEFINE_TEST_CONFIG();
43 static void init_peripheral_handles(
void) {
46 CHECK_DIF_OK(dif_keymgr_init(
59 static const uint32_t kEncodedU[8] = {
60 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
63 0x1 << OTBN_ERR_BITS_KEY_INVALID_BIT;
78 static void run_x25519_app(dif_otbn_t *otbn, uint32_t *result,
88 LOG_INFO(
"Starting OTBN program...");
103 static void test_otbn_with_sideloaded_key(dif_keymgr_t *keymgr,
111 uint32_t max_key_version;
113 keymgr_testutils_max_key_version_get(keymgr, &max_key_version));
115 if (sideload_params.
version > max_key_version) {
116 LOG_INFO(
"Key version %d is greater than the maximum key version %d",
117 sideload_params.
version, max_key_version);
118 LOG_INFO(
"Setting key version to the maximum key version %d",
120 sideload_params.
version = max_key_version;
124 keymgr_testutils_generate_versioned_key(keymgr, sideload_params));
125 LOG_INFO(
"Keymgr generated HW output for OTBN.");
131 run_x25519_app(otbn, result, kErrBitsOk);
133 #ifdef TEST_SIMPLE_CASE_ONLY
141 LOG_INFO(
"Clearing the Keymgr generated sideload keys.");
142 uint32_t at_clear_salt_result[8];
143 run_x25519_app(otbn, at_clear_salt_result, kOtbnInvalidKeyErr);
148 LOG_INFO(
"Disable clearing the Keymgr generated sideload keys.");
151 mmio_region_write32(otbn->base_addr, OTBN_ERR_BITS_REG_OFFSET, 0x0);
153 CHECK_STATUS_OK(keymgr_testutils_generate_versioned_key(
154 keymgr, sideload_params));
155 LOG_INFO(
"Keymgr generated HW output for OTBN.");
156 uint32_t post_clear_salt_result[8];
157 run_x25519_app(otbn, post_clear_salt_result, kErrBitsOk);
158 CHECK_ARRAYS_EQ(result, post_clear_salt_result,
ARRAYSIZE(result));
161 sideload_params.
salt[0] = ~sideload_params.
salt[0];
163 keymgr_testutils_generate_versioned_key(keymgr, sideload_params));
164 LOG_INFO(
"Keymgr generated HW output for OTBN.");
166 uint32_t modified_salt_result[8];
167 run_x25519_app(otbn, modified_salt_result, kErrBitsOk);
171 CHECK_ARRAYS_NE(result, modified_salt_result,
ARRAYSIZE(result));
174 sideload_params.
salt[0] = ~sideload_params.
salt[0];
176 keymgr_testutils_generate_versioned_key(keymgr, sideload_params));
177 LOG_INFO(
"Keymgr generated HW output for OTBN.");
179 uint32_t same_key_result[8];
180 run_x25519_app(otbn, same_key_result, kErrBitsOk);
184 CHECK_ARRAYS_EQ(result, same_key_result,
ARRAYSIZE(result));
188 init_peripheral_handles();
189 CHECK_STATUS_OK(keymgr_testutils_initialize(&keymgr, &kmac));
192 test_otbn_with_sideloaded_key(&keymgr, &otbn);