| @@ -1,55 +1,164 @@ |
| 1 | 1 | <div style="font-size: 0.85em; color: #656d76; margin-bottom: 1em; padding: 0.5em; background: #f6f8fa; border-radius: 4px;"> |
| 2 | | -📄 Source: <a href="https://github.com/chipsalliance/caliptra-sw/blob/81c25695d5629ff7515137527804a0885c495331/auth-manifest/README.md" target="_blank">chipsalliance/caliptra-sw/auth-manifest/README.md</a> @ <code>81c2569</code> |
| 2 | +📄 Source: <a href="https://github.com/chipsalliance/caliptra-sw/blob/8f13b41132ddd85c3c2fa2c8ce5a766758b20fd8/auth-manifest/README.md" target="_blank">chipsalliance/caliptra-sw/auth-manifest/README.md</a> @ <code>8f13b41</code> |
| 3 | 3 | </div> |
| 4 | 4 | |
| 5 | 5 | ## SOC Manifest |
| 6 | 6 | |
| 7 | | -The Caliptra SOC manifest has two main components: |
| 7 | +The Caliptra SOC manifest has two main components: [Preamble](#preamble) and [Image Metadata Collection](#image-metadata-collection) |
| 8 | 8 | |
| 9 | | -- ### **Preamble** |
| 10 | | - The Preamble section contains the authorization manifest ECC and LMS public keys of the vendor and the owner. These public keys correspond to the private keys that sign the Image Metadata Collection (IMC) section. These signatures are included in the Preamble. The Caliptra firmware’s ECC and LMS private keys endorse the manifest’s public keys, and these endorsements (signatures) are part of the Preamble as well. |
| 9 | +### **Preamble** |
| 11 | 10 | |
| 12 | | - *Note: All fields are little endian unless specified* |
| 11 | + The Preamble section contains the authorization manifest **ECC** and **PQC (LMS or MLDSA)** public keys of the vendor and the owner. |
| 12 | + These public keys correspond to the private keys that sign the [Image Metadata Collection (IMC)](#image-metadata-collection) section. |
| 13 | + Those signatures are also stored in the Preamble. |
| 14 | + The Caliptra firmware's ECC and PQC private keys endorse the manifest's public keys, and these endorsements (signatures) are part of the Preamble as well. |
| 15 | + |
| 16 | + *Note: All fields are little endian unless specified* |
| 13 | 17 | |
| 14 | 18 | | Field | Size (bytes) | Description | |
| 15 | | -| ------- | -------------- | ------------ | |
| 16 | | -| Manifest Marker | 4 | Magic Number marking the start of the manifest. The value must be 0x41544D4E (‘ATMN’ in ASCII) | |
| 17 | | -| Manifest Size | 4 | Size of the full manifest structure | |
| 18 | | -| Version | 4 | Manifest version | |
| 19 | | -| Flags | 4 | Feature flags.<br />**Bit0:** - Vendor Signature Required. If set, the vendor public keys will be used to verify the signatures signed with the <br />vendor private key. Otherwise, vendor signatures will not be used for verification.<br />**Bit1-Bit31:** Reserved | |
| 20 | | -| Vendor ECC Public Key | 96 | Vendor ECC P-384 public key used to verify the IMC Signature. <br> **X-Coordinate:** Public Key X-Coordinate (48 bytes) <br> **Y-Coordinate:** Public Key Y-Coordinate (48 bytes) | |
| 21 | | -| Vendor LMS Public Key | 48 | Vendor LMS public key used to verify the IMC Signature. <br> **tree_type:** LMS Algorithm Type (4 bytes) <br> **otstype:** LMS Ots Algorithm Type (4 bytes) <br> **id:** (16 bytes) <br> **digest:** (24 bytes) <br> Note: If LMS validation is not required, this should field should be zeroed out. | |
| 22 | | -| Vendor ECC Signature | 96 | Vendor ECDSA P-384 signature of the Version, Flags, Vendor ECC and LMS public keys, hashed using SHA2-384. <br> **R-Coordinate:** Random Point (48 bytes) <br> **S-Coordinate:** Proof (48 bytes) | |
| 23 | | -| Vendor LMS Signature | 1620 | Vendor LMS signature of the Version, Flags, Vendor ECC and LMS public keys, hashed using SHA2-384. <br> **q:** Leaf of the Merkle tree where the OTS public key appears (4 bytes) <br> **ots:** Lmots Signature (1252 bytes) <br> **tree_type:** Lms Algorithm Type (4 bytes) <br> **tree_path:** Path through the tree from the leaf associated with the LM-OTS signature to the root. (360 bytes) <br> Note: If LMS validation is not required, this should field should be zeroed out. | |
| 24 | | -| Owner ECC Public Key | 96 | Owner ECC P-384 public key used to verify the IMC Signature. <br> **X-Coordinate:** Public Key X-Coordinate (48 bytes) <br> **Y-Coordinate:** Public Key Y-Coordinate (48 bytes) | |
| 25 | | -| Owner LMS Public Key | 48 | Owner LMS public key used to verify the IMC Signature. <br> **tree_type:** LMS Algorithm Type (4 bytes) <br> **otstype:** LMS Ots Algorithm Type (4 bytes) <br> **id:** (16 bytes) <br> **digest:** (24 bytes) <br> Note: If LMS validation is not required, this should field should be zeroed out. | |
| 26 | | -| Owner ECC Signature | 96 | Owner ECDSA P-384 signature of the Owner ECC and LMS public keys, hashed using SHA2-384. <br> **R-Coordinate:** Random Point (48 bytes) <br> **S-Coordinate:** Proof (48 bytes) | |
| 27 | | -| Owner LMS Signature | 1620 | Owner LMS signature of the Owner ECC and LMS public keys, hashed using SHA2-384. <br> **q:** Leaf of the Merkle tree where the OTS public key appears (4 bytes) <br> **ots:** Lmots Signature (1252 bytes) <br> **tree_type:** Lms Algorithm Type (4 bytes) <br> **tree_path:** Path through the tree from the leaf associated with the LM-OTS signature to the root. (360 bytes) <br> Note: If LMS validation is not required, this should field should be zeroed out. | |
| 28 | | -| IMC Vendor ECC Signature | 96 | Vendor ECDSA P-384 Signature of the Image Metadata Collection hashed using SHA2-384.<br />**X-Coordinate:** Public Key X-Coordinate (48 bytes)<br />**Y-Coordinate:** Public Key Y-Coordinate(48bytes) | |
| 29 | | -| IMC Vendor LMS Signature | 1620 | Vendor LMOTS-SHA192-W4 signature of the Image Metadata Collection hashed using SHA2-384.<br />**q:** Leaf of the Merkle tree where the OTS public key appears (4 bytes)<br />**ots:** Lmots Signature (1252 bytes)<br />**tree_type:** Lms Algorithm Type (4 bytes)<br />**tree_path:** Path through the tree from the leaf associated with the LM-OTS signature to the root. (360 bytes)<br />Note: If LMS validation is not required, this field should be zeroed out. | |
| 30 | | -| IMC Owner ECC Signature | 96 | Owner ECDSA P-384 Signature of the Image Metadata Collection hashed using SHA2-384.<br />**X-Coordinate:** Public Key X-Coordinate (48 bytes)<br />**Y-Coordinate:** Public Key Y-Coordinate(48bytes) | |
| 31 | | -| IMC Owner LMS Signature | 1620 | Owner LMOTS-SHA192-W4 signature of the Image Metadata Collection hashed using SHA2-384<br />**q:** Leaf of the Merkle tree where the OTS public key appears (4 bytes)<br />**ots:** Lmots Signature (1252 bytes)<br /> **tree_type:** Lms Algorithm Type (4 bytes)<br /> **tree_path:** Path through the tree from the leaf associated with the LM-OTS signature to the root. (360 bytes)<br /> Note: If LMS validation is not required, this field should be zeroed out. | |
| 19 | +| ---------------------------------- | ------------ | ----------- | |
| 20 | +| **Manifest Marker** | 4 | Magic number marking the start of the manifest. The value must be `0x324D5441` (`'ATM2'` in ASCII). | |
| 21 | +| **Preamble Size** | 4 | Size of the Preamble in bytes. | |
| 22 | +| **Version** | 4 | Manifest version. The current version is `0x00000002`. | |
| 23 | +| **SVN** | 4 | Security Version Number used for anti-rollback. The maximum value is vendor-defined and is limited by the maximum size of the Caliptra fuse allocated for anti-rollback. | |
| 24 | +| **Flags** | 4 | Manifest feature flags.<br/>**Bit 0** – Vendor Signature Required. If set, the vendor public keys (ECC and PQC) will be used to verify signatures signed with the vendor private keys. If clear, vendor signatures are not used for verification.<br/>**Bits 1–31** – Reserved. | |
| 25 | +| **Vendor ECC Public Key** | 96 | Vendor ECC P-384 public key used to verify the IMC signature and endorse PQC keys.<br/>**X-Coordinate:** 48 bytes<br/>**Y-Coordinate:** 48 bytes. | |
| 26 | +| **Vendor PQC Public Key (LMS or MLDSA)** | 2592 | Vendor **PQC** public key used to verify the IMC signature and to endorse the vendor measurement keys.<br/>This field is sized to support **MLDSA87** (2592-byte public key).<br/>When:<br/>• **MLDSA87** is used, the field holds the full 2592-byte MLDSA87 public key.<br/>• **LMS** (e.g., LMS-SHA192-H15) is used, the LMS public key (e.g., 48 bytes) is stored at the beginning of the field and the remaining bytes **must be zeroed**. | |
| 27 | +| **Vendor ECC Signature** | 96 | Vendor ECDSA P-384 signature over the Preamble fields that are covered by policy, typically including Version, SVN, Flags, and vendor ECC/PQC public keys, hashed using SHA2-384.<br/>**R-Coordinate:** 48 bytes<br/>**S-Coordinate:** 48 bytes. | |
| 28 | +| **Vendor PQC Signature (LMS or MLDSA)** | 4628 | Vendor PQC signature over the same Preamble fields as the ECC signature.<br/>This field is sized to support the **MLDSA87** signature (4628 bytes).<br/>When:<br/>• **MLDSA87** is used, the entire field holds the MLDSA87 signature (per FIPS-204 definition, up to 4628 bytes).<br/>• **LMS** (e.g., LMS-SHA192-H15 / LMOTS-SHA192-W4) is used, the LMS signature (e.g., ~1620 bytes) is stored at the beginning and the remaining bytes **must be zeroed**.<br/>If PQC validation is not required, this field **must be zeroed**. | |
| 29 | +| **Owner ECC Public Key** | 96 | Owner ECC P-384 public key used to verify the IMC signature and endorse PQC keys on behalf of the platform owner.<br/>**X-Coordinate:** 48 bytes<br/>**Y-Coordinate:** 48 bytes. | |
| 30 | +| **Owner PQC Public Key (LMS or MLDSA)** | 2592 | Owner **PQC** public key used to verify the IMC signature and to endorse owner measurement keys.<br/>Same encoding rules as **Vendor PQC Public Key (LMS or MLDSA)**: MLDSA87 fills the field; LMS occupies the beginning and zero-pads the rest. | |
| 31 | +| **Owner ECC Signature** | 96 | Owner ECDSA P-384 signature over the Preamble fields that are covered by policy for the owner (Version, SVN, Flags, owner ECC/PQC keys, etc.), hashed using SHA2-384.<br/>**R-Coordinate:** 48 bytes<br/>**S-Coordinate:** 48 bytes. | |
| 32 | +| **Owner PQC Signature (LMS or MLDSA)** | 4628 | Owner PQC signature over the same Preamble fields as the Owner ECC signature.<br/>Same layout rules as **Vendor PQC Signature (LMS or MLDSA)** (MLDSA87 uses full field; LMS uses prefix + zero padding).<br/>If PQC validation is not required, this field **must be zeroed**. | |
| 33 | +| **IMC Vendor ECC Signature** | 96 | Vendor ECDSA P-384 signature over the **Image Metadata Collection (IMC)**, hashed using SHA2-384.<br/>**R-Coordinate:** 48 bytes<br/>**S-Coordinate:** 48 bytes. | |
| 34 | +| **IMC Vendor PQC Signature (LMS or MLDSA)** | 4628 | Vendor PQC signature over the **IMC**.<br/>Uses the same encoding as **Vendor PQC Signature (LMS or MLDSA)**, but the signed message is the serialized IMC instead of the Preamble.<br/>If PQC validation is not required, this field **must be zeroed**. | |
| 35 | +| **IMC Owner ECC Signature** | 96 | Owner ECDSA P-384 signature over the **IMC**, hashed using SHA2-384.<br/>**R-Coordinate:** 48 bytes<br/>**S-Coordinate:** 48 bytes. | |
| 36 | +| **IMC Owner PQC Signature (LMS or MLDSA)** | 4628 | Owner PQC signature over the **IMC**.<br/>Same encoding rules as the other PQC signature fields (LMS or MLDSA; unused bytes zero-padded).<br/>If PQC validation is not required, this field **must be zeroed**. | |
| 32 | 37 | |
| 33 | 38 | |
| 34 | | -- ### **Image Metadata Entry** |
| 39 | +### **Image Metadata Collection** |
| 40 | + |
| 41 | +The Image Metadata Collection (IMC) is a collection of Image Metadata Entries (IMEs). |
| 42 | +Each IME has a hash that matches a SOC image. |
| 43 | +The manifest vendor and owner private keys sign the IMC. |
| 44 | +The Preamble holds the IMC signatures. |
| 45 | +The manifest IMC vendor signatures are optional and are validated only if the **Flags Bit 0 = 1**. |
| 46 | +Up to 80 image hashes are supported. |
| 47 | + |
| 35 | 48 | | Field | Size (bytes) | Description | |
| 36 | | -| --------------- | -------------- | ---------------------------------- | |
| 37 | | -| Firmware Id | u32 | Id of the image | |
| 38 | | -| Flags | u32 | See `METADATA_ENTRY_FLAGS` below | |
| 39 | | -| Digest | u32[12] | Digest of the image | |
| 49 | +| -------------------------------- | ------------ | --------------------------------------- | |
| 50 | +| **Image Metadata Entry (IME) Count** | 4 | Number of IME(s) in the IMC. | |
| 51 | +| **Image Metadata Entry (N)** | Variable | List of Image Metadata Entry structures | |
| 52 | + |
| 53 | +#### **Image Metadata Entry** |
| 54 | + |
| 55 | +| Field | Size (bytes) | Description | |
| 56 | +| ----------------------- | ------------ | ----------- | |
| 57 | +| **Firmware ID (`fw_id`)** | 4 | Platform-wide identifier for a firmware image. It must be unique across the active vendor + owner and owner-only Image Metadata Collections. | |
| 58 | +| **Component ID (`component_id`)** | 4 | Identifies the image component to be loaded. This corresponds to the `ComponentIdentifier` field defined in the DMTF PLDM Firmware Update Specification (DSP0267). | |
| 59 | +| **Classification (`classification`)** | 4 | Component classification value associated with the image. | |
| 60 | +| **Flags (`flags`)** | 4 | Image-specific flags.<br/>**Bits 1:0:** Image source.<br/>**Bit 2:** If set, the image digest will **not** be verified; otherwise, the metadata image digest will be compared against the calculated digest of the image.<br/>**Bits 8–14:** Firmware execution control bit mapped to this image.<br/>Other bits: reserved. | |
| 61 | +| **Image Load Address Low (`image_load_address.lo`)** | 4 | Low 4 bytes of the 64-bit AXI address where the image will be loaded for verification and execution. | |
| 62 | +| **Image Load Address High (`image_load_address.hi`)** | 4 | High 4 bytes of the 64-bit AXI address where the image will be loaded for verification and execution. | |
| 63 | +| **Image Staging Address Low (`image_staging_address.lo`)** | 4 | Low 4 bytes of the 64-bit AXI address where the image will be temporarily written during firmware update download and verification. | |
| 64 | +| **Image Staging Address High (`image_staging_address.hi`)** | 4 | High 4 bytes of the 64-bit AXI address where the image will be temporarily written during firmware update download and verification. | |
| 65 | +| **Image Digest (`digest`)** | 48 | SHA2-384 digest of the SOC image. | |
| 40 | 66 | |
| 41 | 67 | |
| 42 | | -- ### **METADATA ENTRY FLAGS** |
| 43 | | -| Field | Size (bits) | Description | |
| 44 | | -| -------------------- | ------------- | ----------------- | |
| 45 | | -| Image Source | 2 | 1: InRequest | |
| 46 | | -| Ignore Auth Check | 1 | If set, the image digest is not compared for the firmware id | |
| 68 | +## Owner Authorization Manifest |
| 69 | + |
| 70 | +The Owner Authorization Manifest is a smaller, owner-only manifest loaded with |
| 71 | +[`SET_OWNER_AUTH_MANIFEST`](../runtime/README.md#set_owner-auth-manifest). It |
| 72 | +carries owner public keys, owner signatures, and an owner-only Image Metadata |
| 73 | +Collection. Runtime stores these entries separately from the vendor + owner |
| 74 | +collection loaded by `SET_AUTH_MANIFEST` and searches the owner-only collection |
| 75 | +only if the vendor + owner collection has no matching firmware ID. Runtime |
| 76 | +rejects either manifest if one of its active firmware IDs is already present in |
| 77 | +the other active collection. |
| 78 | + |
| 79 | +The `OwnerAuthorizationManifest` uses the same encoding rules described for the |
| 80 | +SOC Manifest: scalar `u32` fields are little-endian, ECC key and signature |
| 81 | +scalars are stored as big-endian `u32` words, and PQC fields contain their |
| 82 | +algorithm-defined byte encoding. |
| 83 | + |
| 84 | +### **Owner Preamble** |
| 85 | + |
| 86 | +| Offset | Field | Size (bytes) | Description | |
| 87 | +| ------ | ----- | ------------ | ----------- | |
| 88 | +| `0x0000` | **Manifest Marker (`marker`)** | 4 | Magic number identifying an Owner Authorization Manifest. It must be `0x4D4F574F`, which serializes as `OWOM`. | |
| 89 | +| `0x0004` | **Preamble Size (`size`)** | 4 | Size of the Owner Authorization Manifest Preamble. It must be 12,156 bytes (`0x2F7C`). | |
| 90 | +| `0x0008` | **Version (`version`)** | 4 | Owner manifest format version. This field is covered by the owner public-key endorsement signatures. | |
| 91 | +| `0x000C` | **SVN (`svn`)** | 4 | Security Version Number used for anti-rollback. The generator accepts values from 0 through 255. When the check is enabled, Runtime requires this value to be at least the binary value in `SS_STRAP_GENERIC[3][15:8]`; see the [Owner Authorization Manifest minimum SVN contract](../runtime/README.md#owner-authorization-manifest-minimum-svn). | |
| 92 | +| `0x0010` | **Reserved (`flags`)** | 4 | Reserved. Must be zero. | |
| 93 | +| `0x0014` | **Owner ECC Public Key (`owner_pub_keys.ecc_pub_key`)** | 96 | Owner ECDSA P-384 public key carried by this manifest.<br/>**X-Coordinate:** 48 bytes.<br/>**Y-Coordinate:** 48 bytes. | |
| 94 | +| `0x0074` | **Owner PQC Public Key (`owner_pub_keys.pqc_pub_key`)** | 2592 | Owner MLDSA87 or LMS-SHA192-H15 public key. MLDSA87 uses all 2,592 bytes. An LMS key occupies the first 48 bytes and the remaining bytes are zero. | |
| 95 | +| `0x0A94` | **Owner Public-Keys ECC Signature (`owner_pub_keys_signatures.ecc_sig`)** | 96 | ECDSA P-384 signature made by the firmware-image owner key over the owner signed-data range.<br/>**R-Coordinate:** 48 bytes.<br/>**S-Coordinate:** 48 bytes. | |
| 96 | +| `0x0AF4` | **Owner Public-Keys PQC Signature (`owner_pub_keys_signatures.pqc_sig`)** | 4628 | MLDSA87 or LMS signature made by the firmware-image owner key over the owner signed-data range. MLDSA87 uses all 4,628 bytes. An LMS signature occupies the first 1,620 bytes and the remaining bytes are zero. | |
| 97 | +| `0x1D08` | **IMC Owner ECC Signature (`owner_image_metdata_signatures.ecc_sig`)** | 96 | ECDSA P-384 signature made by this manifest's owner key over the Image Metadata Collection.<br/>**R-Coordinate:** 48 bytes.<br/>**S-Coordinate:** 48 bytes. | |
| 98 | +| `0x1D68` | **IMC Owner PQC Signature (`owner_image_metdata_signatures.pqc_sig`)** | 4628 | MLDSA87 or LMS signature made by this manifest's owner key over the Image Metadata Collection. It uses the same fixed-field encoding as the Owner Public-Keys PQC Signature. | |
| 47 | 99 | |
| 48 | 100 | |
| 49 | | -- ### **Image Metadata Collection** |
| 50 | | -The Image Metadata Collection (IMC) is a collection of Image Metadata entries (IME). Each IME has a hash that matches a SOC images. The manifest vendor and owner private keys sign the IMC. The Preamble holds the IMC signatures. The manifest IMC vendor signatures are optional and are validated only if the FLAGS field Bit 0 = 1. Up to 127 image hashes are supported. |
| 101 | +The Owner Authorization Manifest does not contain a PQC algorithm selector. |
| 102 | +Runtime obtains the algorithm from the loaded Caliptra firmware image and, in a |
| 103 | +provisioned lifecycle, requires it to match the fused PQC key type. Runtime |
| 104 | +verifies both ECC and the selected PQC algorithm for each signature pair. |
| 51 | 105 | |
| 52 | | -| Field | Size (bytes) | Description | |
| 53 | | -| ------- | -------------- | ------------ | |
| 54 | | -| Image Metadata Entry (IME) Count | 4 | Number of IME(s) in the IMC | |
| 55 | | -| Image Metadata Entry (N) | Variable | List of Image Metadata Entry structures | |
| 106 | +Signature coverage and trust chaining are as follows: |
| 107 | + |
| 108 | +1. `owner_pub_keys_signatures` covers the serialized bytes from `version` |
| 109 | + through the end of `owner_pub_keys`, inclusive. The marker and Preamble size |
| 110 | + are excluded from this signed range and are instead checked against their |
| 111 | + required values. Runtime verifies these signatures with the owner keys from |
| 112 | + the loaded Caliptra firmware image. |
| 113 | +2. `owner_image_metdata_signatures` covers the serialized owner-only Image |
| 114 | + Metadata Collection. Runtime verifies these signatures with the |
| 115 | + `owner_pub_keys` carried in this manifest, after those keys have been chained |
| 116 | + to the firmware-image owner keys in step 1. |
| 117 | + |
| 118 | +For ECDSA and LMS, the signature input is the SHA2-384 digest of the covered |
| 119 | +bytes. MLDSA87 signs the covered bytes directly. |
| 120 | + |
| 121 | +### **Owner Image Metadata Collection** |
| 122 | + |
| 123 | +| Offset | Field | Size (bytes) | Description | |
| 124 | +| ------ | ----- | ------------ | ----------- | |
| 125 | +| `0x2F7C` | **Image Metadata Entry Count (`entry_count`)** | 4 | Number of active entries. It must be from 1 through 32. | |
| 126 | +| `0x2F80` | **Image Metadata Entries (`image_metadata_list`)** | 2560 | Fixed-capacity array of 32 80-byte entries. Each entry uses the [Image Metadata Entry](#image-metadata-entry) layout described above. | |
| 127 | + |
| 128 | + |
| 129 | +The canonical encoding generated by the authorization manifest app serializes |
| 130 | +all 32 entry slots, including unused slots, and signs the complete 2,564-byte |
| 131 | +collection. Unused slots retain the default encoding: `fw_id` and |
| 132 | +`component_id` are `0xFFFFFFFF`, and all other fields are zero. The app output |
| 133 | +contains exactly the serialized `OwnerAuthorizationManifest` with no trailing |
| 134 | +padding. |
| 135 | + |
| 136 | +Incoming active entries must have unique `fw_id` values, both within this |
| 137 | +manifest and across the installed vendor + owner manifest. A collision rejects |
| 138 | +the command without modifying either active collection. After verification, |
| 139 | +Runtime replaces the existing owner-only collection with the incoming |
| 140 | +collection. |
| 141 | + |
| 142 | +### **Generating an Owner Authorization Manifest** |
| 143 | + |
| 144 | +Generate one with the authorization manifest app: |
| 145 | + |
| 146 | +```bash |
| 147 | +cargo run -p caliptra-auth-manifest-app -- create-owner-auth-man \ |
| 148 | + --version 1 \ |
| 149 | + --svn 0 \ |
| 150 | + --pqc-key-type 3 \ |
| 151 | + --key-dir path/to/key-files \ |
| 152 | + --config auth-manifest/app/src/auth-man.toml \ |
| 153 | + --out owner-auth-man.bin |
| 154 | +``` |
| 155 | + |
| 156 | +The command uses `owner_fw_key_config`, `owner_man_key_config`, and |
| 157 | +`image_metadata_list` from the TOML configuration. `owner_fw_key_config` supplies |
| 158 | +the firmware-image owner private keys that endorse the manifest's owner public |
| 159 | +keys. `owner_man_key_config` supplies the owner public keys carried in the |
| 160 | +manifest and the corresponding private keys used to sign the Image Metadata |
| 161 | +Collection. Vendor key sections are ignored for owner-only manifest generation. |
| 162 | + |
| 163 | +`--pqc-key-type 1` selects MLDSA87 and `--pqc-key-type 3` selects |
| 164 | +LMS-SHA192-H15. |