[sw/silicon_creator] Update manifest fields

This change:
- Removes `extension_*`, `reserved*`, `usage_constraints`,
`lockdown_info`, `image_version`, and
- Adds `image_major_version`, `image_minor_version`, `binding_value`,
and `max_key_version`.

Fixes #5953 #5954

Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/silicon_creator/lib/manifest.h b/sw/device/silicon_creator/lib/manifest.h
index 93174c0..842e2d4 100644
--- a/sw/device/silicon_creator/lib/manifest.h
+++ b/sw/device/silicon_creator/lib/manifest.h
@@ -38,10 +38,6 @@
    */
   uint32_t identifier;
   /**
-   * FIXME: remove this field.
-   */
-  uint32_t reserved0;
-  /**
    * Image signature.
    *
    * The signed region of an image starts at `image_length` and ends at the
@@ -54,9 +50,13 @@
    */
   uint32_t image_length;
   /**
-   * FIXME: Replace with max_version, min_version.
+   * Image major version.
    */
-  uint32_t image_version;
+  uint32_t image_major_version;
+  /**
+   * Image minor version.
+   */
+  uint32_t image_minor_version;
   /**
    * Image timestamp.
    */
@@ -66,51 +66,33 @@
    */
   uint32_t exponent;
   /**
-   * FIXME: remove this field.
+   * Binding value used by key manager to derive secret values.
+   *
+   * A change in this value changes the secret value of key manager, and
+   * consequently, the versioned keys and identity seeds generated at subsequent
+   * boot stages.
    */
-  uint32_t reserved1;
+  uint32_t binding_value[8];
   /**
-   * FIXME: Replace these with binding_tag and max_key_version.
+   * Maximum allowed version for keys generated at the next boot stage.
    */
-  uint32_t usage_constraints[8];
-  uint32_t lockdown_info[4];
+  uint32_t max_key_version;
   /**
    * Modulus of the signer's RSA public key.
    */
   sigverify_rsa_buffer_t modulus;
-  /**
-   * Extension fields.
-   * FIXME: Remove these until we have a clear use-case.
-   */
-  uint32_t extension0_offset;
-  uint32_t extension0_checksum;
-  uint32_t extension1_offset;
-  uint32_t extension1_checksum;
-  uint32_t extension2_offset;
-  uint32_t extension2_checksum;
-  uint32_t extension3_offset;
-  uint32_t extension3_checksum;
 } manifest_t;
 
 OT_ASSERT_MEMBER_OFFSET(manifest_t, identifier, 0);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, reserved0, 4);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, signature, 8);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, image_length, 392);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, image_version, 396);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, signature, 4);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, image_length, 388);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, image_major_version, 392);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, image_minor_version, 396);
 OT_ASSERT_MEMBER_OFFSET(manifest_t, image_timestamp, 400);
 OT_ASSERT_MEMBER_OFFSET(manifest_t, exponent, 408);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, reserved1, 412);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, usage_constraints, 416);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, lockdown_info, 448);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, modulus, 464);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension0_offset, 848);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension0_checksum, 852);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension1_offset, 856);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension1_checksum, 860);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension2_offset, 864);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension2_checksum, 868);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension3_offset, 872);
-OT_ASSERT_MEMBER_OFFSET(manifest_t, extension3_checksum, 876);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, binding_value, 412);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, max_key_version, 444);
+OT_ASSERT_MEMBER_OFFSET(manifest_t, modulus, 448);
 OT_ASSERT_SIZE(manifest_t, MANIFEST_SIZE);
 
 /**
diff --git a/sw/device/silicon_creator/lib/manifest_size.h b/sw/device/silicon_creator/lib/manifest_size.h
index 3aae1fb..3cffc2c 100644
--- a/sw/device/silicon_creator/lib/manifest_size.h
+++ b/sw/device/silicon_creator/lib/manifest_size.h
@@ -8,6 +8,6 @@
 /**
  * Manifest size for boot stages stored in flash (in bytes).
  */
