5 #ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_MANIFEST_H_
6 #define OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_MANIFEST_H_
12 #include "sw/device/silicon_creator/lib/drivers/lifecycle.h"
13 #include "sw/device/silicon_creator/lib/epmp_state.h"
14 #include "sw/device/silicon_creator/lib/error.h"
15 #include "sw/device/silicon_creator/lib/keymgr_binding_value.h"
16 #include "sw/device/silicon_creator/lib/sigverify/ecdsa_p256_key.h"
17 #include "sw/device/silicon_creator/lib/sigverify/rsa_key.h"
18 #include "sw/device/silicon_creator/lib/sigverify/spx_key.h"
81 #define MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL 0xA5A5A5A5
90 kManifestSelectorBitDeviceIdFirst = 0,
91 kManifestSelectorBitDeviceIdLast = 7,
96 kManifestSelectorBitManufStateCreator = 8,
100 kManifestSelectorBitManufStateOwner = 9,
104 kManifestSelectorBitLifeCycleState = 10,
173 kManifestVersionMajor1 = CHIP_MANIFEST_VERSION_MAJOR_1,
174 kManifestVersionMajor2 = CHIP_MANIFEST_VERSION_MAJOR_2,
400 kManifestExtIdSpxKey = 0x94ac01ec,
401 kManifestExtIdSpxSignature = 0xad77f84a,
405 kManifestExtNameSpxKey = 0x30545845,
409 kManifestExtNameSpxSignature = 0x31545845,
446 #define MANIFEST_EXTENSIONS(X) \
447 X(0, manifest_ext_spx_key_t, spx_key, kManifestExtIdSpxKey, true ) \
448 X(1, manifest_ext_spx_signature_t, spx_signature, kManifestExtIdSpxSignature, false)
451 #if defined(OT_PLATFORM_RV32) || defined(MANIFEST_UNIT_TEST_)
467 return kErrorManifestBadVersionMajor;
472 return kErrorManifestBadSignedRegion;
481 return kErrorManifestBadCodeRegion;
488 return kErrorManifestBadEntryPoint;
494 return kErrorManifestBadExtension;
516 kDigestRegionOffset = offsetof(
manifest_t, usage_constraints) +
520 .start = (
const char *)
manifest + kDigestRegionOffset,
555 #define DEFINE_GETTER(index_, type_, name_, id_, _) \
556 OT_WARN_UNUSED_RESULT \
558 inline rom_error_t manifest_ext_get_##name_(const manifest_t *manifest, \
559 const type_ **name_) { \
561 kMinSize = CHIP_MANIFEST_SIZE, \
562 kMaxSize = CHIP_ROM_EXT_RESIZABLE_SIZE_MAX - sizeof(type_), \
564 const manifest_ext_table_entry_t *entry = \
565 &manifest->extensions.entries[index_]; \
566 uint32_t table_id = entry->identifier; \
567 uint32_t offset = entry->offset; \
568 if (launder32(table_id) == id_) { \
569 HARDENED_CHECK_EQ(table_id, id_); \
570 if (launder32(offset) >= kMinSize && launder32(offset) < kMaxSize) { \
571 HARDENED_CHECK_GE(offset, kMinSize); \
572 HARDENED_CHECK_LT(offset, kMaxSize); \
573 uintptr_t ext_address = (uintptr_t)((char *)manifest + entry->offset); \
574 uint32_t header_id = \
575 ((manifest_ext_header_t *)ext_address)->identifier; \
576 if (launder32(header_id) == id_) { \
577 HARDENED_CHECK_EQ(header_id, id_); \
578 *name_ = (const type_ *)ext_address; \
583 return kErrorManifestBadExtension; \
589 MANIFEST_EXTENSIONS(DEFINE_GETTER)
603 rom_error_t manifest_ext_get_spx_signature(