5 #include "sw/device/silicon_creator/lib/boot_svc/boot_svc_header.h"
10 #include "gtest/gtest.h"
12 #include "sw/device/silicon_creator/lib/drivers/mock_hmac.h"
13 #include "sw/device/silicon_creator/testing/rom_test.h"
19 namespace boot_svc_header_unittest {
22 using ::testing::ElementsAreArray;
23 using ::testing::SetArgPointee;
27 rom_test::MockHmac hmac_;
31 struct BootSvcFakeMsg {
33 uint32_t payload{0xbeefbeef};
35 BootSvcFakeMsg fake_msg;
36 constexpr uint32_t kType = 0xcafecafe;
37 constexpr uint32_t kDigestAreaByteCount =
38 sizeof(fake_msg) -
sizeof(fake_msg.header.digest);
40 0x0b00000e, 0x0b01010e, 0x0b02020e, 0x0b03030e,
41 0x0b04040e, 0x0b05050e, 0x0b06060e, 0x0b07070e,
45 sha256(&fake_msg.header.identifier, kDigestAreaByteCount, _))
46 .WillOnce(SetArgPointee<2>(kFakeDigest));
48 boot_svc_header_finalize(kType,
sizeof(fake_msg), &fake_msg.header);
50 EXPECT_THAT(fake_msg.header.digest.digest,
51 ElementsAreArray(kFakeDigest.digest));
52 EXPECT_EQ(fake_msg.header.identifier, kBootSvcIdentifier);
53 EXPECT_EQ(fake_msg.header.type, kType);
54 EXPECT_EQ(fake_msg.header.length,
sizeof(fake_msg));
64 rom_error_t exp_error;
69 public testing::WithParamInterface<BootSvcHeaderCheckTestCase> {};
71 constexpr std::array<BootSvcHeaderCheckTestCase, 7> kHeaderCheckTestCases{{
77 .identifier = kBootSvcIdentifier,
79 .length =
sizeof(BootSvcTestMsg),
81 .exp_error = kErrorOk,
88 .identifier = kBootSvcIdentifier,
92 .exp_error = kErrorOk,
99 .identifier = kBootSvcIdentifier,
103 .exp_error = kErrorOk,
109 .digest = {0x8aadda7a},
110 .identifier = kBootSvcIdentifier,
112 .length =
sizeof(BootSvcTestMsg),
114 .exp_error = kErrorBootSvcBadHeader,
121 .identifier = 0x8aadda7a,
123 .length =
sizeof(BootSvcTestMsg),
125 .exp_error = kErrorBootSvcBadHeader,
132 .identifier = kBootSvcIdentifier,
136 .exp_error = kErrorBootSvcBadHeader,
143 .identifier = kBootSvcIdentifier,
147 .exp_error = kErrorBootSvcBadHeader,
151 TEST_P(BootSvcHeaderCheckTest, Check) {
154 sha256(&GetParam().msg.header.identifier,
158 EXPECT_EQ(boot_svc_header_check(&GetParam().msg.header),
159 GetParam().exp_error);
162 INSTANTIATE_TEST_SUITE_P(HeaderCheckTestCases, BootSvcHeaderCheckTest,
163 testing::ValuesIn(kHeaderCheckTestCases));