9 #include <unordered_set>
11 #include "gtest/gtest.h"
13 #include "sw/device/silicon_creator/lib/drivers/mock_lifecycle.h"
14 #include "sw/device/silicon_creator/lib/drivers/mock_otp.h"
15 #include "sw/device/silicon_creator/lib/drivers/mock_rnd.h"
16 #include "sw/device/silicon_creator/lib/error.h"
17 #include "sw/device/silicon_creator/lib/sigverify/rsa_verify.h"
18 #include "sw/device/silicon_creator/rom_ext/sigverify_keys.h"
19 #include "sw/device/silicon_creator/testing/rom_test.h"
21 #include "otp_ctrl_regs.h"
23 namespace sigverify_keys_unittest {
25 using ::testing::Return;
27 TEST(Keys, UniqueIds) {
28 std::unordered_set<uint32_t> ids;
29 for (
size_t i = 0; i < kSigverifyRsaKeysCnt; ++i) {
30 ids.insert(sigverify_rsa_key_id_get(&kSigverifyRsaKeys[i].key.n));
33 EXPECT_EQ(ids.size(), kSigverifyRsaKeysCnt);
40 uint32_t
Gcd(uint32_t a, uint32_t b) {
42 std::tie(a, b) = std::make_tuple(b, a % b);
47 TEST(KeysStep, IsCorrect) {
48 if (kSigverifyRsaKeysCnt > 1) {
49 EXPECT_LT(kSigverifyRsaKeysStep, kSigverifyRsaKeysCnt);
50 EXPECT_EQ(Gcd(kSigverifyRsaKeysStep, kSigverifyRsaKeysCnt), 1);
98 .
key = &kSigverifyRsaKeys[0].
key,
107 0x51f8a313, 0xdf9cadc8, 0x09849651, 0x3396dc50, 0x2523715f,
108 0x3f261117, 0xbc891dc0, 0x25e90a18, 0x7f3d68ef, 0xa49e89a9,
109 0x1e126205, 0x566de5eb, 0x1302edc8, 0x85a11622, 0xedf3b295,
110 0xbf2ead9d, 0xe2f7f62e, 0x82014f37, 0x62114a4f, 0x64d71f3d,
111 0xef9f97ae, 0x222a67e2, 0x47fd6d82, 0x8fd3f870, 0xdf07454b,
112 0x1a627fc1, 0x5697e480, 0xb5b4857d, 0x865bd8ce, 0x1f7fdc3a,
113 0x436807eb, 0xf0954b96, 0xd7556c4e, 0x6056c8d4, 0xc5e7875c,
114 0xdc4d5cdc, 0xba128354, 0xb57fccef, 0x367d4b88, 0x2b54c85e,
115 0x711b9cab, 0x747b8c65, 0xe98fb5d1, 0x272c0705, 0x9db1bf83,
116 0x33e18070, 0x7b4f73b1, 0x584e0de9, 0x75e103c2, 0x68062c61,
117 0x910b2c9c, 0x2af9ff03, 0x114d2bef, 0x278c2036, 0x1e63481e,
118 0x8fefabfd, 0xdac1fbaa, 0x769d708c, 0x94f5c336, 0xa07835b3,
119 0x0f1ee10e, 0xfe905d90, 0x5b561fe7, 0x686dd4a6, 0xb6e3507f,
120 0xadba5635, 0x9e463d0e, 0xa782afaf, 0x43366fa1, 0x7146b3c4,
121 0x9f4d2baf, 0xd9aed324, 0x36f0a5a2, 0xfa041f9d, 0x32f2fb3a,
122 0x6b56b1df, 0x2fbfceae, 0x3fe7dbe3, 0x8458b9db, 0x29860b30,
123 0x40bc9b9b, 0x36515839, 0xb414bfab, 0x6df1cfd2, 0x50431bef,
124 0x3fb2c08b, 0x7b733a06, 0x534c39f1, 0x5cd5f48b, 0xcc488cae,
125 0xb08b1fca, 0x62f9c45a, 0x72e3e064, 0x34f7fb4e, 0x64a20ebd,
131 TEST(RsaVerifyTestCases, AllKeys) {
132 std::unordered_set<uint32_t> ids;
133 for (
auto const &test_case : kRsaVerifyTestCases) {
134 ids.insert(sigverify_rsa_key_id_get(&test_case.key->n));
137 EXPECT_EQ(ids.size(), kSigverifyRsaKeysCnt);
142 public testing::WithParamInterface<RsaVerifyTestCase> {};
145 uint32_t flash_exec = 0;
146 EXPECT_EQ(sigverify_rsa_verify(&GetParam().sig, GetParam().key, &kDigest,
147 kLcStateProd, &flash_exec),
149 EXPECT_EQ(flash_exec, kSigverifyRsaSuccess);
152 INSTANTIATE_TEST_SUITE_P(AllCases, SigverifyRsaVerify,
153 testing::ValuesIn(kRsaVerifyTestCases));