5 #include "sw/device/silicon_creator/rom_ext/sigverify_keys.h"
11 #include "sw/device/silicon_creator/lib/drivers/rnd.h"
22 static rom_error_t key_is_valid(sigverify_key_type_t key_type) {
23 switch (launder32(key_type)) {
24 case kSigverifyKeyTypeFirmwareTest:
27 case kSigverifyKeyTypeFirmwareProd:
30 case kSigverifyKeyTypeFirmwareDev:
39 rom_error_t sigverify_rsa_key_get(uint32_t key_id,
41 size_t cand_key_index = UINT32_MAX;
43 size_t i = ((uint64_t)rnd_uint32() * (uint64_t)kSigverifyRsaKeysCnt) >> 32;
45 for (; launder32(iter_cnt) < kSigverifyRsaKeysCnt; ++iter_cnt) {
47 size_t k_id = sigverify_rsa_key_id_get(&k->
key.
n);
48 if (launder32(k_id) == key_id) {
52 i += kSigverifyRsaKeysStep;
53 if (launder32(i) >= kSigverifyRsaKeysCnt) {
54 i -= kSigverifyRsaKeysCnt;
56 HARDENED_CHECK_LT(i, kSigverifyRsaKeysCnt);
60 if (launder32(cand_key_index) < kSigverifyRsaKeysCnt) {
61 HARDENED_CHECK_LT(cand_key_index, kSigverifyRsaKeysCnt);
63 key_is_valid(kSigverifyRsaKeys[cand_key_index].key_type);
65 *key = &kSigverifyRsaKeys[cand_key_index].
key;
69 return kErrorSigverifyBadKey;