12 #include "sw/device/lib/testing/hmac_testutils.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
15 #include "sw/device/silicon_creator/lib/base/boot_measurements.h"
17 #include "sw/device/silicon_creator/lib/manifest_def.h"
21 OTTF_DEFINE_TEST_CONFIG();
23 #define RUN_TEST(test_) \
24 LOG_INFO("Starting test " #test_ "..."); \
26 LOG_INFO("Finished test " #test_ ": ok.");
28 #define CHECK_WORD_ALIGNED(addr_) \
29 CHECK((uintptr_t)addr_ % sizeof(uint32_t) == 0, \
30 #addr_ " must be word aligned");
32 void boot_measurements_test(
void) {
35 const char *signed_region_start =
39 ptrdiff_t signed_region_size = image_end - signed_region_start;
42 CHECK_WORD_ALIGNED(signed_region_start);
43 CHECK_WORD_ALIGNED(manifest_end);
44 CHECK_WORD_ALIGNED(image_end);
45 CHECK_WORD_ALIGNED(signed_region_size);
55 CHECK(signed_region_size >= 0 && signed_region_size <= SIZE_MAX,
56 "signed_region_size must fit in a size_t");
57 CHECK_STATUS_OK(hmac_testutils_push_message(&hmac, signed_region_start,
58 (
size_t)signed_region_size));
61 CHECK_STATUS_OK(hmac_testutils_finish_polled(&hmac, &act_digest));
67 void sec_mmio_pos_test(
void) {
77 static volatile bool exception_expected =
false;
78 static volatile bool exception_observed =
false;
82 extern const char kSecMmioNegTestReturn[];
84 void ottf_exception_handler(uint32_t *exc_info) {
85 CHECK(exception_expected ==
true);
86 CHECK(exception_observed ==
false);
87 exception_expected =
false;
96 case kIbexExcIllegalInstrFault:
97 LOG_INFO(
"Observed illegal instruction fault");
98 exception_observed =
true;
99 *mepc_stack_addr = (uintptr_t)kSecMmioNegTestReturn;
102 LOG_FATAL(
"Unexpected exception id = 0x%x", exception);
107 void sec_mmio_neg_test(
void) {
108 exception_expected =
true;
110 CHECK(
false,
"Should not be here");
113 CHECK(exception_observed ==
true);
117 RUN_TEST(boot_measurements_test);
118 RUN_TEST(sec_mmio_pos_test);
119 RUN_TEST(sec_mmio_neg_test);