5 #include "sw/device/silicon_creator/lib/sigverify/sigverify.h"
10 #include <unordered_set>
12 #include "gtest/gtest.h"
15 #include "sw/device/silicon_creator/lib/drivers/mock_lifecycle.h"
16 #include "sw/device/silicon_creator/lib/drivers/mock_otp.h"
17 #include "sw/device/silicon_creator/lib/sigverify/mock_mod_exp_ibex.h"
18 #include "sw/device/silicon_creator/testing/rom_test.h"
20 #include "otp_ctrl_regs.h"
22 namespace sigverify_unittest {
24 using ::testing::DoAll;
25 using ::testing::NotNull;
26 using ::testing::Return;
27 using ::testing::SetArgPointee;
68 0xb0f00a08, 0xd15d6c15, 0x2b0b822c, 0xa3bf4f1b, 0xc55ad015, 0x9a2feaa0,
69 0x884c7d65, 0x9f86d081, 0x05000420, 0x03040201, 0x86480165, 0x0d060960,
70 0x00303130, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
71 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
72 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
73 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
74 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
75 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
76 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
77 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
78 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
79 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
80 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
81 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
82 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
83 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0001ffff,
94 constexpr std::array<lifecycle_state_t, 5>
kLcStates{
95 kLcStateTest, kLcStateDev, kLcStateProd, kLcStateProdEnd, kLcStateRma,
100 public testing::WithParamInterface<lifecycle_state_t> {
102 rom_test::MockSigverifyModExpIbex sigverify_mod_exp_ibex_;
103 rom_test::MockOtp otp_;
109 EXPECT_CALL(sigverify_mod_exp_ibex_, mod_exp(&key_, &kSignature, NotNull()))
110 .WillOnce(DoAll(SetArgPointee<2>(kEncMsg), Return(kErrorOk)));
112 uint32_t flash_exec = 0;
113 EXPECT_EQ(sigverify_rsa_verify(&kSignature, &key_, &kTestDigest, GetParam(),
116 EXPECT_EQ(flash_exec, kSigverifyRsaSuccess);
119 INSTANTIATE_TEST_SUITE_P(AllLcStates, SigverifyInLcState,
120 testing::ValuesIn(kLcStates));
123 uint32_t selector_bits;
125 uint32_t exp_manuf_state_creator;
126 uint32_t exp_manuf_state_owner;
127 uint32_t exp_life_cycle_state;
132 public testing::WithParamInterface<UsageConstraintsTestCase> {
134 rom_test::MockLifecycle lifecycle_;
135 rom_test::MockOtp otp_;
142 constexpr uint32_t
kUnusedWord = MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL;
143 constexpr uint32_t kManufStateCreator = 0x30303030;
144 constexpr uint32_t kManufStateOwner = 0x31313131;
145 constexpr uint32_t kLifeCycleState = 0x32323232;
160 TEST_F(SigverifyUsageConstraints, ConstantCheck) {
163 EXPECT_EQ(MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL, 0xA5A5A5A5);
164 EXPECT_NE(kManufStateCreator, kUnusedWord);
165 EXPECT_NE(kManufStateOwner, kUnusedWord);
166 EXPECT_NE(kLifeCycleState, kUnusedWord);
167 for (
size_t i = 0; i < kLifecycleDeviceIdNumWords; ++i) {
168 EXPECT_NE(kDeviceId.device_id[i], kUnusedWord);
172 constexpr std::array<UsageConstraintsTestCase, 4> kUsageConstraintsTestCases{{
174 .selector_bits = 0x7FF,
175 .exp_device_id = kDeviceId,
176 .exp_manuf_state_creator = kManufStateCreator,
177 .exp_manuf_state_owner = kManufStateOwner,
178 .exp_life_cycle_state = kLifeCycleState,
181 .selector_bits = 0x3AA,
182 .exp_device_id = {.device_id =
185 kDeviceId.device_id[1],
187 kDeviceId.device_id[3],
189 kDeviceId.device_id[5],
191 kDeviceId.device_id[7],
198 .selector_bits = 0x155,
199 .exp_device_id = {.device_id =
201 kDeviceId.device_id[0],
203 kDeviceId.device_id[2],
205 kDeviceId.device_id[4],
207 kDeviceId.device_id[6],
216 .exp_device_id = {.device_id =
233 TEST_P(SigverifyUsageConstraints, Read) {
234 EXPECT_CALL(lifecycle_, DeviceId(NotNull()))
235 .WillOnce(SetArgPointee<0>(kDeviceId));
237 EXPECT_CALL(otp_, read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_MANUF_STATE_OFFSET))
238 .WillOnce(Return(GetParam().exp_manuf_state_creator));
240 EXPECT_CALL(otp_, read32(OTP_CTRL_PARAM_OWNER_SW_CFG_MANUF_STATE_OFFSET))
241 .WillOnce(Return(GetParam().exp_manuf_state_owner));
243 EXPECT_CALL(lifecycle_, State())
244 .WillOnce(Return(
static_cast<lifecycle_state_t
>(kLifeCycleState)));
247 sigverify_usage_constraints_get(GetParam().selector_bits, &usage_constraints);
249 EXPECT_EQ(usage_constraints.
selector_bits, GetParam().selector_bits);
250 EXPECT_THAT(usage_constraints.
device_id.device_id,
251 testing::ElementsAreArray(GetParam().exp_device_id.device_id));
253 GetParam().exp_manuf_state_creator);
255 GetParam().exp_manuf_state_owner);
257 GetParam().exp_life_cycle_state);
260 INSTANTIATE_TEST_SUITE_P(UsageConstraintsTestCases, SigverifyUsageConstraints,
261 testing::ValuesIn(kUsageConstraintsTestCases));
263 TEST(SigverifyRsaSuccessToOk, Result) {
264 EXPECT_EQ(sigverify_rsa_success_to_ok(kSigverifyRsaSuccess), kErrorOk);
265 EXPECT_NE(sigverify_rsa_success_to_ok(kErrorOk), kErrorOk);
266 EXPECT_NE(sigverify_rsa_success_to_ok(std::numeric_limits<uint32_t>::max()),
268 EXPECT_NE(sigverify_rsa_success_to_ok(0), kErrorOk);