-#define MANIFEST_SIZE 880
+#define MANIFEST_SIZE 832
 
 #endif  // OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_MANIFEST_SIZE_H_
diff --git a/sw/host/rom_ext_image_tools/signer/image/src/manifest.rs b/sw/host/rom_ext_image_tools/signer/image/src/manifest.rs
index 8e6c6a9..faf8755 100644
--- a/sw/host/rom_ext_image_tools/signer/image/src/manifest.rs
+++ b/sw/host/rom_ext_image_tools/signer/image/src/manifest.rs
@@ -26,31 +26,22 @@
 //      sw/device/silicon_creator/lib/manifest.h \
 //      -- -I./ -Isw/device/lib/base/freestanding
 
-pub const MANIFEST_SIZE: u32 = 880;
+pub const MANIFEST_SIZE: u32 = 832;
 
 /// Manifest for boot stage images stored in flash.
 #[repr(C)]
 #[derive(FromBytes, AsBytes, Debug, Default)]
 pub struct Manifest {
     pub identifier: u32,
-    pub reserved0: u32,
     pub signature: SigverifyRsaBuffer,
     pub image_length: u32,
-    pub image_version: u32,
+    pub image_major_version: u32,
+    pub image_minor_version: u32,
     pub image_timestamp: u64,
     pub exponent: u32,
-    pub reserved1: u32,
-    pub usage_constraints: [u32; 8usize],
-    pub lockdown_info: [u32; 4usize],
+    pub binding_value: [u32; 8usize],
+    pub max_key_version: u32,
     pub modulus: SigverifyRsaBuffer,
-    pub extension0_offset: u32,
-    pub extension0_checksum: u32,
-    pub extension1_offset: u32,
-    pub extension1_checksum: u32,
-    pub extension2_offset: u32,
-    pub extension2_checksum: u32,
-    pub extension3_offset: u32,
-    pub extension3_checksum: u32,
 }
 
 /// A type that holds 96 32-bit words for RSA-3072.
@@ -73,22 +64,14 @@
 /// TODO(#6915): Convert this to a unit test after we start running rust tests during our builds.
 pub fn check_manifest_layout() {
     assert_eq!(offset_of!(Manifest, identifier), 0);
-    assert_eq!(offset_of!(Manifest, reserved0), 4);
-    assert_eq!(offset_of!(Manifest, signature), 8);
-    assert_eq!(offset_of!(Manifest, image_length), 392);
-    assert_eq!(offset_of!(Manifest, image_version), 396);
+    assert_eq!(offset_of!(Manifest, signature), 4);
+    assert_eq!(offset_of!(Manifest, image_length), 388);
+    assert_eq!(offset_of!(Manifest, image_major_version), 392);
+    assert_eq!(offset_of!(Manifest, image_minor_version), 396);
     assert_eq!(offset_of!(Manifest, image_timestamp), 400);
     assert_eq!(offset_of!(Manifest, exponent), 408);
-    assert_eq!(offset_of!(Manifest, reserved1), 412);
-    assert_eq!(offset_of!(Manifest, usage_constraints), 416);
-    assert_eq!(offset_of!(Manifest, lockdown_info), 448);
-    assert_eq!(offset_of!(Manifest, modulus), 464);
-    assert_eq!(offset_of!(Manifest, extension0_offset), 848);
-    assert_eq!(offset_of!(Manifest, extension0_checksum), 852);
-    assert_eq!(offset_of!(Manifest, extension1_offset), 856);
-    assert_eq!(offset_of!(Manifest, extension1_checksum), 860);
-    assert_eq!(offset_of!(Manifest, extension2_offset), 864);
-    assert_eq!(offset_of!(Manifest, extension2_checksum), 868);
-    assert_eq!(offset_of!(Manifest, extension3_offset), 872);
+    assert_eq!(offset_of!(Manifest, binding_value), 412);
+    assert_eq!(offset_of!(Manifest, max_key_version), 444);
+    assert_eq!(offset_of!(Manifest, modulus), 448);
     assert_eq!(size_of::<Manifest>(), MANIFEST_SIZE as usize);
 }