diff --git a/.agents/index.md b/.agents/index.md new file mode 100644 index 000000000..3b70c5547 --- /dev/null +++ b/.agents/index.md @@ -0,0 +1,14 @@ +--- +okf_version: "0.1" +--- + +# .agents — MigTD institutional knowledge + +* [Agent guide](../AGENTS.md) - **Read first.** Core rules, session ritual, and links into everything below. +* [Knowledge index](knowledge/index.md) - All topical reference/playbook files (workflow, domain facts, build/release/test). +* [Azure WaitForRequest Error and ReportStatus Map](knowledge/azure-waitforrequest-errors.md) - Azure IGVM vmcall-raw/SPDM error logging and ReportStatus behavior. + +# Skills + +* [migtd-review](skills/migtd-review/SKILL.md) - Security and correctness review playbook, triage scripts, and CI gauntlet. +* [migtd-port](skills/migtd-port/SKILL.md) - Playbook for forward-porting Microsoft-fork changes onto an intel/main-based branch. diff --git a/.agents/knowledge/anti-patterns.md b/.agents/knowledge/anti-patterns.md new file mode 100644 index 000000000..b7a2087e7 --- /dev/null +++ b/.agents/knowledge/anti-patterns.md @@ -0,0 +1,30 @@ +--- +type: Reference +title: Anti-patterns — Things To NOT Do +description: Collected pushback items from past sessions — a checklist of mistakes to avoid repeating. +tags: [anti-patterns, checklist] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Anti-patterns — Things To NOT Do + +> Condensed in the root [agent guide](../../AGENTS.md). See +> [Domain Facts](domain-facts.md) and [Code Style](code-style.md). + +- ❌ Forget the DCO `Signed-off-by` trailer. +- ❌ Bundle unrelated changes into one commit. +- ❌ Use `expect()` / `unwrap()` in production paths. +- ❌ Rename parameters/fields gratuitously during a refactor. +- ❌ Add a feature gate when "always-on" is the obvious right answer. +- ❌ Dump full quotes or large buffers at log level INFO/DEBUG. +- ❌ Re-flag VMM DoS as a finding. +- ❌ Re-open the singleton-vector hypothesis for the cert_rot timeout. +- ❌ Increase a buffer size to *work around* a bug instead of fixing the bug. +- ❌ Run multiple `migtdemu.sh` invocations concurrently. +- ❌ Force-push without `--force-with-lease=:`. +- ❌ Force-push to `intel/*` or `ms/*` / `upstream/*` remotes. +- ❌ Run `cargo fmt` repo-wide; only touch files you modified. +- ❌ Add `.clawpatch/` or `.copilot-review-issues/` to source control + (gitignored). +- ❌ Touch code in a sibling clone (e.g. `../MigTD2`) from the wrong checkout + — another agent may be working there. diff --git a/.agents/knowledge/architecture-overview.md b/.agents/knowledge/architecture-overview.md new file mode 100644 index 000000000..39c4044ff --- /dev/null +++ b/.agents/knowledge/architecture-overview.md @@ -0,0 +1,60 @@ +--- +type: Reference +title: MigTD Architecture Overview (Azure Build) +description: Agent-oriented map of MigTD's main functional areas for the Azure IGVM build — flow, transport, attestation, policy v2, and error codes — with pointers into source. +tags: [architecture, azure, spdm, policy-v2, migration] +timestamp: 2026-08-25T22:12:55+00:00 +--- + +# MigTD Architecture Overview (Azure Build) + +Overview source: +[doc/MigTD_Functionality_Summary.md](../../doc/MigTD_Functionality_Summary.md). +For Policy v2 measurement details, treat +[doc/tcb_mapping_design_proposal.md](../../doc/tcb_mapping_design_proposal.md) +and `src/policy/src/v2/measurement.rs` as authoritative. This file is a +**navigation aid**: what exists where, so you know which doc/source to open +next. + +## What MigTD is + +A `no_std` Rust TDX **Service TD** (`SERVTD_TYPE = 0`) that mutually +remote-attests a migration source (MigTD-S) and destination (MigTD-D) over +**SPDM**, evaluates both against **policy v2**, and exchanges the **Migration +Session Key (MSK)** so the VMM can live-migrate a user TD. Entry point: +`src/migtd/src/lib.rs` (`_start`) → `main()` in +`src/migtd/src/bin/migtd/main.rs`. + +## Where things live (map, not detail) + +| Area | Source | Doc | +|---|---|---| +| End-to-end flow, MSK read/write, version negotiation | `src/migtd/src/bin/migtd/main.rs`, `migration/session.rs` | §2 | +| VMM interface (`vmcall-raw` GHCI, request dispatch) | `src/migtd/src/migration/{data,session,event}.rs` | §3 | +| Quote generation/verification (`igvm-attest`) | `src/attestation/src/{igvmattest,quote,attest}.rs` | §4 | +| Measurement / event log | `src/migtd/src/event_log.rs` | §4 | +| SPDM mutual attestation + secure session | `src/migtd/src/spdm/`, `migration/spdm_session.rs` | §5 | +| Policy v2 evaluation | `src/policy/`, `src/migtd/src/mig_policy.rs` | §6, [policy-v2-workflow.md](policy-v2-workflow.md) | +| TD binding / rebinding | `migration/servtd_ext.rs`, `migration/rebinding.rs` | §7, [init-tdinfo-servtd-ext.md](init-tdinfo-servtd-ext.md) | +| Crypto (ECDSA P-384, X.509, COSE_Sign1) | `src/crypto/` | §9 | +| Async runtime (no_std executor / tokio under emu) | `src/async/` | §10 | +| Build/hashing tools | `tools/migtd-hash`, `tools/migtd-policy-generator`, etc. | §11, §12 | +| AzCVMEmu emulation mode | `src/migtd/src/bin/migtd/cvmemu.rs` | §13, [azcvmemu-build-and-run.md](azcvmemu-build-and-run.md) | + +## Migration error codes (host-visible) — quick lookup + +| Code | Cause | +|:----:|-------| +| 1 | VMM-provided data not as expected | +| 3 | Out of memory | +| 4 | TDX module error (often mismatched `SERVTD_INFO_HASH`) | +| 5 | Failed to establish host communication channel | +| 6 | SPDM/secure-session error (remote quote verification or handshake aborted) | +| 7 | Unable to obtain the quote | +| 8 | Remote quote does not satisfy the migration policy | + +## Explicitly out of scope of the Azure-focused doc + +Non-Azure options (RA-TLS, virtio/vsock transports, `bin` image format) — see +[doc/MigTD_Functionality_Summary.md](../../doc/MigTD_Functionality_Summary.md) +scope note. The one-hash JSON and CoRIM endorsement paths are in scope. diff --git a/.agents/knowledge/azcvmemu-build-and-run.md b/.agents/knowledge/azcvmemu-build-and-run.md new file mode 100644 index 000000000..28dd82e02 --- /dev/null +++ b/.agents/knowledge/azcvmemu-build-and-run.md @@ -0,0 +1,76 @@ +--- +type: Reference +title: AzCVMEmu Build & Run — Agent Cheat Sheet +description: Feature-flag combinations, prerequisites, and migtdemu.sh invocations for building/running MigTD as a standard Rust app under Azure CVM Emulation. +tags: [azcvmemu, build, emu, tpm] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# AzCVMEmu Build & Run — Agent Cheat Sheet + +Canonical source: [doc/AzCVMEmu.md](../../doc/AzCVMEmu.md). Read that in full for +architecture rationale; this is the command/decision cheat sheet. + +## Feature flag → mode + +| Cargo features (with `--no-default-features`) | Attestation | Requires | +|---|---|---| +| `AzCVMEmu` | Real Azure IMDS attestation | Azure TDX CVM + TPM2-TSS | +| `AzCVMEmu,test_mock_report` | Mock TD reports/quotes, full attestation flow | Any Linux | +| `AzCVMEmu,igvm-attest` | `servtd_get_quote` path | Azure TDX CVM + TPM2-TSS | +| `AzCVMEmu,igvm-attest,test_mock_report` | IGVM attest + mock | Any Linux | +| `AzCVMEmu,test_disable_ra_and_accept_all` | Attestation bypassed entirely | Any Linux | + +`AzCVMEmu` implies `main` + `vmcall-raw` (don't add them explicitly) and +**only** works with the `vmcall-raw` transport. + +## Preferred invocation: `migtdemu.sh` + +```bash +./migtdemu.sh --skip-ra --both --no-sudo --log-level info # no attestation, any Linux +./migtdemu.sh --mock-report --both # full attestation, mock data +./migtdemu.sh --igvm-attest --mock-report --both # servtd_get_quote path +./migtdemu.sh --policy-v2 --policy-file --policy-issuer-chain-file --both +./migtdemu.sh --features spdm_attestation --both +``` + +`--both` runs destination in the background then source in the foreground; +destination logs go to `dest.out.log`. See +[verification-and-checklist.md](verification-and-checklist.md) for the +**do-not-run-concurrently** rule (hardcoded port 8001, `taskset -c 0`, shared +`target/release/migtd`). + +## TPM2-TSS gotcha + +Runtime TPM2-TSS (`libtss2-esys`, `libtss2-tcti-device0`) is needed **unless** +you use `--skip-ra` (`test_disable_ra_and_accept_all`), which uses mock TD +reports/quotes and needs no TPM at all. The script auto-sets +`TSS2_TCTI=device:/dev/tpmrm0` and enables sudo automatically when +`/dev/tpmrm0` exists and permissions are insufficient (not needed for +`--mock-report` or `--skip-ra`). + +## Host exit handlers + +`src/attestation/fixup-libservtd-attest-lib.sh` localizes the enclave's +`atexit` and `__cxa_atexit` stubs only in `libservtd_attest_app.a`. The host +must use libc's handlers: exporting the stubs can conflict with +`libc_nonshared.a` or silently suppress process-exit callbacks. The original +firmware archive must remain unchanged. The neighboring +`test-fixup-libservtd-attest-lib.sh` checks both callbacks, archive integrity, +repeatability, and fatal `objcopy` errors in CI and the local gauntlet. +The native link directives in both build scripts must put `-lc` after +`-lcrypto`: GNU ld cannot resolve a late static OpenSSL `atexit` reference +by rescanning the earlier libc archive, unlike LLD. The regression extracts +those directives and links with GNU ld and `-nodefaultlibs` to cover this. + +## Manual run requires two env vars + +```bash +export MIGTD_POLICY_FILE="/path/to/policy.json" +export MIGTD_ROOT_CA_FILE="/path/to/root_ca.cer" +``` + +Missing/nonexistent files → hard exit. See +`deps/td-shim-AzCVMEmu/README.md` for the emulation-layer implementation +details (RTMR extension as no-op, REPORTDATA bypass rationale — cross-check +against [Security Bypasses](security-bypasses.md)). diff --git a/.agents/knowledge/azure-waitforrequest-errors.md b/.agents/knowledge/azure-waitforrequest-errors.md new file mode 100644 index 000000000..423c798c8 --- /dev/null +++ b/.agents/knowledge/azure-waitforrequest-errors.md @@ -0,0 +1,158 @@ +--- +type: Reference +title: Azure WaitForRequest Error and ReportStatus Map +description: Error logging and host-visible ReportStatus behavior for the Azure IGVM vmcall-raw path with SPDM attestation and policy v2. +tags: [azure, igvm, vmcall-raw, spdm, waitforrequest, reportstatus, errors] +timestamp: 2026-09-04T20:38:52+00:00 +--- + +# Azure WaitForRequest Error and ReportStatus Map + +Verified against `ms/integration` commit `a3bc5382`. + +## Scope + +This reference covers the production Azure IGVM path built with: + +- `vmcall-raw`; +- `spdm_attestation`; and +- `policy_v2`. + +The dispatch loop is in `src/migtd/src/bin/migtd/main.rs`. +Request parsing and status reporting are in +`src/migtd/src/migration/session.rs`. + +## Host-visible status encoding + +`report_status()` sends success with `pre_migration_status = 0`. For a +recognized failure, it sends `pre_migration_status = 1` and puts the numeric +`MigrationResult` in `error_code`. + +| Code | `MigrationResult` | +| ---: | --- | +| 0 | `Success` | +| 1 | `InvalidParameter` | +| 2 | `Unsupported` | +| 3 | `OutOfResource` | +| 4 | `TdxModuleError` | +| 5 | `NetworkError` | +| 6 | `SecureSessionError` | +| 7 | `MutualAttestationError` | +| 8 | `PolicyUnsatisfiedError` | +| 9 | `InvalidPolicyError` | +| 10 | `VmmCanceled` | +| 11 | `VmmInternalError` | +| 12 | `UnsupportedOperationError` | +| 255 | `InitializationError` | + +The ordinary Azure/SPDM request-processing paths primarily return codes +1, 3, 4, 5, 6, 7, 8, 11, and 12. SPDM vendor-defined errors preserve any +recognized `MigrationResult` supplied by the peer. + +## Pre-dispatch `WaitForRequest` paths + +| Failure | Code | Log emitted? | ReportStatus attempted? | +| --- | ---: | --- | --- | +| Policy unavailable while sizing the shared buffer | 1 | No direct log | No request ID is available | +| Event log unavailable while sizing the shared buffer | 1 | No direct log | No request ID is available | +| Shared request-buffer allocation fails | 3 | Yes | No request ID is available | +| Initial WaitForRequest VMCALL fails | normally 1 | Yes | No request ID is available | +| Shared response cannot be copied to private memory | 3 | Yes | No | +| VMM data-status byte reports failure | 11 | Yes | Yes, if the request ID is readable | +| Operation byte is unknown or feature-disabled | 12 | Yes | Yes, if the request ID is readable | +| Payload range overflows or exceeds the shared buffer | 1 | Yes | Yes, if the request ID is readable | +| Payload size, reserved fields, or optional-field framing is invalid | 1 | Generic decode log | Yes, if the request ID is readable | + +The outer loop uses: + +```rust +if let Ok(request) = wait_for_request().await { + *PENDING_REQUEST.lock() = Some(request); +} +``` + +It therefore discards every `wait_for_request()` error without an additional +caller-level log. Most lower-level errors already log, but the policy/event-log +lookups in `calculate_shared_page_nums()` do not. Policy absence is normally +caught earlier by policy initialization; the helper itself nevertheless has a +silent error path. + +Malformed requests shorter than the eight-byte request ID can be logged but +cannot receive ReportStatus. `reject_request()` schedules the error report only +when `read_request_id()` succeeded. + +`try_accept_request()` handles a duplicate migration request ID by returning +`Poll::Pending`. This is not represented as an error, produces no log, and +sends no ReportStatus; the request remains stalled. + +## Dispatched operation status map + +Every dispatched handler failure receives a generic operation-level error log +containing its final numeric status. Lower layers often provide a more specific +cause. + +| Operation or stage | Final status | +| --- | --- | +| Raw transport creation, connect, or shutdown failure | 1 | +| Malformed pre-session framing or peer-data blob | 1 | +| Pre-session transport failure or timeout | 5 | +| SPDM requester/responder construction failure | 6 | +| Generic SPDM negotiation, protocol, transcript, crypto, VDM, or state failure | 6 | +| TDX metadata, migration-version, or key operation failure preserved through SPDM | 4 | +| Incompatible migration versions | 1 | +| Local quote generation/GetQuote failure | 7 | +| Explicit REPORTDATA/TH1 binding failure | 7 | +| Policy-v2 authentication failure, including peer quote verification | 8 | +| `GetTdReport` TDG.MR.REPORT failure | 4 | +| `GetTdReport` output-length invariant failure | 1 | +| `GetMigtdData` local report-generation failure | 1 | +| `EnableLogArea` before a log area exists | 12 | +| `EnableLogArea` with an invalid level | 1 | + +SPDM conversion is intentionally lossy for ordinary protocol errors: +non-vendor `SpdmStatus` values become `SecureSessionError` (6). Application +errors encoded as SPDM vendor-defined values are decoded back to their +`MigrationResult`, preserving codes such as 4, 7, and 8. + +## GetQuote is not uniquely identifiable + +The Azure IGVM quote path is: + +```text +quote-service Busy/GetQuote error + -> retry exhaustion or non-retriable failure + -> QuoteGenerationFailed + -> gen_quote_spdm logs the error + -> MutualAttestationError + -> ReportStatus error_code 7 +``` + +REPORTDATA binding failures also use code 7. ReportStatus therefore cannot +distinguish quote acquisition from a session-binding failure. Under policy v2, +peer quote verification occurs inside policy authentication and reports code 8 +instead. Logs are required to identify the exact stage. + +## ReportStatus delivery behavior + +`StartMigration`, `StartRebinding`, and `EnableLogArea` add caller-level logging +when `report_status()` returns an error. `GetTdReport` and `GetMigtdData` +discard that result, but all currently returned errors are logged inside +`report_status()`: + +- shared-memory allocation failure; +- invalid status code; and +- the initial ReportStatus VMCALL failure. + +The latter two call sites still lose operation-specific caller context and +should not be described as completely silent. + +The ReportStatus confirmation loop has no timeout. If the host never changes +the per-buffer status to success, the future remains pending indefinitely +while emitting `Pending confirmation` at info level on each relevant wake. + +## Logging interpretation + +“Log emitted” in this document means that the code invokes a logging macro. +Whether the VMM can retrieve that record depends on log-area initialization +and provisional-log configuration. Do not equate a code-level log call with +guaranteed host-visible diagnostics. diff --git a/.agents/knowledge/boot-measurements.md b/.agents/knowledge/boot-measurements.md new file mode 100644 index 000000000..c3adc5647 --- /dev/null +++ b/.agents/knowledge/boot-measurements.md @@ -0,0 +1,440 @@ +--- +type: Reference +title: MigTD Boot Measurements — Who Measures What, When, and How +description: Mechanics of how each TDX measurement register (MRTD, RTMR0-3) is populated during a MigTD launch, with file-line citations. +tags: [attestation, tdx, measurements, mrtd, rtmr] +timestamp: 2026-08-25T22:12:55+00:00 +--- + +# MigTD Boot Measurements — Who Measures What, When, and How + +*Companion summary to +[doc/tcb_mapping_design_proposal.md](../../doc/tcb_mapping_design_proposal.md). +Focuses on the +**mechanics** of how each TDX measurement register gets populated for a +MigTD launch, with file-line citations. The "what the values mean for +attestation" question is covered in the One-Hash doc.* + +> **Scope.** All addresses and section attributes shown here are for the +> production **IGVM** build (Azure OS). TDVF builds differ only in how +> MRTD is populated at TD launch (BIOS-style metadata vs IGVM directives) +> — the RTMR0–3 portion is identical. + +--- + +## TL;DR table + +| Register | Contents (in order) | Who extends it | When | How (TDX op) | +|---|---|---|---|---| +| **MRTD** | td-shim BFV pages **+** MigTD payload pages **+** GPA layout of every region | IGVM loader (host) / TDX module | TD launch, **before any TD code runs** | `TDH.MEM.PAGE.ADD` (all pages) + `TDH.MR.EXTEND` (pages without `unmeasured` flag); sealed by `TDH.MR.FINALIZE` | +| **RTMR0** | `EV_SEPARATOR` = `SHA384(0x00000000)` extended once from zero | td-shim | Inside `boot_builtin_payload`, just before jumping to MigTD entry | `tdcall_extend_rtmr(rtmr_index=0)` | +| **RTMR1** | `EV_SEPARATOR`, then the digest of signer anchor `A` (root fingerprint + enrolled signer-purpose EKU) | td-shim (separator) → MigTD (anchor) | td-shim runtime, then MigTD `do_measurements()` | `tdcall_extend_rtmr(rtmr_index=1)` | +| **RTMR2** | **One extend**: canonical `policyData`; JSON packaging redacts only the TCB mapping and mapping issuer chain, while CoRIM-only policyData is measured in full | MigTD | MigTD `do_measurements()`, before any migration handling | `tdcall_extend_rtmr(rtmr_index=2)` | +| **RTMR3** | Unused (always zero) in production builds | — | — | — | + +Test/debug variant: when `test_disable_ra_and_accept_all` is on, +`do_measurements()` short-circuits and extends **only** +`TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT` into RTMR2; no policy / issuer +chain measurements are made. See `do_measurements()` in +`src/migtd/src/bin/migtd/main.rs`. + +--- + +## 1. MRTD — populated at TD launch by the IGVM loader + +### What's in it + +For the MigTD IGVM image, the IGVM loader processes one +`IgvmDirectiveHeader::PageData` per 4 KB page. Each page hits MRTD as: + +1. **`TDH.MEM.PAGE.ADD`** — for every non-shared page (records the GPA + regardless of whether content is measured). +2. **`TDH.MR.EXTEND`** — only for pages where `IgvmPageDataFlags.unmeasured` + is **clear**. Extends MRTD with the page content in 256-byte chunks. + +So MRTD reflects both the **GPA layout** of every region AND the **byte +content** of every "measured" region. + +### Section breakdown (per `MigTD/config/metadata.json`) + +| Section | GPA (in MigTD layout) | `attributes` | `unmeasured` in IGVM? | What's in it | +|---|---|---|---|---| +| **CFV** | `0xFF000000`, `0xA0000` | `0x0` | **yes** (GPA-only) | Policy JSON, policy issuer cert chain (PEM), root CA — measured later into RTMR1/RTMR2 | +| **TempMem** (stack, heap, mailbox, etc.) | various | `0x0` | yes (GPA-only) | Zero-fill at launch | +| **PermMem** | `0x0`, `0x2000000` | `0x2` | yes (GPA-only) | Reserved memory for runtime use | +| **Payload** | `0xFF0C1000`, `0xEE6000` (~15 MB) | `0x1` (EXTENDMR) | **no** — measured | The **MigTD binary** (PE/COFF, wrapped as a DXE_CORE FV file) | +| **BFV** | `0xFFFA7000`, `0x59000` (~356 KB) | `0x1` (EXTENDMR) | **no** — measured | td-shim metadata + IPL + reset vector | + +### The code path that emits these directives + +1. **`MigTD/config/metadata.json`** declares the sections and their + `Attributes`. This is the *source of truth* for the MigTD IGVM build. + +2. **`td-shim-ld -i igvm`** (invoked by + `MigTD/xtask/src/build.rs:204-206,260-261`) calls + `TdShimLinker::build_igvm()`. + +3. **`MigTD/deps/td-shim/td-shim-tools/src/linker.rs::build_igvm`** + (lines `424-627`) emits one `IgvmDirectiveHeader::PageData` per page, + per region. The crucial calls: + + ```rust + // CFV — unmeasured iff metadata attributes==0 (true for MigTD) + insert_igvm_pages(..., TD_SHIM_CONFIG_BASE, ..., &vec![], cfv_unmeasured); // L445-451 + // Mailbox / TempStack / TempHeap — always unmeasured + insert_igvm_pages(..., MAILBOX, &vec![], true); // L453-459 + insert_igvm_pages(..., TEMP_STACK, &vec![], true); // L461-467 + insert_igvm_pages(..., TEMP_HEAP, &vec![], true); // L469-475 + // MigTD payload binary — MEASURED into MRTD + insert_igvm_pages(..., TD_SHIM_PAYLOAD_BASE, &payload_data, false); // L495-501 + // td-shim BFV (metadata + IPL + reset vector) — MEASURED into MRTD + insert_igvm_pages(..., TD_SHIM_METADATA_BASE, &bfv_data, false); // L577-583 + ``` + +4. **`insert_igvm_pages`** (`linker.rs:344-374`) translates the + `unmeasured` arg into the on-wire IGVM page flag: + + ```rust + let mut flags = IgvmPageDataFlags::new(); + if unmeasured { flags.set_unmeasured(true); } // L362-365 + directive_headers.push(IgvmDirectiveHeader::PageData { + gpa: base + i * PAGE_SIZE_4K, flags, data, ... // L366-372 + }); + ``` + +5. The `EXTENDMR` attribute (`0x1`) → "not unmeasured" → `TDH.MR.EXTEND` + on every page in the section. Defined at + `MigTD/deps/td-shim/td-shim-interface/src/metadata.rs:68`. + +### Common misconception: "td-shim loads the payload, so the payload isn't in MRTD" + +**Wrong.** TD-shim *does* find/relocate/jump-to the payload at runtime, +but that's a separate concern from measurement. The payload **bytes** +are placed into TD memory by the **IGVM loader** at TD launch and +extended into MRTD at that moment — well before td-shim's first +instruction executes. TD-shim's runtime work: + +- Reads the payload from `SliceType::ShimPayload` (the read-only FV + region the IGVM loader populated). `td-layout/src/memslice.rs:72-75` + for the slice; `td-shim/src/bin/td-shim/main.rs:217-223` for the read. +- Optionally PE-relocates into a **separate** writable region + `SliceType::Payload` + (`td-shim/src/bin/td-shim/main.rs:238-240`). +- Jumps to the relocated entry point + (`td-shim/src/bin/td-shim/main.rs:266-`). + +The execution-region writes happen AFTER `TDH.MR.FINALIZE`, so they do +not affect MRTD. Only the as-shipped, pre-execution image in the FV is +measured. + +### The "MRTD vs RTMR1" toggle for payload (`payload_extend_rtmr`) + +`td-shim/src/bin/td-shim/shim_info.rs:84-92,116-118` makes a runtime +decision: + +```rust +if section.r#type == TDX_METADATA_SECTION_TYPE_PAYLOAD && section.attributes == 0 { + payload_extend_rtmr = true; // payload was NOT measured into MRTD +} // → fall back to logging it into RTMR1 at runtime +``` + +If `payload_extend_rtmr()` is true, `boot_builtin_payload` calls +`log_payload_binary(payload_bin, event_log)` which extends RTMR1 +(`td-shim/src/bin/td-shim/event_log.rs:76-92`, mr_index=2 → +rtmr_index=1). + +**For MigTD's IGVM build the Payload section has `attributes=0x1`, so +`payload_extend_rtmr` is `false` → the payload is in MRTD only, NOT +also in RTMR1.** This is what makes RTMR1 deterministic (separator + +issuer chain only). + +--- + +## 2. RTMR0 — `EV_SEPARATOR` only + +Extended exactly once, by td-shim, in +`MigTD/deps/td-shim/cc-measurement/src/log.rs:58-67`: + +```rust +pub fn create_seperator(&mut self) -> Result<()> { + let separator = u32::to_le_bytes(0); + // Measure 0x0000_0000 into RTMR[0] and RTMR[1] + let _ = self.calculate_digest_and_extend(&separator, 1)?; // mr_index 1 → RTMR0 + let sha384 = self.calculate_digest_and_extend(&separator, 2)?; // mr_index 2 → RTMR1 + self.log_cc_event(1, EV_SEPARATOR, &[&separator], &sha384)?; + self.log_cc_event(2, EV_SEPARATOR, &[&separator], &sha384) +} +``` + +Call site for the MigTD path: +`td-shim/src/bin/td-shim/main.rs:236` (inside `boot_builtin_payload`, +after the optional `log_payload_binary` and before jumping to the +payload entry point). + +**Why RTMR0 is a deterministic constant in MigTD IGVM builds:** + +- `log_hob_list` (which would extend RTMR0) is **skipped** because + MigTD's `metadata.json` declares no `TD_HOB` section, so + `BootTimeDynamic::td_hob()` returns `None` and the `if let Some(td_hob)` + branch in `td-shim/src/bin/td-shim/main.rs:131-134` is not taken. +- `log_payload_binary` (which would extend RTMR1) is **skipped** because + `payload_extend_rtmr` is `false` (see §1). +- The only thing left is the separator → RTMR0 ends up as a fixed + function of `SHA384(0x0000_0000)` extended from zeros. + +The mr_index→RTMR translation is in +`MigTD/src/migtd/src/event_log.rs:164-175`: +```rust +let rtmr_index = match mr_index { 1..=4 => mr_index - 1, _ => err }; +tdcall_extend_rtmr(&digest, rtmr_index)?; +``` + +--- + +## 3. RTMR1 — `EV_SEPARATOR` + stable signer anchor + +Two extensions, in order: + +| # | What | Where | +|---|---|---| +| 1 | Separator `SHA384(0x0000_0000)` | td-shim `create_seperator()` — see §2 | +| 2 | Digest of signer anchor `A` | MigTD `get_policy_issuer_chain_and_measure()` | + +The anchor is: + +```text +R = SHA384(DER(root certificate)) +A = SHA384("MIGTD-RTMR1-ANCHOR-V1" || 0x00 || R || 0x00 || leaf_EKU_OID_DER) +RTMR1 extends SHA384(A) +``` + +The CFV may carry either the full PEM issuer chain or a precomputed 48-byte +anchor. `config::get_signer_anchor_source()` prefers the direct anchor slot; +`resolve_signer_anchor()` derives `A` from PEM or accepts the direct value. +Both enrollment forms produce the same RTMR1. + +```rust +fn get_policy_issuer_chain_and_measure(event_log: &mut [u8]) { + let anchor_source = config::get_signer_anchor_source()...; + let signer_anchor = policy::resolve_signer_anchor(anchor_source)...; + event_log::write_tagged_event_log( + event_log, + MR_INDEX_POLICY_ISSUER_CHAIN, // = 0x2 → rtmr_index 1 → RTMR1 + &signer_anchor, // hashed again by the event-log helper + TAGGED_EVENT_ID_POLICY_ISSUER_CHAIN, + anchor_source, // PEM or 48-byte anchor for replay + ); +} +``` + +Leaf-key and intermediate-CA rotation under the same root + signer-anchor EKU is +measurement-stable. Root or EKU changes are trust-anchor changes and alter +RTMR1. Peer validation enforces the same root+EKU fingerprint; it no longer +uses leaf Subject Name as signer identity. + +--- + +## 4. RTMR2 — policy binding (and root CA on legacy v1) + +### policy_v2 build (current default) + +**One extension** over canonical `policyData`. For the JSON-collateral path, +the extractor removes only: + +- `servtdCollateral.servtdTcbMapping` (strictly required when + `servtdCollateral` is present), +- `servtdTcbMappingIssuerChain`. + +The mapping and mapping-chain bytes can be re-issued without changing +`tdinfo_hash`; the mapping signer chain must resolve to the RTMR1 anchor. +Every other `policyData` field remains measured, including migration rules, +platform collaterals, `policySvn`, JSON `servtdIdentity` and its issuer chain, +servTD collateral version fields, and `servtdCrl`. A CoRIM-only policy omits +`servtdCollateral`, so its entire `policyData` object is measured as-is. + +| # | Bytes hashed | Tag ID constant | EventName | +|---|--------------|-----------------|-----------| +| 1 | canonical `policyData` after the implemented servTD redaction set above (object bytes including outer `{ }`) | `TAGGED_EVENT_ID_POLICY_DATA = 0x9` | `MigTdPolicyData` | + +Canonicalization sorts object keys lexicographically at every level, preserves +array order, and removes whitespace. The extractor accepts either bare +`policyData` or the legacy `{policyData, signature}` envelope. The legacy +outer signature is ignored; policyData integrity comes from RTMR2. + +`get_policy_and_measure()` in `MigTD/src/migtd/src/bin/migtd/main.rs` calls +`event_log::write_tagged_event_log` exactly once for this extend, with +`MR_INDEX_POLICY = 0x3 → rtmr_index 2 → RTMR2`. The `tagged_event_data` +payload that lands in the event log is the small `version.as_bytes()` +string — the full canonical-bytes payload is only fed into the digest, +keeping CCEL size bounded. + +Sketch: + +```rust +// canonical policyData after JSON servTD endorsement redaction → SHA-384 +let policy_bytes = migtd::policy::extract_canonical_policy_data_bytes(policy)?; +event_log::write_tagged_event_log( + event_log, + MR_INDEX_POLICY, // = 0x3 → RTMR2 + &policy_bytes, // bytes that get SHA-384'd + TAGGED_EVENT_ID_POLICY_DATA, // = 0x9 + event_data, // version.as_bytes() — small event payload +); +``` + +Why one canonical-policyData extend instead of either (a) a single +signed-blob hash or (b) per-field whitelist: + +- A signed-blob hash would re-introduce the original circularity (the + signed file must exist before the image is built). +- A per-field whitelist (the previous "six extends" scheme) required + reviewer discipline to remember to add every new `policyData` field to + the measurement code path. The single-extend redacted scheme + automatically binds every newly added field unless it is deliberately + added to the explicit redaction set. The mapping issuer chain is redacted + from RTMR2 and must resolve to the RTMR1 anchor; the identity issuer chain + remains measured. +- The dummy policy embedded in the base IGVM's CFV pre-computes the same + RTMR2 as the final enrolled policy as long as the canonical + measured `policyData` agrees byte-for-byte after the same redaction helper. + +The **hashed bytes** are the canonical redacted-`policyData` bytes (sorted-key, whitespace-free); the **event-log payload field** is the small version string. Peers replay the event log and compare digests, not raw payloads — `check_policy_integrity` recomputes the canonical bytes via the same `extract_canonical_policy_data_bytes` helper to verify the single digest. + +Mirror in `MigTD/tools/migtd-hash/src/lib.rs` (`rtmr2()`): offline simulator +performs the same single `rtmr2.extend_with_raw_data(...)` call so the build +pipeline's `tdinfo_hash` matches the runtime RTMR2 exactly. + +### Legacy `not(policy_v2)` build + +Two extensions in order: `policy` then `root_ca` +(`get_policy_and_measure()` in `src/migtd/src/bin/migtd/main.rs`; +`MR_INDEX_ROOT_CA = 0x3` → RTMR2). Not used in current production. + +### Test mode + +`measure_test_feature()` in `src/migtd/src/bin/migtd/main.rs` +extends RTMR2 (`MR_INDEX_TEST_FEATURE = 0x3`) with the literal bytes +`b"test_disable_ra_and_accept_all"` and returns early, replacing the +normal policy / signer-anchor measurements. **Only present when the +`test_disable_ra_and_accept_all` feature is built in — not in production +images.** + +--- + +## 5. Boot sequence — who runs when + +``` + Measurement +───────────────────────────────────────────────────────────────────────── +Host: IGVM loader processes migtd.igvm + ├─ For each PageData directive: + │ ├─ TDH.MEM.PAGE.ADD (GPA) → MRTD (GPA only) + │ └─ if !unmeasured: TDH.MR.EXTEND (content) → MRTD (content) + │ (BFV pages + Payload pages get this; CFV / TempMem do not) + └─ TDH.MR.FINALIZE → MRTD sealed +───────────────────────────────────────────────────────────────────────── +TD launch — first instruction is reset vector @ 0xFFFFFFF0 + └─ reset_vector → IPL → switch to long mode +───────────────────────────────────────────────────────────────────────── +td-shim main() runs (deps/td-shim/td-shim/src/bin/td-shim/main.rs) + ├─ Parse metadata, build BootTimeStatic / BootTimeDynamic + ├─ if td_hob.is_some(): log_hob_list → RTMR0 (NOT for MigTD IGVM) + ├─ Build payload memory, set up paging, etc. + └─ boot_builtin_payload(): + ├─ Read payload from SliceType::ShimPayload FV (no measurement) + ├─ if payload_extend_rtmr: log_payload_binary → RTMR1 (NOT for MigTD IGVM) + ├─ event_log.create_seperator() → RTMR0 + RTMR1 (separator) + ├─ PE-relocate payload into SliceType::Payload (writable, runtime, NOT measured) + └─ switch stack / jump to MigTD entry point +───────────────────────────────────────────────────────────────────────── +MigTD runtime_main() runs (src/migtd/src/bin/migtd/main.rs:83) + └─ do_measurements(): + ├─ get_policy_issuer_chain_and_measure → RTMR1 (signer anchor) + └─ get_policy_and_measure → RTMR2 (policy) + (test mode replaces both with a single RTMR2 test-feature event) + └─ if test-get-quote: + └─ generate and verify a real quote (after RTMR1/RTMR2) + └─ register migration callback, handle_pre_mig() … +``` + +The `test-get-quote` path intentionally runs only after `do_measurements()`. +The package's `test-migtd-getquote-all.igvm` enables `igvm-attest`, not +`use-mock-quote`, so its TDREPORT comes from the real TDCALL path and includes +the finalized runtime measurements. After this point, the TD report's `tdinfo` +is frozen at: + +``` +mrtd = SHA384( all measured pages of td-shim + payload ) [deterministic per image] +rtmr0 = SHA384(0 || SHA384(separator)) [deterministic per td-shim version] +rtmr1 = extend(extend(0, separator), SHA384(signer_anchor_A)) [stable across leaf/intermediate rotation] +rtmr2 = extend(0, SHA384(canonical_redacted_policyData)) [varies by measured policy content] +rtmr3 = 0 [unused] +``` + +--- + +## 6. Why this matters for endorsement + +(See +[doc/tcb_mapping_design_proposal.md](../../doc/tcb_mapping_design_proposal.md) +for the full story; this is the one-paragraph summary.) + +- The JSON TCB mapping and signed CoRIM both map the complete 48-byte + `tdinfo_hash` / `SERVTD_INFO_HASH` to SVN. That hash is + `SHA384(TDINFO)` for production `servtd_attr=0`, so it covers MRTD and all + RTMRs, including the measured policy content in RTMR2. +- The mapping/CoRIM bytes themselves are not measured, breaking the circular + dependency. Their signatures are trusted only when the signer chain resolves + to the RTMR1 anchor. + +--- + +## 7. Quick code reference index + +| Concern | File | Key lines | +|---|---|---| +| What goes into MRTD | `MigTD/config/metadata.json` | whole file | +| Build-time IGVM directive generation | `MigTD/deps/td-shim/td-shim-tools/src/linker.rs` | `424-627` (build_igvm), `344-374` (insert_igvm_pages) | +| `EXTENDMR` constant | `MigTD/deps/td-shim/td-shim-interface/src/metadata.rs` | `68` | +| Default metadata sections (fallback when no `-m`) | `MigTD/deps/td-shim/td-shim-tools/src/metadata.rs` | `111-192`, `194-253` | +| `payload_extend_rtmr` toggle | `MigTD/deps/td-shim/td-shim/src/bin/td-shim/shim_info.rs` | `84-92`, `116-118` | +| TD-shim payload load + jump | `MigTD/deps/td-shim/td-shim/src/bin/td-shim/main.rs` | `210-272` (boot_builtin_payload) | +| Separator extension | `MigTD/deps/td-shim/cc-measurement/src/log.rs` | `58-67` (create_seperator) | +| td-shim event-log helpers (RTMR1) | `MigTD/deps/td-shim/td-shim/src/event_log.rs` | `71-102` | +| MigTD MR_INDEX constants | `MigTD/src/migtd/src/event_log.rs` | `34-37` | +| MigTD `tdcall_extend_rtmr` wrapper | `MigTD/src/migtd/src/event_log.rs` | `116-175` | +| MigTD `do_measurements` (policy_v2) | `MigTD/src/migtd/src/bin/migtd/main.rs` | `167-192` | +| MigTD policy / signer-anchor extension | `MigTD/src/migtd/src/bin/migtd/main.rs` | `get_policy_and_measure`, `get_policy_issuer_chain_and_measure` | +| Event log replay / RTMR comparison | `MigTD/src/migtd/src/event_log.rs` | `228-288` | + +--- + +## 8. Common gotchas + +1. **"td-shim loads the payload"** is true at the *runtime relocation* + level but **misleading for measurement**. Payload bytes are in MRTD + before td-shim runs; see §1. +2. **`Attributes: 0x1` (EXTENDMR) ↔ IGVM `unmeasured=false` ↔ MRTD**; + `Attributes: 0x0` ↔ `unmeasured=true` ↔ GPA-only. There is no + middle ground — the bit either extends or doesn't. +3. **CFV content is NOT in MRTD.** Changing measured policy content changes + RTMR2. Rotating a leaf/intermediate under the same root+EKU does not change + RTMR1; changing the root or signer-anchor EKU does. +4. **`mr_index` in event-log code is PCR-style** (1-based), the + `tdcall_extend_rtmr` `rtmr_index` is 0-based. Off-by-one bugs are + easy here — see `event_log.rs:164-175`. +5. **`MR_INDEX_POLICY` and `MR_INDEX_ROOT_CA` and `MR_INDEX_TEST_FEATURE` + are all `0x3`** — they all extend the same register (RTMR2). The + tagged-event-ID is what distinguishes them at replay time. +6. **`payload_extend_rtmr` is mutually exclusive with `EXTENDMR`** on + the Payload section. A misconfigured `metadata.json` that sets + `Attributes: 0x0` on Payload would silently shift the measurement + from MRTD to RTMR1, breaking endorsement matching. +7. **`test_disable_ra_and_accept_all` replaces, not adds.** Test builds + omit the policy / issuer-chain measurements entirely, so their RTMR1 + and RTMR2 are completely different from production. Never reuse a + test-build event-log replay against a production endorsement. +8. **`payload_v1` vs `policy_v2`**: legacy v1 builds also extend + `root_ca` into RTMR2 *after* policy. policy_v2 builds do not — the + root is committed through the RTMR1 signer anchor. This means a v1→v2 transition + changes both RTMR1 *and* RTMR2. diff --git a/.agents/knowledge/code-coverage-plan.md b/.agents/knowledge/code-coverage-plan.md new file mode 100644 index 000000000..80a520699 --- /dev/null +++ b/.agents/knowledge/code-coverage-plan.md @@ -0,0 +1,51 @@ +--- +type: Reference +title: Code Coverage Plan (Draft Status) +description: The proposed (not-yet-implemented) per-PR code coverage flow — decided aggregation backend, tooling, and phased plan — to avoid contradicting already-made decisions. +tags: [code-coverage, ci, codecov, grcov, draft] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# Code Coverage Plan (Draft Status) + +Canonical source: [doc/code_coverage.md](../../doc/code_coverage.md). **Status: +DRAFT for review — nothing here is implemented in CI yet.** If asked to "add +code coverage", read the full doc first; don't re-derive the plan from +scratch or contradict the decisions already made below. + +## Decisions already made (don't re-litigate without new info) + +- **Aggregation backend: Codecov** (flag-merge + carryforward), chosen over + self-hosted merge, Coveralls, or ADO Cobertura. +- **Tooling: `grcov` → LCOV**, kept for uniformity across unit tests, AzCVMEmu + integration, and (future) firmware coverage — all converge on `.profraw` → + `grcov -t lcov`. +- **Firmware (real-hardware TDX) coverage approach: `minicov`** no_std + runtime, phase 2 — capture counters and stream over an existing channel + (serial/vsock) since the firmware is `no_std`, has no filesystem, and is a + **measured** image (instrumentation changes MRTD, requiring policy/cert + regeneration to match). + +## Why AzCVMEmu integration coverage is "easy" + +The AzCVMEmu binary is a **std host build**; `migtdemu.sh` launches it via +`env "${kv[@]}" … "$binary"` which inherits the parent environment, so +exporting `LLVM_PROFILE_FILE=…/%p-%m.profraw` instruments both source and +destination processes with **no script change**. + +## Phased plan + +1. **Phase 1 (now):** unit tests + a minimal AzCVMEmu subset (~4-6 of the 13 + legs) → Codecov flags `unittests` + `integration`, per-PR. +2. **Phase 2 (later):** firmware coverage via `minicov` on self-hosted TDX, + uploaded under a **carryforward** `hardware` flag (so PRs without a + hardware run still show the last-known production-path coverage). +3. **Phase 3:** lock in the covering subset, decide gating policy + (informational vs. blocking threshold). + +## Open questions still unresolved + +Per-PR CI time budget for the instrumented subset; whether to invest in +firmware/minicov now vs. defer; gating policy; Codecov org onboarding +(`CODECOV_TOKEN` for fork PRs). Surface these to the user rather than +assuming an answer if picking this work up. diff --git a/.agents/knowledge/code-style.md b/.agents/knowledge/code-style.md new file mode 100644 index 000000000..12ae9c73b --- /dev/null +++ b/.agents/knowledge/code-style.md @@ -0,0 +1,38 @@ +--- +type: Reference +title: Code Style Preferences +description: MigTD-specific Rust code style conventions — diff minimization, error handling, logging discipline, and refactoring guidance. +tags: [code-style, rust, logging, refactoring] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Code Style Preferences + +> Condensed in the root [agent guide](../../AGENTS.md). + +- **Minimize diff.** When refactoring or merging conflicts, **keep existing + parameter and field names** instead of inventing new ones. Cosmetic + renames during functional work get pushed back. +- **Don't churn unrelated formatting.** `cargo fmt` only on files you've + modified. +- **No `expect()` / `unwrap()` in non-test code paths.** Return an error + instead. +- **Prefer the `LogErr` / `LogError` helper trait** for `Result` → log + error + patterns instead of hand-rolled `if let Err … { log!… }` blocks. +- **Refactor for reuse, not for novelty.** When asked for "polymorphism" / + "template" / "common closure", deliver *real* deduplication. Don't add a + trait/macro with only one implementation. +- **Don't add feature gates just to be safe.** If a feature is always + desired, remove the gate. +- **Logging discipline:** + - INFO level should be sparse. + - **Never dump full quotes / certs / large blobs at INFO/DEBUG.** Log + first 8 bytes + last 8 bytes + length. Excessive quote dump has caused + multi-second stalls during real-hardware migration tests. + - When adding diagnostic logs, gate behind explicit verbosity OR commit + them as a clearly-named debug/diag commit that can be dropped later. +- **Don't fix code that "looks redundant" without proving it.** Canonical + cautionary tale: `event_log::get_event_log()` returns `&raw[..size + 1]`; + removing the `+1` (commit `bc99fa4`) passed unit tests but broke EMU + integration. The `+1` is a load-bearing workaround for an upstream + `cc_measurement` bug. See [migtd-review SKILL.md](/skills/migtd-review/SKILL.md) §1. diff --git a/.agents/knowledge/commit-and-workflow.md b/.agents/knowledge/commit-and-workflow.md new file mode 100644 index 000000000..b97876dd6 --- /dev/null +++ b/.agents/knowledge/commit-and-workflow.md @@ -0,0 +1,82 @@ +--- +type: Playbook +title: Commit Hygiene, Remotes & Workflow Patterns +description: DCO sign-off rules, commit/force-push discipline, remote layout, common rebase/cherry-pick workflow patterns, and issue/PR filing conventions. +tags: [git, commit-hygiene, remotes, workflow, issues] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Commit Hygiene, Remotes & Workflow Patterns + +> Condensed in the root [agent guide](../../AGENTS.md). + +## Commit hygiene + +- **Always commit with `git commit -s`** (or manually add the + `Signed-off-by:` trailer using the current `git config user.name` and + `user.email`). The project requires DCO sign-off on every committable + change **except** debug-only or `REVERTME` test commits. +- Use the existing repo identity — do not invent a different author. If the + Copilot `Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>` + trailer is appropriate for your environment, include it **in addition to** + the human Signed-off-by, not instead of it. +- **Commit message style: brief.** One short subject line stating the + problem, then a short body describing the high-level solution. Skip filler + like "no behavioural changes" boilerplate unless it materially helps a + future reader. +- **Don't bundle unrelated changes** into one commit. Separate: + - behaviour change vs refactor → two commits (or `fixup`/`squash` later); + - pre-existing fmt/lint fix vs your fix → standalone commit with a + "pre-existing; not caused by this series" note. +- **Fold/squash freely with `git rebase -i`** (`fixup` for "absorb and drop my + message", `squash` for "absorb and keep my message"). This is requested + often during cleanup. +- **Force-push** only to a personal fork remote (e.g. `origin`), and only + with `--force-with-lease=:`. Never force-push to + `intel/*` or `ms/*` / `upstream/*` remotes. + +## Remotes & branches + +Typical remote layout in active checkouts: + +``` +intel https://github.com/intel/MigTD.git # Intel upstream +ms https://github.com/microsoft/MigTD.git # Microsoft fork +upstream https://github.com/microsoft/MigTD.git # alias for ms +origin https://github.com//MigTD.git # personal fork (push target) +``` + +- "Upstream" in conversation usually means **`intel/main`** when discussing + Intel-bound patches, and **`microsoft/main`** (a.k.a. `ms/main` / + `upstream/main`) when discussing the Microsoft fork. Confirm by context. +- **Microsoft-specific features kept out of Intel-bound patches** include + `use-mock-quote`, AzCVMEmu emulation, and allow-all policy. Consult the + [migtd-port skill](/skills/migtd-port/SKILL.md) when rebasing toward Intel. + +## Common workflow patterns + +- **Rebase onto upstream**: "rebase changes from `` onto + `origin/`. Discard changes already on that branch." Use + `git rebase --onto`. +- **Cherry-pick from `intel/main` to simplify**: when bringing in fixes from + Intel, prefer cherry-pick over re-implementation if the change is small. +- **Squash/fold during cleanup**: commits are often named by target SHA + ("fold into ``", "fixup for ``"). Use `git rebase -i` with + `fixup` / `squash`. +- **Reference-by-commit**: when a specific SHA is cited as a template, read + that commit's diff before re-implementing. +- **Resume from a previous session checkpoint**: the session_store DB has + `checkpoints` keyed by session title — search there. + +## Issue / PR filing + +- GH issue title prefix: **`[Copilot Review]`** (not `[Security]` — not all + findings are security). +- **Microsoft EMU (Enterprise Managed User) GH accounts cannot create + issues on external repos.** Use a personal GH account via + `gh auth login --hostname github.com --web`. Verify with `gh auth status` + before running any issue-creation script. +- `gh issue close --reason "not planned"` (literal space, *not* + `not_planned`). +- See [`create_review_issues.sh`](/skills/migtd-review/scripts/create_review_issues.sh) + for the template. diff --git a/.agents/knowledge/decisions-log.md b/.agents/knowledge/decisions-log.md new file mode 100644 index 000000000..42427a31f --- /dev/null +++ b/.agents/knowledge/decisions-log.md @@ -0,0 +1,70 @@ +--- +type: Reference +title: Engineering Decisions Log +description: Concrete, non-obvious engineering decisions (feature/commit kept vs. dropped, and why) with commit SHAs and verification steps. Append-only; grows over time. +tags: [decisions-log, living-document] +timestamp: 2026-07-26T00:14:16+00:00 +--- + +# Engineering Decisions Log + +> This is a **decision log**, not a design doc. [Domain +> Facts](domain-facts.md) and [Anti-patterns](anti-patterns.md) hold standing +> rules. Keep entries short. Cite the implementing commit. Append new entries. +> Follow the root [agent guide](../../AGENTS.md) update ritual. + +- **Dropped the peer-leaf-certificate-expiration check** + (`crypto::validate_peer_leaf_expiration`, previously enforced in + `mig_policy.rs` for both the Policy and ServTDTCBMapping issuer chains on + `integration2`). Reason: it rejects a destination whose signing cert + expires before the source's, which blocks legitimate cert/key-rotation + operations where a newly-issued destination cert intentionally has a + shorter overlap/validity window than the cert it is rotating away from. + Simplifies rotation operations. Dropped via + `git rebase --onto integration2` (no later commit + touched `src/crypto/src/lib.rs`, `src/crypto/src/x509.rs`, or + `src/migtd/src/mig_policy.rs`, so the drop was conflict-free); verified + by a tree-diff-equivalence check plus `cargo fmt --check` and + `cargo xtask lib-test --crates migtd` (60 passed) before and after. + +- **Dropped all `init_td_info` trace-logging and its dedup accessor** + (`migration::trace_td_info()`/`trace_init_td_info_from_host()` full-buffer + dumps, and the `MigtdMigrationInformation::init_td_info_or_local()` + accessor that centralized the "VMM-provided vs. local fallback" pattern + + its own minimal trace lines). Reason: the upcoming design removes + `init_td_info` from the wire protocol entirely, so both the diagnostic + logging and the accessor that exists purely to serve it become dead + weight — no point carrying debugging aids and helper functions for data + that won't exist. Dropped via two `git rebase --onto`/`--skip` steps + (the accessor's own commit had to be skipped too, once identified as + serving the same soon-to-be-removed field); 3 real conflicts arose where + later commits built directly on the accessor/trace calls — resolved by + keeping the surrounding functional code and stripping only the + init_td_info-tracing lines. Verified: no `trace_td_info` / + `init_td_info_or_local` references remain anywhere in `src/`; `cargo fmt + --check` clean; `cargo xtask lib-test --crates migtd` (60 passed, + unchanged); `fast-emu-check.sh` (skip-RA + SPDM skip-RA) both PASS. + +- **Removed the Init_TDINFO allowlist check against the destination's local + TCB mapping.** Do not restore a local + `servtd_lookup_by_tdinfo_hash(init_tdinfo)` gate in migration or rebind. + An older destination cannot be expected to list future MigTD releases or + signer-key rotations; requiring that entry breaks bidirectional migration + between independently issued images. + +- **Clarified the required one-hash init/current SVN check.** Removing the + destination-local allowlist does not remove the init-hash lookup. The + verifier must use the authenticated source's verified JSON mapping or CoRIM + to resolve both `ServtdExt.init_servtd_info_hash` and the source's current + report `tdinfo_hash`, then reject `init SVN > current SVN`. This is now + enforced in both migration and rebinding; the legacy wire Init_TDINFO is + retained only for protocol compatibility and ignored. + +- **Allowed an authenticated local fallback for the initial MigTD hash.** + The current source hash remains source-authoritative. When the source mapping + predates the initial release, migration and rebinding may resolve + `ServtdExt.init_servtd_info_hash` through the authenticated local cumulative + mapping; conflicting assignments fail closed. Arbitrary historical + multi-hop paths remain unsupported when neither endpoint knows the initial + hash. Mappings are append-only and release revocation is leaf-CRL based. + Design discussion: microsoft/MigTD#236. diff --git a/.agents/knowledge/domain-facts.md b/.agents/knowledge/domain-facts.md new file mode 100644 index 000000000..da7bf8be1 --- /dev/null +++ b/.agents/knowledge/domain-facts.md @@ -0,0 +1,130 @@ +--- +type: Reference +title: MigTD Domain Facts (Trust Model, Attestation, Transport, Heap) +description: Non-obvious architectural facts to internalize before flagging anything as a bug — trust model, rebind vs. migration verifiers, TDINFO semantics, vmcall invariants, heap sizing, and rejected hypotheses. +tags: [trust-model, attestation, tdinfo, vmcall, heap, rejected-hypotheses] +timestamp: 2026-07-26T00:14:16+00:00 +--- + +# MigTD Domain Facts + +> Condensed in the root [agent guide](../../AGENTS.md). Read before flagging +> anything as a bug. + +## Trust model + +- Single-core, single-threaded `no_std` Rust firmware. No `Sync`/`Send` + races except via interrupts. +- **VMM is untrusted but can DoS.** DoS-via-VMM is *not* a finding. +- **Root of trust = `MRTD` + `RTMR0..3`** (attested). Certificate chains + carry signatures, but policy-v2 signer identity is bound by the RTMR1 + signer anchor: root-certificate SHA-384 fingerprint + one enrolled + signer-purpose EKU. CoRIM verification tries every EKU asserted by the leaf + and accepts only the one reproducing the measured anchor; legacy PEM paths + still require a single unambiguous EKU. +- After `mig_policy::init_policy()` succeeds, `VERIFIED_POLICY` is trusted. +- The one-hash TCB mapping (JSON or CoRIM) maps the complete 48-byte + `tdinfo_hash` / `SERVTD_INFO_HASH` directly to MigTD SVN. When a signed + CoRIM is enrolled it is the sole lookup authority; a miss does not fall + back to JSON collateral. +- Init/current SVN continuity resolves the source's authenticated current-report + `tdinfo_hash` only through the source mapping. Resolve + `ServtdExt.init_servtd_info_hash` through the source mapping first, then the + authenticated destination mapping as a fallback. Conflicting assignments + fail closed; require `init SVN <= current SVN`. +- Migration and rebinding both enforce this mapped-SVN ordering. A missing + current mapping or an initial hash missing from both mappings fails closed; + the legacy wire Init_TDINFO is ignored. +- MigTD hash mappings are cumulative and append-only. A hash's SVN is immutable, + later release SVNs are non-decreasing, and release revocation uses the + locally authoritative leaf-signer CRL rather than hash removal. + +## Rebind vs Migration attestation — DIFFERENT verifiers + +- **Regular migration** → uses **quotes**. REPORTDATA at byte offset **520**. + Helper: `verify_report_data_binding`. +- **Rebind** → uses **TDREPORT** (no quote). REPORTDATA at byte offset + **128**. Helper: `verify_tdreport_data_binding`. +- **Mixing them = bug.** See commit `94975ec` (TH1 binding fix). + +See [Init_TDINFO and ServtdExt Usage Summary](init-tdinfo-servtd-ext.md) for +full detail on how each path verifies TDINFO, and +[Security Bypasses](security-bypasses.md) for which of these checks are +bypassed under which build feature. + +## Async key cleanup + +- SPDM application-context buffers contain encoded ephemeral signing keys. + Zeroization after an `.await` covers returned results, but not cancellation: + `with_timeout` drops the unfinished exchange future. +- Hold `spdm::AppContextGuard` across migration and rebind exchanges so dropping + either role's future wipes the buffer. Keep cancellation coverage for all + four entry points in `src/migtd/src/spdm/tests.rs`. +- SPDM `FINISH` clears `runtime_info.last_session_id` while the established + session still holds keys. Retire every exchange-owned `SpdmContext::session` + slot on return or cancellation, not just the last handshake ID + (`deps/spdm-rs/spdmlib/src/requester/finish_req.rs`, `responder/context.rs`; + upstream cleanup: `7b40eccb`). +- The guard also tears down those slots before `finalize_spdm_session` attempts + transport shutdown. Shutdown must run on protocol failure or timeout without + replacing the primary error. Keep the teardown assertions for both roles, + handshaking/established states, cancellation, and repeated cleanup. + +## TDINFO / MROwner / MROwnerConfig semantics + +- **MROwner** is provisioned by GHCI as the hash of the policy signer's + public key, but it is no longer the cross-peer signer trust anchor. +- **MROwnerConfig** = MigTD policy SVN (a.k.a. "migtd svn"). +- There is no local startup check comparing `MROwnerConfig` with policy SVN. + The policy is bound through measured RTMR2 data, while migration continuity + uses authenticated peer measurements and their verified one-hash mapping. +- Cross-peer signer compatibility is the RTMR1 anchor equality + (root fingerprint + leaf EKU). Leaf and intermediate keys may rotate + independently under the same anchor. +- The legacy wire field **`init_td_info`** is accepted for framing + compatibility but cleared by `MigtdMigrationInformation::read_from_bytes`; + callers see it as absent. The completed one-hash flow must use + `ServtdExt.init_servtd_info_hash` directly and must not depend on a + VMM-supplied 512-byte Init_TDINFO. +- Existing `REVERTME` commits typically bypass MROwner/MROwnerConfig checks + because the host isn't ready to plumb them through; these are test-only + and must be reverted before upstreaming. + +## Migration version roles + +- The source must call `exchange_info(..., true)` to read the TDX module's + EXPORT bounds; the destination uses `false` for IMPORT bounds. The SPDM + requester serializes its local range as `MigrationExportVersion`. +- Equal import/export ranges hide a wrong source-role argument. Keep the + source role consistent through `exchange_info` and `cal_mig_version`. + +## vmcall / transport invariants + +- `vmcall-raw` **never returns `Ok(0)` / EOF**. It blocks until data or + error. "What if VMM returns 0 bytes?" is already defended at the transport + layer. +- Each migration session has its own shared buffer with **`data_status` as + ground truth**. Broadcast interrupt wakes are filtered by the per-buffer + status check — correct by design. + +## Heap allocator + +- `ATTEST_HEAP_SIZE` is currently **2 MiB**. It was bumped from 512 KiB after + commit `3c44ea9` removed the `LOCAL_TCB_INFO` cache, raising per-migration + `verify_quote_integrity_ex` calls from 2 → 4 in loopback migration; the 3rd call + exhausted the old heap (#UD inside the C verifier). +- The C verifier (`verify_quote_integrity_ex` from Intel DCAP `servtd_attest`) + uses **SgxSSL libcrypto** internally — host-glibc-libcrypto repro tools + **under-report** heap pressure. Host repros must link the same allocator + (tlibc dlmalloc/sbrk) and the same libcrypto (SgxSSL) as the in-image build. +- Single-thread heap **does** reuse freelists across calls; "leak across + calls" was rejected as a hypothesis. The 2 MiB bump is the accepted answer. +- See [Memory Budget](memory-budget.md) for the stack/heap/shared-memory + sizing methodology and current equations. + +## Rejected hypotheses — do not reopen without strong new evidence + +- **Singleton GetQuote vector hijacking MigTD vector**: host VMM team + definitively rejected this. `GhciRequestContext` omits + `NotificationInterrupt` by spec; Send/Receive vectors are re-supplied each + call. Don't propose fixes founded on this hypothesis. diff --git a/.agents/knowledge/index.md b/.agents/knowledge/index.md new file mode 100644 index 000000000..37c9e86e6 --- /dev/null +++ b/.agents/knowledge/index.md @@ -0,0 +1,28 @@ +# .agents/knowledge — topical reference index + +## Workflow & conventions + +* [Commit Hygiene, Remotes & Workflow Patterns](commit-and-workflow.md) - DCO sign-off, force-push rules, remote layout, rebase/cherry-pick patterns, issue filing. +* [Setup, Verification Gauntlet & Pre-done Checklist](verification-and-checklist.md) - Mandatory post-checkout setup, the four-CI-workflow gauntlet, EMU invocations, and the "am I done" checklist. +* [Code Style Preferences](code-style.md) - Diff minimization, error handling, logging discipline. +* [Anti-patterns — Things To NOT Do](anti-patterns.md) - Collected pushback items from past sessions. +* [Engineering Decisions Log](decisions-log.md) - Concrete decisions (feature/commit kept vs. dropped) with SHAs — append-only. + +## Domain knowledge + +* [MigTD Domain Facts](domain-facts.md) - Trust model, one-hash/CoRIM lookup, signer-anchor and MROWNER semantics, verifiers, vmcall invariants, and heap sizing. +* [MigTD Architecture Overview (Azure Build)](architecture-overview.md) - Navigation map of functional areas to source/doc. +* [Azure WaitForRequest Error and ReportStatus Map](azure-waitforrequest-errors.md) - Azure IGVM vmcall-raw/SPDM request failures, logging coverage, and host-visible status codes. +* [Security Bypasses](security-bypasses.md) - Which verification checks are bypassed under dev/test build features, and why. +* [Boot Measurements](boot-measurements.md) - How MRTD/RTMR0-3 are populated, including the RTMR1 root+EKU anchor and redacted RTMR2 policyData. +* [Init_TDINFO and ServtdExt Usage Summary](init-tdinfo-servtd-ext.md) - Continuity/integrity checks, current-image one-hash lookup, and migration vs. rebinding behavior. +* [Memory Budget](memory-budget.md) - Stack/heap/shared-memory sizing equations for multi-session SPDM attestation. +* [Reproducible Build — Status & Limitations](reproducible-build.md) - What's implemented, verified, and still limited for MRTD-stable rebuilds. + +## Build, release & test workflows + +* [AzCVMEmu Build & Run — Agent Cheat Sheet](azcvmemu-build-and-run.md) - Feature-flag combinations, prerequisites, `migtdemu.sh` invocations. +* [Policy v2 Generation Workflow](policy-v2-workflow.md) - JSON/CoRIM packaging, signer-anchor enrollment, and measurement-stable mapping/key rotation. +* [Integration Testing — QEMU/vsock](integration-testing.md) - Local non-EMU integration testing with vsock and serial transports. +* [Release Process](release-process.md) - Version semantics, release content checklist, release steps. +* [Code Coverage Plan (Draft Status)](code-coverage-plan.md) - Proposed per-PR coverage flow — decided backend/tooling, phased plan, open questions. diff --git a/.agents/knowledge/init-tdinfo-servtd-ext.md b/.agents/knowledge/init-tdinfo-servtd-ext.md new file mode 100644 index 000000000..bc5660141 --- /dev/null +++ b/.agents/knowledge/init-tdinfo-servtd-ext.md @@ -0,0 +1,145 @@ +--- +type: Reference +title: Init_TDINFO and ServtdExt Usage Summary +description: Definitions of TDINFO_STRUCT/ServtdExt and how they are used and cross-checked across the migration and rebinding paths. +tags: [attestation, tdinfo, servtd, migration, rebinding] +timestamp: 2026-07-26T00:14:16+00:00 +--- + +# Init_TDINFO and ServtdExt Usage Summary + +> Reflects the `one_hash` code. MigTD resolves the current SVN through the +> authenticated source mapping and resolves the initial SVN through the source +> mapping with an authenticated local fallback. The legacy Init_TDINFO wire +> field is accepted for framing but ignored. + +## Definitions + +### TDINFO_STRUCT (512 bytes) — `TdInfo` + +The hardware-defined identity of a TD. Fields: + +| Field | Size | Description | +|---|---|---| +| `attributes` | 8 B | TD attributes (debug, sept-ve-disable, etc.) | +| `xfam` | 8 B | Extended feature attribute mask | +| `mrtd` | 48 B | Measurement of the TD's initial memory contents | +| `mrconfig_id` | 48 B | Software-defined non-owner config ID | +| `mrowner` | 48 B | GHCI owner ID (provisioned as policy signing-key hash); retained for init/current continuity, but no longer the cross-peer signer trust anchor | +| `mrownerconfig` | 48 B | Owner-defined config (in MigTD: first 4 bytes = policy SVN as LE u32, rest zero) | +| `rtmr0..rtmr3` | 4×48 B | Runtime-extendable measurement registers | +| `servtd_hash` | 48 B | Hash of bound service TDs' TDINFO_STRUCTs | +| `reserved` | 64 B | Must be zero | + +**Init_TDINFO** is the TDINFO_STRUCT of the *original MigTD* that was first +bound to the target TD at launch time. The legacy host field is accepted for +wire framing but cleared by `MigtdMigrationInformation::read_from_bytes`. +The completed one-hash design does not require the VMM to provide this +512-byte structure. + +### SERVTD_EXT_STRUCT (272 bytes) — `ServtdExt` + +Metadata stored in the target TD's TDCS, read by the *current* MigTD via `TDG.SERVTD.RD` (`read_servtd_ext()`, which always returns a populated `ServtdExt`). Fields: + +| Field | Size | Description | +|---|---|---| +| `init_servtd_info_hash` | 48 B | SHA-384 identifying the *initial* bound MigTD: `SHA384(masked_init_TDINFO)`, set at first binding | +| `init_attr` | 8 B | SERVTD_ATTR at initial binding. Bits 15:0 = SERVTD_TYPE (0=MigTD). Higher bits = IGNORE flags controlling which TDINFO fields are zeroed before hashing | +| `init_cpusvn` | 16 B | Platform CPU SVN at initial binding | +| `init_tee_tcb_svn` | 16 B | TEE TCB SVN at initial binding | +| `init_tee_model` | 12 B | TEE model info at initial binding | +| `cur_servtd_info_hash` | 48 B | Hash identifying the *currently* bound MigTD | +| `cur_servtd_attr` | 8 B | SERVTD_ATTR of the currently bound MigTD | +| reserved fields | 116 B | Padding | + +## One-hash init/current SVN ordering + +The enforced verification is: + +1. Verify the source quote/TDREPORT and measured policy. +2. Compute the authenticated source's current `tdinfo_hash` and resolve it + through that source policy's verified JSON mapping or CoRIM. +3. Read `ServtdExt.init_servtd_info_hash` and resolve it through the verified + source mapping, falling back to the authenticated destination mapping. +4. Reject conflicting source/local assignments for the initial hash. +5. Require `init_lookup.isvsvn <= current_lookup.isvsvn`. + +A current-source miss or an initial hash missing from both mappings fails +closed. This supports returning to the originating release or moving to a +later cumulative release without requiring arbitrary historical multi-hop +compatibility. No VMM-provided full Init_TDINFO or MROWNER continuity check is +needed for SVN ordering. + +--- + +## Usage in each path (SPDM) + +### Migration (source → destination) + +**Source side** (`spdm_req`): reads `ServtdExt` via `read_servtd_ext()` and +sends it with the legacy Init_TDINFO VDM element. + +**Destination side** (`spdm_rsp` → `mig_policy::authenticate_migration_source_with_init_tdinfo`): +1. Receives ServtdExt and Init_TDINFO; stores ServtdExt in responder context. +2. `authenticate_remote_common`: verifies the source's quote, measured + policy/event log, and signer anchor; it resolves the **current source + TDINFO hash** through the source's verified JSON mapping or CoRIM to build + `evaluation_data_src`. +3. Resolves `ServtdExt.init_servtd_info_hash` through the authenticated source + mapping, then the authenticated local mapping as fallback. Conflicts and a + miss from both mappings fail closed; require `init SVN <= current SVN`. +4. **Policy evaluation** — `evaluate_policy_common` + `evaluate_policy_backward` against `relative_reference = get_local_tcb_evaluation_info()` (the **local** MigTD's TCB, not Init_TDINFO). +5. **SERVTD_ATTR check** (at MSK exchange, `session.rs::exchange_msk`): both sides call `verify_servtd_attr()` on their own bound target, checking `cur_servtd_attr == EXPECTED_SERVTD_ATTR` (hardcoded `0x0`). The historical `cur == init_attr` comparison was **removed** (it could falsely reject after a legitimate rebind). +6. **Approved hash write**: destination computes `SHA384(ServtdExt with cur_servtd_info_hash + cur_servtd_attr zeroed)` and writes it to `APPROVED_SERVTD_EXT_HASH` (`write_approved_servtd_ext_hash`). + +### Rebinding (old MigTD → new MigTD) + +**Old MigTD side** (SPDM requester): same as migration source. + +**New MigTD side** (SPDM responder, `spdm_rsp` → `mig_policy::authenticate_rebinding_old`): +1. `authenticate_rebinding_common`: verifies the old MigTD's **TDREPORT**, + measured policy/event log, and signer anchor; it resolves the old MigTD's + **current TDINFO hash** through that verified policy's JSON mapping or + CoRIM to build `evaluation_data_src`. +2. Resolves `ServtdExt.init_servtd_info_hash` through the old MigTD's + authenticated mapping, then the authenticated local mapping as fallback. + Conflicts and a miss from both mappings fail closed; require + `init SVN <= current SVN`. +3. **Local lookup is a fallback, not an allowlist.** A source hit remains + sufficient, so an older destination need not predict future releases. +4. **Policy evaluation** — `evaluate_policy_backward` against `relative_reference = get_local_tcb_evaluation_info()` (local TCB, not Init_TDINFO). +5. **Approved hash write** + **rebind attr write** (`write_servtd_rebind_attr`, rebinding-specific). + +--- + +## Migration vs rebinding + +| Aspect | Migration (destination) | Rebinding (new MigTD) | +|---|---|---| +| Peer attestation | Quote + supplemental data | TDREPORT | +| Init/current SVN ordering | Source current + source/local initial; enforced | Source current + source/local initial; enforced | +| Legacy Init_TDINFO | Ignored | Ignored | +| Init image lookup in destination's local mapping | Fallback only | Fallback only | +| Policy-eval relative reference | local TCB (`get_local_tcb_evaluation_info`) | local TCB (`get_local_tcb_evaluation_info`) | +| Policy rules evaluated | common + backward | backward | +| `write_approved_servtd_ext_hash` | ✅ | ✅ | +| `write_servtd_rebind_attr` | ❌ | ✅ | + +The one-hash flow does not use Init_TDINFO for continuity, integrity, or as +the policy-evaluation relative reference. Policy still evaluates the peer +against the local MigTD's TCB. + +--- + +## Init_TDINFO continuity vs current-image TCB lookup + +The two inputs serve different purposes: + +| Check | What it verifies | Input | +|---|---|---| +| init/current continuity | The initially bound release is no newer than the authenticated current source release | Current report hash through the source mapping; `init_servtd_info_hash` through source then authenticated-local fallback | +| current-image TCB lookup | The authenticated current peer image resolves to SVN (and optional date/status) | Complete current `tdinfo_hash` via JSON mapping or CoRIM | +| cross-peer signer trust | Source and destination belong to the same signer authority while allowing leaf/intermediate rotation | RTMR1 signer anchor: root fingerprint + enrolled signer-purpose EKU | + +Do not treat the destination mapping as authority for the current source hash +or restore dependence on the legacy Init_TDINFO wire contents. diff --git a/.agents/knowledge/integration-testing.md b/.agents/knowledge/integration-testing.md new file mode 100644 index 000000000..0bf8992aa --- /dev/null +++ b/.agents/knowledge/integration-testing.md @@ -0,0 +1,36 @@ +--- +type: Reference +title: Integration Testing — QEMU/vsock +description: The non-EMU local QEMU+pytest integration layer using vsock or serial transports. +tags: [integration-test, qemu, pytest] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# Integration Testing — QEMU/vsock + +This real-transport integration layer exists **in addition to** the +AzCVMEmu-based `migtdemu.sh` / EMU gauntlet layer covered in +[verification-and-checklist.md](verification-and-checklist.md) and the +`migtd-review` skill. + +## Local QEMU + pytest (vsock/serial transports) + +Canonical source: [doc/integration_test.md](../../doc/integration_test.md). + +```bash +./sh_script/preparation.sh +cd sh_script/test # configure conf/pyproject.toml first +# Vsock build +cargo image --policy config/policy_pre_production_fmspc.json \ + --root-ca config/Intel_SGX_Provisioning_Certification_RootCA_preproduction.cer +sudo pytest -k "cycle" # stress_test_cycles must be 1 in the config +sudo pytest -k "not cycle" # after: bash sh_script/build_final.sh -t test -c -a on +``` + +Serial transport swaps `--features stack-guard,virtio-serial` and adds +`--device_type serial` to the pytest invocations. This layer exercises the real +no_std firmware image end-to-end without depending on a cloud-provider test +environment. + +Provider-specific hardware validation, packaging, and operational procedures +are maintained by downstream integration repositories. diff --git a/.agents/knowledge/memory-budget.md b/.agents/knowledge/memory-budget.md new file mode 100644 index 000000000..41f8a6dd2 --- /dev/null +++ b/.agents/knowledge/memory-budget.md @@ -0,0 +1,47 @@ +--- +type: Reference +title: Memory Budget — Stack, Heap & Shared Memory +description: Current stack/heap/shared-memory sizing equations for multi-session SPDM attestation, and how the multi-session memory test methodology works. +tags: [memory, heap, stack, spdm, sizing] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# Memory Budget — Stack, Heap & Shared Memory + +Canonical source: [doc/memory_usage_test.md](../../doc/memory_usage_test.md) +(methodology: [PR #556](https://github.com/intel/MigTD/pull/556) pends both +sides mid-attestation to force multiple concurrent sessions since vsock +doesn't support multi-link transport). + +## Current sizing equations (destination MigTD, policy v2, SPDM attestation) + +```text +Stack Size = 0x20_0000 +Heap Size = 0x10_0000 + 0x8_0000 * session_num +Shared Memory Size = 0x4_0000 + 0x2_0000 * session_num # vmcall-raw only +``` + +Per-session heap breakdown: ~`0x2_8000` SPDM context data + ~`0x2_0000` remote +policy data. `0x2_0000` shared-memory-per-session is the max vmcall-raw buffer +for a v2 policy payload. + +> Cross-reference: [Domain Facts § Heap allocator](domain-facts.md) records +> the **`ATTEST_HEAP_SIZE = 2 MiB`** production constant and why it was +> bumped from 512 KiB — that is a different (smaller, single-session-focused) +> number from the equations above; don't conflate the two when reasoning +> about OOM reports. + +## How to reproduce the test + +Build with `test_stack_size,test_heap_size` features + `-l info`, then +manually pend both requester and responder after `key_exchange_rsp` (per the +reference PR) so N session pairs are simultaneously mid-handshake with no +in-flight messages, avoiding the vsock single-link constraint. Read +[doc/memory_usage_test.md](../../doc/memory_usage_test.md) for the full QEMU +socat/vsock wiring if you need to rerun this experiment. + +## Caveat + +Shared-memory consumption **cannot** be measured with vsock (allocated in the +device layer for vmcall data, and vsock has no multi-link support) — the +equation above is deductive, not measured, for that term. diff --git a/.agents/knowledge/policy-v2-workflow.md b/.agents/knowledge/policy-v2-workflow.md new file mode 100644 index 000000000..76fb7609a --- /dev/null +++ b/.agents/knowledge/policy-v2-workflow.md @@ -0,0 +1,113 @@ +--- +type: Playbook +title: Policy v2 Generation Workflow +description: End-to-end tool chain for one-hash Policy v2 artifacts, JSON or CoRIM servTD endorsements, signer-anchor enrollment, and hash-stable updates. +tags: [policy-v2, tools, signing, tcb-mapping] +timestamp: 2026-08-25T22:12:55+00:00 +--- + +# Policy v2 Generation Workflow + +Design sources: +[tcb_mapping_design_proposal.md](../../doc/tcb_mapping_design_proposal.md) and +[rtmr1_signer_anchor_proposal.md](../../doc/rtmr1_signer_anchor_proposal.md). +The implementation source of truth is `src/policy/src/v2/measurement.rs` and +`src/policy/src/v2/policy.rs`. Use this playbook when regenerating a v2 policy, +rotating a mapping/signer leaf, or debugging a mismatched `SERVTD_INFO_HASH`. + +## Supported packaging paths + +```text +Shared: + migtd-collateral-generator -> platform TCB/QE collaterals + migtd-policy-generator v2 -> { "policyData": ... } + +JSON compatibility path: + sign tdTcbMapping (tdinfo_hash -> SVN) + optionally sign tdIdentity (SVN -> date/status) + servtd-collateral-generator -> JSON servtdCollateral + issuer chains + cargo image --policy-v2 --policy --policy-issuer-chain + +CoRIM-only path: + omit --servtd-collateral when generating policyData + produce signed TCB-mapping CoRIM (SERVTD_INFO_HASH -> SVN) + enroll the precomputed 48-byte signer anchor and CoRIM: + cargo image --policy-v2 --policy \ + --signer-anchor --servtd-corim +``` + +The legacy `{policyData, signature}` wrapper and `policy_v2_signed.json` +filenames remain accepted, but the **outer policy signature is ignored**. +PolicyData integrity comes from RTMR2. Authenticity of the re-issuable servTD +endorsement comes from either the inner JSON signatures or the CoRIM +`COSE_Sign1`, whose signer chain must resolve to the RTMR1 anchor. + +At boot, MigTD: + +1. Resolves the signer anchor + `A = SHA384(tag || H(rootDER) || leafEkuOidDER)` from a PEM chain or the + direct anchor slot and extends `SHA384(A)` into RTMR1. +2. Extends canonical `policyData` into RTMR2. JSON packaging redacts only the + TCB mapping and mapping issuer chain; JSON TD Identity and its issuer chain + remain measured. A CoRIM-only policy has no `servtdCollateral` and is + measured as-is. +3. Verifies JSON/CoRIM signatures and binds their signer root+EKU to `A`. + +## Updating mappings and rotating signer leaves + +- `svnMappings[].tdMeasurements.tdinfo_hash` and CoRIM digest selectors use + the complete 48-byte `SERVTD_INFO_HASH`, not individual MRTD/RTMR fields. +- A deployable mapping must cover both current MigTD releases and any initial + MigTD hashes that can appear in target-TD `SERVTD_EXT` state. During + migration/rebinding, the verifier resolves the current report hash only + through the authenticated source mapping. It resolves + `init_servtd_info_hash` through the source mapping, then the authenticated + local mapping as fallback, and requires `init SVN <= current SVN`. +- The local lookup is not an allowlist: a source hit is sufficient. The + fallback supports returning to the originating or a later cumulative + release, while arbitrary historical multi-hop paths may fail when neither + endpoint knows the initial hash. +- Mappings are cumulative and append-only. Existing hash-to-SVN assignments + are immutable, later release SVNs are non-decreasing, and leaf-signer CRLs + provide revocation. +- Re-issuing a JSON mapping or CoRIM is measurement-neutral. Re-issuing JSON + TD Identity or its issuer chain changes RTMR2 and requires a new + `tdinfo_hash` endorsement. +- Images built with `use-mock-quote` need two current-release mapping entries: + the synthetic mock-report `tdinfo_hash` used by peer policy evaluation and + the final image `SERVTD_INFO_HASH` used by `SERVTD_EXT` continuity checks. + Generate measured-image policy collateral with + `build_azure_mock_test.sh --retain-mock-report-mapping`. +- Rotating leaf or intermediate keys is measurement neutral only when the root + and signer-anchor EKU are unchanged; the new chain must still validate + and pass signer revocation checks. +- When a CoRIM is enrolled it is the sole TCB lookup authority. Do not expect + JSON fallback on a CoRIM miss. +- MigTD has no trusted clock or persistent mapping-generation state. Mapping + publication order and rollback prevention remain release-authority and + deployment responsibilities; do not describe signed mapping replacement as + an independently enforced in-guest freshness guarantee. +- After enrollment, recompute the image hash with `migtd-hash` and require it + to equal the pre-enrollment value. A mismatch means measured policy content, + root, or signer EKU changed. + +## Implementation status + +The runtime enforces the completed design in both migration and rebinding: +it resolves `ServtdExt.init_servtd_info_hash` and the authenticated source's +current report hash through the source's verified mapping, fails closed on +either miss, and rejects `init SVN > current SVN`. The legacy wire +Init_TDINFO is ignored. + +## Gotcha + +Legacy scripts still use `config/templates/policy_v2_signed.json` and +`policy_issuer_chain.pem`. CoRIM-only builds instead need a policy without +`servtdCollateral`, the 48-byte anchor file, and the signed `.cose` mapping. +Do not mix the direct-anchor and PEM-chain inputs accidentally: the direct +anchor takes precedence when both CFV slots are populated. + +GitHub `cargo image` matrix jobs are compile checks, not publishable release +artifacts. A deployable image must go through either the release CoRIM +generation/enrollment gates or a measured-image JSON mapping flow; never ship a +matrix image with the static template mapping. diff --git a/.agents/knowledge/release-process.md b/.agents/knowledge/release-process.md new file mode 100644 index 000000000..0c10e7b1b --- /dev/null +++ b/.agents/knowledge/release-process.md @@ -0,0 +1,41 @@ +--- +type: Playbook +title: Release Process +description: Version semantics, release content checklist, and release steps for cutting a MigTD release branch. +tags: [release, semver, branching] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# Release Process + +Canonical source: [doc/release.md](../../doc/release.md). + +## Versioning + +`v..` per [semver.org](https://semver.org/). + +## Release content checklist (per `v.` branch) + +- Release build image (no debug messages) + its `MigTD:TEE_INFO_HASH`. +- Debug build image (debug messages to virtual serial) + its + `MigTD:TEE_INFO_HASH`. +- Release notes: tested features, critical fixes/known issues, and the exact + configuration matrix (EMR SOC, IFWI/MCHECK, TDX-module, host + hypervisor/QEMU, guest OS/kernel/initrd, attestation library/DCAP version), + plus source/destination launch parameters. +- `Cargo.lock` (locks dependency versions — see + [reproducible-build.md](reproducible-build.md) for why this matters for MRTD + stability). + +## Steps + +1. Unit test on latest `main`. +2. Tag `v..-rc`. +3. Release test on the RC (validation engineer). +4. Fix issues found. +5. Create branch `v.`. +6. Upload release content to that branch. + +## Release test features + +Migration flow, attestation flow. diff --git a/.agents/knowledge/reproducible-build.md b/.agents/knowledge/reproducible-build.md new file mode 100644 index 000000000..1fe319235 --- /dev/null +++ b/.agents/knowledge/reproducible-build.md @@ -0,0 +1,46 @@ +--- +type: Reference +title: Reproducible Build — Status & Limitations +description: What's implemented for MigTD build reproducibility (container normalization, --remap-path-prefix), what's verified, and what's still limited — directly affects MRTD stability across rebuilds. +tags: [reproducible-build, mrtd, determinism] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# Reproducible Build — Status & Limitations + +Canonical source: [doc/reproducible_build.md](../../doc/reproducible_build.md). +Relevant whenever an MRTD mismatch across rebuilds is under investigation — +read [Domain Facts § Trust model](domain-facts.md) first for why MRTD +stability matters (root of trust). + +## Bottom line + +**With the pinned container, or with native `cargo image` (via `xtask`), the +build is already reproducible.** `xtask` applies `--remap-path-prefix` +(`xtask/src/build.rs`, `remap_rustflags`) for both `td-shim` and `migtd` +compiles, mapping project root → `/migtd`, `CARGO_HOME` → `/cargo`, +`RUSTUP_HOME` → `/rustup`. Verified: clean builds in two different paths +produced identical sha256 for both Linux TDVF and Azure IGVM outputs. + +## What's NOT covered by the fix + +- **Raw `cargo build` invocations outside `xtask`** (e.g. test scripts) still + embed real absolute paths. +- `td-shim-strip-info` is invoked **without `-s`** by `build_final.sh` → it's + a no-op for path stripping on the ELF binaries (its PE-specific + timestamp/PDB-GUID branches never apply — only `x86_64-unknown-uefi` + targets have those). Even with `-s`, ~19 embedded paths remain. +- Symbols are never stripped (`strip = "symbols"` intentionally disabled — + see `confidential-containers/td-shim#272`). +- No `SOURCE_DATE_EPOCH` (not currently needed — no observed timestamp + variance in these ELF builds). +- **No CI enforcement** — nothing in CI builds twice and diffs sha256. + +## If asked to "fix reproducibility" + +Check whether the reported non-determinism is from a **raw `cargo build`** +bypassing `xtask`, or from a genuinely new source of variance — the +path-embedding problem (the historically dominant cause, tracked in +[intel/MigTD#51](https://github.com/intel/MigTD/issues/51)) is already solved +for the documented `cargo image` build path. Don't re-propose the container +or `--remap-path-prefix` as if they were missing. diff --git a/.agents/knowledge/security-bypasses.md b/.agents/knowledge/security-bypasses.md new file mode 100644 index 000000000..77d7c2085 --- /dev/null +++ b/.agents/knowledge/security-bypasses.md @@ -0,0 +1,89 @@ +--- +type: Reference +title: MigTD Security Bypasses — Feature Comparison +description: Catalogue of verification checks bypassed under AzCVMEmu/test_mock_report/use-mock-quote build features, and why each is bypassed. +tags: [security, build-features, attestation, spdm, tls] +timestamp: 2026-07-26T00:14:16+00:00 +--- + +# MigTD Security Bypasses — Feature Comparison + +This document catalogues the verification checks bypassed under the +development/test build features, and explains **why** each is bypassed. + +> **None of these bypasses are acceptable in production.** They exist solely +> to enable development/testing on non-production environments. + +> Locations are given by function (line numbers drift). There is no local +> startup check comparing TDINFO.MROWNERCONFIG with policy SVN; peer +> init/current continuity is enforced through the authenticated one-hash +> mapping. + +--- + +## Feature Semantics + +| Feature | Environment | TDX HW | `tdcall_report` | Quote (QGS/IMDS) | +|---------|-------------|:---:|:---:|:---:| +| `AzCVMEmu` | Desktop emulator (no TDX) | ✗ | Emulated (REPORTDATA not bound) | Emulated | +| `test_mock_report` | Emulated (implies AzCVMEmu) | ✗ | Emulated | Emulated | +| `use-mock-quote` | **Real TDX hardware** | ✓ | **Real** (REPORTDATA correctly bound) | Static mock data | + +- **`AzCVMEmu` / `test_mock_report`**: no hardware — `tdcall_report` is emulated + and does **not** embed caller-supplied REPORTDATA, so every REPORTDATA-derived + check must be bypassed. +- **`use-mock-quote`**: real TDX — `tdcall_report` binds REPORTDATA correctly, + so quote-derived migration checks are bypassed while TDREPORT-derived rebind + checks remain available. + +--- + +## SPDM Migration Path + +| # | Check | `AzCVMEmu` | `use-mock-quote` | Location | Reason | +|---|-------|:---:|:---:|------|--------| +| 1 | REPORTDATA TH1 binding — v1 | **Bypassed** | **Bypassed** | `spdm_rsp::rsp_verify_peer_attestation_v1`, `spdm_req` (requester) | Migration verifies REPORTDATA from quote supplemental data; mock quote is static | +| 2 | REPORTDATA TH1 binding — v2 | **Bypassed** | **Bypassed** | `spdm_rsp::rsp_verify_peer_attestation_v2`, `spdm_req` (requester) | Same — quote supplemental data is mocked | + +> Gate note: the v1 REPORTDATA check is additionally disabled under +> `test_disable_ra_and_accept_all`. + +--- + +## SPDM Rebinding Path (prepare-rebind) + +| # | Check | `AzCVMEmu` | `use-mock-quote` | Location | Reason | +|---|-------|:---:|:---:|------|--------| +| 5 | REPORTDATA TH1 binding (responder) | **Bypassed** | **Enforced** | `spdm_rsp` rebind handler (`#[cfg(not(any(AzCVMEmu, test_mock_report)))]`) | Rebind uses only `tdcall_report` (no quotes); real HW binds REPORTDATA correctly | +| 6 | REPORTDATA TH1 binding (requester) | **Bypassed** | **Enforced** | `spdm_req::...rebind...` (`#[cfg(not(any(AzCVMEmu, test_mock_report)))]`, `verify_tdreport_data_binding`) | Same | + +--- + +## TLS Path (non-SPDM) + +| # | Check | `AzCVMEmu` | `use-mock-quote` | Location | Reason | +|---|-------|:---:|:---:|------|--------| +| 8 | Public-key hash in REPORTDATA (cert verification) | **Bypassed** | **Bypassed** | `ratls/server_client.rs` cert-verify callbacks (`cfg!(AzCVMEmu)` / `cfg!(use-mock-quote)`) | EMU: REPORTDATA not bound. Mock-quote: cert path uses quote-derived data which is mocked | + +--- + +## What Remains Enforced + +### Under `AzCVMEmu` +- Full SPDM / TLS handshake (key exchange, cipher negotiation) +- RTMR2 policyData integrity and event-log replay +- Inner JSON mapping/identity signatures or signed-CoRIM verification, with + every signer bound to the RTMR1 root+EKU anchor +- Init/current SVN ordering through the authenticated source's verified + mapping; both mapping misses fail closed +- Policy evaluation (`evaluate_policy_common` / `evaluate_policy_backward`) +- **SERVTD_ATTR check** (`verify_servtd_attr`: `cur_servtd_attr == 0x0`) +- Rebind token creation/exchange and `tdcall_servtd_rebind_approve` (emulated) + +### Under `use-mock-quote` (real HW) +All of the above, **plus**: +- **Rebind REPORTDATA TH1 binding** (real `tdcall_report`) + +`use-mock-quote` bypasses quote-derived migration REPORTDATA checks. It does +not bypass mapped init/current SVN ordering. There is no destination-local +Init_TDINFO allowlist in the one-hash design. diff --git a/.agents/knowledge/verification-and-checklist.md b/.agents/knowledge/verification-and-checklist.md new file mode 100644 index 000000000..0a33bcac0 --- /dev/null +++ b/.agents/knowledge/verification-and-checklist.md @@ -0,0 +1,94 @@ +--- +type: Playbook +title: Setup, Verification Gauntlet & Pre-done Checklist +description: Mandatory post-checkout setup, the four-CI-workflow verification gauntlet, common EMU invocations, and the pre-done checklist. +tags: [ci, verification, emu, setup, checklist] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Setup, Verification Gauntlet & Pre-done Checklist + +> Condensed in the root [agent guide](../../AGENTS.md). + +## Mandatory setup after fresh checkout / submodule update / `git clean` + +```bash +bash sh_script/preparation.sh +``` + +This applies the `spdm-rs` patches to the ring source selected by MigTD's +workspace override, `deps/td-shim/library/ring` +(`EphemeralPrivateKey::export_private_key_bytes`/`from_private_key_bytes` and +`digest::Context::to_bytes`/`from_bytes`). See +[`doc/dependency_preparation.md`](../../doc/dependency_preparation.md) for why +spdm-rs's own ring copy is not selected. **Skipping preparation produces build +errors that look like a real baseline regression but aren't.** CI runs it +automatically; **locally you must run it manually** after: + +- a fresh clone, +- `git clean -fdx`, +- any `git submodule update`, +- switching to a branch with different submodule SHAs. + +## Verification — all five CI workflows MUST pass, no exceptions + +The project standard is that **every test in every workflow passes** before a +change is considered done. Use the gauntlet script as the standard pre-push +verification: + +```bash +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --list +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --from main # resume +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --only emu # one stage +``` + +Stages mirror the five workflows: **format → deny → library → main → emu** +(after `prep`). The EMU stage includes the CoRIM policy contract and all 18 +matrix scenarios. The script stops at the first failure. **Fix the root cause; +don't skip ahead.** + +`cargo test` alone is **not sufficient** for changes to: + +- `event_log` / RTMR replay +- policy parsing / verification (`policy/src/v2/`, `mig_policy.rs`) +- migration session / handshake / rebind paths +- SPDM transport (`src/spdm/`) +- crypto / cert / PEM parsing (`src/crypto/`) +- any vmcall transport + +For those, **always** run the EMU integration tests (full or a relevant +subset via `./migtdemu.sh`). + +### Common single-scenario EMU invocations + +```bash +./migtdemu.sh --skip-ra --both --no-sudo --log-level info +./migtdemu.sh --features spdm_attestation --skip-ra --both --no-sudo --log-level info +./migtdemu.sh --operation rebind-prepare \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --skip-ra --both --no-sudo --log-level info +./sh_script/build_AzCVMEmu_policy_and_test.sh --mock-report # full matrix +``` + +**Do not run multiple `migtdemu.sh` invocations concurrently** — it hardcodes +TCP port 8001, pins to `taskset -c 0`, and writes a shared `target/release/migtd` +artefact. + +See [AzCVMEmu build & run](azcvmemu-build-and-run.md) for feature-flag details +and [integration testing](integration-testing.md) for the QEMU/vsock test layer. + +## Quick checklist before "I'm done" + +1. `bash sh_script/preparation.sh` ran since last submodule change? +2. `cargo fmt --check` clean (only your touched files)? +3. `cargo clippy ... -- -D warnings` clean on in-scope features? +4. `cargo test` clean for crates you touched? +5. EMU tests run for boundary-code changes (event_log, policy, crypto, spdm, + vmcall)? +6. All four CI workflows pass via `run-ci-gauntlet.sh`? +7. Every committable change is `-s` signed-off (excluding debug / `REVERTME`)? +8. Commit messages brief and accurate (problem + high-level solution)? +9. No unrelated changes piled into one commit? +10. Pushed only to a personal fork remote (`--force-with-lease` if rewriting)? diff --git a/.agents/skills/migtd-port/SKILL.md b/.agents/skills/migtd-port/SKILL.md new file mode 100644 index 000000000..b6461f47a --- /dev/null +++ b/.agents/skills/migtd-port/SKILL.md @@ -0,0 +1,209 @@ +--- +name: migtd-port +description: Port the Microsoft `integration` branch onto an intel/main-based branch in the MigTD repo by cherry-picking (or rebasing) only the not-yet-upstreamed commits, then validating each pick with cargo fmt + the AzCVMEmu integration tests. Use when asked to "port integration to intel/main", "cherry-pick the integration branch", "rebase integration onto intel/main", "bring integration changes to integration2", or to forward-port Microsoft MigTD changes upstream. +--- + +# MigTD Port (integration → intel/main) + +Workflow + reusable scripts for moving the **remaining** Microsoft-fork changes from +the `integration` branch onto a branch based on `intel/main` (e.g. `integration2`, +or a fresh upstream PR branch). The hard part is **not** the mechanical cherry-pick — +it is figuring out which commits are *genuinely missing* versus already upstreamed in +reworded/squashed form, and never reverting the target branch's own improvements. + +Pairs with the **migtd-review** skill (trust model, build features, full CI gauntlet). +Read that skill's §1 before reasoning about any behavioural conflict you resolve here. + +--- + +## 1. The core problem (read FIRST) + +- The **majority of `integration`'s work has already been upstreamed** to `intel/main` + in *reworded and/or squashed* form. A naive `git cherry-pick base..integration` + re-applies dozens of already-present commits and conflicts on ~80% of them. +- `git cherry` (patch-id) **under-detects** duplicates: upstreaming refines the patch, + so the patch-id differs even though the change is present. `git cherry` only catches + byte-identical cherry-picks (`-`). +- **Commit-message similarity is the reliable "already there" signal.** Subjects survive + upstreaming mostly intact (often just gaining a `type(scope):` prefix). Matching each + `integration` subject against the target branch's subjects finds the reworded dupes. +- Therefore: **detect → human-review → pick only the residue → verify each pick.** + Never blind-pick. The end state must converge toward the `integration` *tip behaviour*, + but must **keep** the target branch's CI/dependency improvements and any fix the target + already carries in a better form. + +### Topology & remotes + +``` +intel https://github.com/intel/MigTD.git # upstream target base (intel/main) +origin https://github.com//MigTD.git # personal fork; carries origin/integration +upstream https://github.com/microsoft/MigTD.git # Microsoft fork (integration originates here) +``` + +- `integration` = Microsoft-fork dev branch (downstream of `intel/main` + lots of extra work). +- Target = an `intel/main`-based branch you are forward-porting onto. +- `merge-base integration ` is the common ancestor; everything after it on + `integration` is a *candidate*, everything after it on the target is the + *already-upstreamed corpus* you match against. + +--- + +## 2. Always-skip categories + +These are decided up front (the user's standing rules for this port). Mark them skip +without per-commit debate: + +| Category | Rule | +|---|---| +| **CI workflow SHA / action bumps** | The target (intel/main) owns its CI. Do **not** port `integration`'s CI bumps. Keep the target's. | +| **Dependency *downgrades*** | Never move a dep backwards. If `integration` pins an older version than the target, keep the target's newer pin. | +| **`sh_script/fuzzing.sh`** | Skip — target keeps its own. | +| **Anything the target lacks a commit for** | If `integration` has no commit introducing a change (it's just an older state), that's not a change to port — keep the target's version. | +| **Commits with a high subject-similarity match on target** | Already upstreamed. Verify the diff is equivalent, then skip. | + +Everything else is a **CANDIDATE** → review its actual diff → keep or skip with a reason. + +--- + +## 3. The workflow + +``` +0. preparation bash sh_script/preparation.sh # once per fresh checkout / submodule update +1. safety tag git tag -backup-before-port # so you can always get back +2. detect scripts/find-port-candidates.sh ... # table of keep/skip suggestions +3. triage record decisions in the `picks` session table (see §5) +4. pick loop per CANDIDATE: git cherry-pick -> resolve -> scripts/port-verify.sh +5. milestone scripts/emu-milestone.sh # after each batch / after a squash/drop +6. full CI parity migtd-review run-ci-gauntlet.sh # before pushing (all 4 workflows) +7. push --force-with-lease to a PERSONAL fork only; never a shared branch +``` + +### Step 2 — detect + +```bash +.agents/skills/migtd-port/scripts/find-port-candidates.sh \ + --source origin/integration --target --base +``` + +Prints a numbered table; each row is tagged: +- `SKIP-patchid` — identical patch already on target (`git cherry` `-`). Safe skip. +- `SKIP-similar` — subject ≥ threshold% similar to a target commit → reworded duplicate. + **Verify the diff, then skip.** +- `CANDIDATE` — no good match → likely genuinely missing. **Review the diff and decide.** + +Add `--sql` to emit `INSERT INTO picks(...)` seed rows for the session DB, and `--full` +to see untruncated subjects. The suggestion is a *starting point* — you still read diffs. + +### Step 4 — the per-pick gate (MANDATORY after every pick) + +After each `git cherry-pick` and conflict resolution: + +```bash +.agents/skills/migtd-port/scripts/port-verify.sh +``` + +It runs, fastest-first, stopping at the first failure: +1. `cargo fmt` (apply — picks frequently need reformatting; commit the reformat) +2. `cargo fmt --check` +3. `cargo xtask lib-test --crates migtd` (migtd unit tests + feature matrix) +4. `fast-emu-check.sh` (skip-RA + SPDM skip-RA emulation smoke) + +Use `--no-emu` only for doc-only / non-boundary picks. Fix failures **before** the next +pick — do not pile commits on top of a broken one (use `git rebase -i` to fold/drop). + +--- + +## 4. Verification ladder + +Three tiers, cheap → expensive. Do **not** skip straight to push. + +| Tier | Script | Scope | When | +|---|---|---|---| +| fast | `scripts/fast-emu-check.sh` | 2 emu scenarios (skip-RA, SPDM skip-RA) | after **every** pick (via `port-verify.sh`) | +| milestone | `scripts/emu-milestone.sh` | 8 curated emu scenarios | after a batch of picks / after a drop or squash | +| full CI | `.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh` | all 14 emu + 32 `cargo image` + format + deny | before pushing | + +For just the full emu matrix or just the firmware builds: +```bash +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --only emu +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --only main +``` + +Why a fast gate per-pick and not the full 14 every time: the full emu matrix is ~20–40 +min; the 2-scenario gate is a couple of minutes and catches the overwhelming majority of +broken picks (build break, fmt, obvious logic regressions). The milestone (8) and full +(14) tiers catch policy-v2 / rebind / key-rotation specific regressions. + +> **migtdemu.sh is not parallel-safe** (hardcoded port 8001, `taskset -c 0`, fixed log +> names, shared `target/release/migtd`). Run emu scenarios **sequentially**. The scripts +> here already do. + +--- + +## 5. Tracking decisions — the `picks` session table + +Use the per-session SQLite DB (not a markdown file) to track every candidate. Schema used +in the worked example (`seq, hash, subject, status, note, pick_order`): + +```sql +-- statuses: 'pick' | 'done' | 'skip-similar' | 'skip-user' | 'skip-coupled' +UPDATE picks SET status='done', pick_order= WHERE seq=; -- after a successful pick +SELECT seq, hash, subject FROM picks WHERE status='pick' ORDER BY seq; -- remaining work +``` + +Seed it from `find-port-candidates.sh --sql`, then correct statuses as you review diffs. +This survives context summarisation and lets you resume mid-port. + +--- + +## 6. Conflict-resolution patterns & gotchas (learned) + +- **Prefer the target's structure.** When a pick conflicts because the target refactored a + function signature or moved code, re-express the *intent* of the `integration` commit on + top of the target's structure — do not drag the old structure back. +- **Gate on what the target gates on.** Example from the integration2 port: init-TDINFO / + servtd code is gated on `policy_v2` on the target, not `all(vmcall-raw, policy_v2)`. + Keep the target's gate. +- **Split partial picks.** A single `integration` commit often bundles a keeper + a part + that's already upstreamed or out-of-scope. Cherry-pick with `-n`, then `git reset`/`git + checkout -p` to stage only the keeper hunks. Note the split in the `picks.note`. +- **Combine related picks** when several `integration` commits implement one logical change + (e.g. all "truncate long logs" tweaks) — fold them into one commit. Ask the user before + combining if it's non-obvious. +- **Watch `git rerere`.** It can replay a *wrong* prior resolution (seen: a duplicate + `igvm-attest` key injected into `Cargo.toml`). If a resolution looks off, `git + checkout --conflict=merge ` and redo by hand; disable rerere before a big rebase if + it has a bad cached resolution. +- **Dropping an obsolete commit** mid-stack: `git rebase --onto ~1 `. + Re-run the milestone tier afterward — a "clean" drop can still change behaviour. +- **Feature-build footguns**: migtd default feature is `virtio-vsock` (no `vmcall-raw`); lib + tests with the `main` feature need `--lib` (bin `main` symbol clash, E0428); SPDM builds + need `export SPDM_CONFIG="$(pwd)/config/spdm_config.json"` (the scripts set this). For the + broader feature-gating map (which crates compile under which feature), see migtd-review + `references/build-features.md`. + +--- + +## 7. Commit message conventions + +- Brief, precise, conventional-commit style subject (`type(scope): summary`). +- Add a **`Signed-off-by:`** trailer (DCO — upstream PRs require it). `git commit -s`. +- For AI-assisted work, add **`Co-developed-by:`** for the AI contribution (user preference). +- Cherry-picks: keep `git cherry-pick -x` (adds `(cherry picked from commit …)`) when the + provenance is useful for an upstream PR; drop it when squashing/reworking. +- Keep PR branches single-purpose (one logical change per upstream PR), e.g. `hash_fix`, + `spdm-rebind-error-propagation` — cherry-pick the relevant commit(s) onto a fresh + `intel/main`-based branch rather than pushing the whole port. + +--- + +## 8. References + +- `references/port-playbook.md` — durable heuristics + the worked integration→integration2 + example (categories, counts, the specific keep/skip decisions and why). +- `scripts/find-port-candidates.sh` — keep/skip detection (patch-id + subject similarity). +- `scripts/port-verify.sh` — the after-every-pick gate (fmt + lib-test + fast emu). +- `scripts/fast-emu-check.sh` — 2-scenario emu smoke. +- `scripts/emu-milestone.sh` — 8-scenario emu checkpoint. +- migtd-review skill — trust model (§1), build features, and `run-ci-gauntlet.sh` for full + CI parity (format + deny + 32 image builds + 14 emu). diff --git a/.agents/skills/migtd-port/references/port-playbook.md b/.agents/skills/migtd-port/references/port-playbook.md new file mode 100644 index 000000000..33a6d7fc5 --- /dev/null +++ b/.agents/skills/migtd-port/references/port-playbook.md @@ -0,0 +1,114 @@ +--- +type: Playbook +title: MigTD Port Playbook — integration → intel/main +description: Durable heuristics and worked example for forward-porting Microsoft-fork MigTD changes onto an intel/main-based branch. +tags: [port, cherry-pick, integration, intel-main] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Port playbook — durable heuristics + worked example + +Companion to `SKILL.md`. The first half is reusable for **any** `integration → intel/main` +port; the second half is the **worked integration → integration2 port (June 2026)** kept as +a concrete reference for the kinds of decisions that recur. + +--- + +## Part A — durable heuristics + +### Deciding keep vs skip for a CANDIDATE + +For each commit the detector tags `CANDIDATE` (no strong subject match on target), read the +**actual diff** and ask, in order: + +1. **Is the change already present in different form?** `git show ` then grep the target + tree for the introduced symbol/string. Subjects diverge more than code — the detector can + miss a dupe whose subject was heavily reworded. If present and equivalent → skip-similar. +2. **Is it an always-skip category?** (CI bump, dep downgrade, `fuzzing.sh`, target-only file.) → skip. +3. **Does it depend on a commit you're skipping?** If so it's `skip-coupled` unless you also + port the dependency. Re-express on the target's structure if the keeper part is wanted. +4. **Was it reverted later on `integration`?** Check `git log --oneline ..integration -- + ` for a revert/supersede. If the net effect at `integration` tip is gone → skip. + (Watch for `REVERT_ME:`-tagged temporary commits still live at the tip — keep only the + surviving parts.) +5. **Otherwise → keep.** Cherry-pick, resolve onto the target's structure, verify. + +### Detection method ranking (most → least reliable here) + +1. **Subject similarity** vs the target's post-base subjects (`find-port-candidates.sh`). Best + single signal because subjects survive upstreaming. +2. **`git cherry` patch-id** (`-`). Only catches byte-identical picks, but those are *certain*. +3. **Per-commit 3-way / `git merge-tree`** — unreliable when the branches diverged + structurally (lots of false "conflicts"). Use only to sanity-check a specific pick. + +### Convergence invariant + +After the port, the target's **behaviour** should match `integration`'s tip for the ported +areas, while **keeping** the target's CI/dependency posture and any fix it already carries in +a better form. When in doubt, diff the specific module against `integration` tip and reconcile +deliberately — do not assume "more commits = closer". + +--- + +## Part B — worked example: integration → integration2 (June 2026) + +- **Topology:** merge-base `7829a8f9`. `integration2` = base + 86 (intel/main upstreamed work + + CI/dep bumps). `integration` = base + 148. Baseline for the scan: `88f4ae7e`. +- **Candidate scan** (`88f4ae7e..integration`, 93 rows): triaged to + **28 picked · 26 skip-similar · 9 skip-user · 1 skip-coupled** (the historical 64-row count + was a tighter base window; the 93-row scan from `88f4ae7e` is what the current script prints). +- The tree was later **rebased/squashed** by the user, so the final commit count on + `integration2` differs from "28 picks". Treat the numbers as illustrative of the *triage*, + not the final history. + +### Notable keep decisions + +- **policy_v2 gating** (user-confirmed): gate init_td_info / servtd_ext code on `policy_v2`, + **not** `all(vmcall-raw, policy_v2)` (the latter came from a skipped commit). Keep the + target's `policy_v2` gate. +- **Truncating long logs**: several `integration` commits combined into one logical pick. +- **REVERT_ME #40/#42**: kept only the surviving parts (logging threshold doubling + 256/128/32; use-mock-quote allowlist gating); dropped the superseded soft-fails. +- **Partial pick of the REPORTDATA-bypass commit**: applied the bypass + script; dropped the + unrelated ratls/mrowner and ServtdExt-optional hunks (pre-scope / out-of-scope). + +### Notable skip decisions + +- **SERVTD_EXT opt-out feature** (`f408a0c25`, `90f97e2bf`, `f9d966e18`, `0f4c2fd86`): + **skipped by user constraint — assume SERVTD_EXT is always opt-in.** `read_servtd_ext()` + returns `ServtdExt` (not `Option`). The opt-out series was entangled with a pre-scope + refactor adding `init_policy_hash` to `client_rebinding` (5-arg vs target's 4-arg) and a + `setup_evaluation_data_with_tdinfo` that doesn't exist on the target. +- **`fix(clippy): silence derivable_impls`** (`9912691ba`): `skip-coupled` — only needed + because of the skipped init_td_info re-gating; the target doesn't have the offending impl. +- **User-requested skips**: UB-in-FFI-return-type fix, `unify init_td_info handling`, peak-heap + logging, post-rebase fmt/cleanup, `enable jq for rebind-skip-ra` CI tweak. +- **Obsolete after squash** (`51efdbb1`, "port PR #825 cfg structure"): its `main.rs` import + became net-zero and its `mig_policy` gating referenced `rebinding::InitData`, which the + function no longer uses (signature changed to `&[u8; TD_INFO_SIZE]`). Dropped via + `git rebase --onto 51efdbb1~1 51efdbb1`; re-verified clean (lib-test all configs, emu 8/8). + +### Migration / rebinding facts confirmed during the port (target = integration2) + +- `verify_servtd_info_hash` computes a **direct** `SHA384(masked_tdinfo)` (not the old + composite `init_servtd_info_hash`). `verify_init_tdinfo` wraps it. +- Migration-dest `authenticate_migration_source_with_init_tdinfo` verifies init-TDINFO + integrity + allowlist, gated `#[cfg(not(any(AzCVMEmu, test_mock_report, use-mock-quote)))]` + (real-HW only). Both migration and rebinding use `get_local_tcb_evaluation_info()` (local + TCB) as the policy reference — neither uses init as a relative reference. +- `verify_servtd_attr` only checks `cur == EXPECTED_SERVTD_ATTR` (0x0); the `cur == init_attr` + check was removed. +- `finalize_spdm_session` preserves `decode_spdm_session_err` error mapping. + +### Validation commands used + +```bash +cargo xtask lib-test --crates migtd # migtd unit tests + targeted feature matrix +.agents/skills/migtd-port/scripts/fast-emu-check.sh # per-pick smoke (skip-ra + spdm skip-ra) +.agents/skills/migtd-port/scripts/emu-milestone.sh # 8-scenario checkpoint +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh # full CI parity before push +export SPDM_CONFIG="$(pwd)/config/spdm_config.json" # required for any spdm build +``` + +Safety tags created (pattern to repeat): `integration2-backup-before-cherrypick`, +`integration2-before-drop-51efdbb1`. diff --git a/.agents/skills/migtd-port/scripts/emu-milestone.sh b/.agents/skills/migtd-port/scripts/emu-milestone.sh new file mode 100755 index 000000000..c734c6138 --- /dev/null +++ b/.agents/skills/migtd-port/scripts/emu-milestone.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# +# emu-milestone.sh — a curated 8-scenario AzCVMEmu checkpoint. Broader than +# fast-emu-check.sh (which runs 2), cheaper than the full 14-scenario gauntlet +# emu stage. Run this at logical milestones (e.g. after a batch of picks, or +# after dropping/squashing a commit) before the final full-matrix run. +# +# Covers: skip-ra, policy-v2 (mock), policy-v2 + igvm, rebind (mock), and the +# SPDM variants + a key-rotation scenario — the cross-section that has +# historically caught regressions in this port work. +# +# For TRUE CI parity (all 14 emu scenarios + the 32 `cargo image` builds + +# format + deny) use the migtd-review gauntlet: +# .agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --only emu +# .agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --only main +# +# Exit 0 only if every scenario passes. +# +# Usage: ./emu-milestone.sh +set -u + +REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" +cd "$REPO_ROOT" +export SPDM_CONFIG="$REPO_ROOT/config/spdm_config.json" + +LOG_DIR="$REPO_ROOT/target/port-milestone" +mkdir -p "$LOG_DIR" +PASS=0; FAIL=0; FAILED="" + +P="./config/AzCVMEmu/policy_v2_signed.json" +C="./config/AzCVMEmu/policy_issuer_chain.pem" +PA="./config/AzCVMEmu/policy_v2_signed_a.json"; CA="./config/AzCVMEmu/policy_issuer_chain_a.pem" +PB="./config/AzCVMEmu/policy_v2_signed_b.json"; CB="./config/AzCVMEmu/policy_issuer_chain_b.pem" + +run() { # name timeout cmd... + local name="$1"; shift + local to="$1"; shift + local log="$LOG_DIR/${name}.log" + echo ""; echo "########## $name ##########" + timeout "$to" "$@" > "$log" 2>&1 + local rc=$? + if [ $rc -eq 0 ] && grep -q "SUCCESS" "$log"; then + echo "PASS: $name"; PASS=$((PASS+1)) + else + echo "FAIL: $name (rc=$rc) -> $log"; FAIL=$((FAIL+1)); FAILED="$FAILED $name" + echo "--- last 15 lines ---"; tail -15 "$log" + fi +} + +run skip-ra 300 ./migtdemu.sh --skip-ra --both --no-sudo --log-level info +run policy-v2 900 ./migtdemu.sh --policy-v2 --policy-file "$P" --policy-issuer-chain-file "$C" --mock-report --both --no-sudo --log-level info +run policy-v2-igvm 900 ./migtdemu.sh --policy-v2 --policy-file "$P" --policy-issuer-chain-file "$C" --mock-report --features igvm-attest --both --no-sudo --log-level info +run rebind-mock 900 ./migtdemu.sh --operation rebind-prepare --policy-file "$P" --policy-issuer-chain-file "$C" --mock-report --both --no-sudo --log-level info +run spdm-skip-ra 300 ./migtdemu.sh --skip-ra --features spdm_attestation --both --no-sudo --log-level info +run spdm-policy-v2 900 ./migtdemu.sh --policy-v2 --policy-file "$P" --policy-issuer-chain-file "$C" --mock-report --features spdm_attestation --both --no-sudo --log-level info +run spdm-rebind-skip-ra 300 ./migtdemu.sh --operation rebind-prepare --policy-file "$P" --policy-issuer-chain-file "$C" --skip-ra --features spdm_attestation --both --no-sudo --log-level info +run policy-v2-key-rotation 900 ./migtdemu.sh --policy-v2 --src-policy-file "$PA" --src-policy-issuer-chain-file "$CA" --dst-policy-file "$PB" --dst-policy-issuer-chain-file "$CB" --mock-report --both --no-sudo --log-level info + +echo ""; echo "================ MILESTONE SUMMARY ================" +echo "PASS=$PASS FAIL=$FAIL" +[ -n "$FAILED" ] && { echo "FAILED:$FAILED"; exit 1; } +exit 0 diff --git a/.agents/skills/migtd-port/scripts/fast-emu-check.sh b/.agents/skills/migtd-port/scripts/fast-emu-check.sh new file mode 100755 index 000000000..739d354a6 --- /dev/null +++ b/.agents/skills/migtd-port/scripts/fast-emu-check.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# +# fast-emu-check.sh — the quick per-commit emulation gate used during a +# cherry-pick / rebase loop. Builds and runs the two fastest AzCVMEmu scenarios +# (skip-RA and SPDM skip-RA). This is NOT full CI parity; it is the cheap +# smoke test you run after EACH pick before moving on. Run the milestone matrix +# (emu-milestone.sh) at checkpoints and the full gauntlet (see SKILL.md) before +# pushing. +# +# Built in the dev profile (not --release): intel/main fences the insecure test +# features test_disable_ra_and_accept_all / use-mock-quote out of release builds +# via compile_error! (src/migtd/src/lib.rs), so the emu smoke must use --debug. +# +# Exit 0 only if BOTH scenarios print SUCCESS and return rc 0; otherwise 1. +# +# Usage: ./fast-emu-check.sh +set -u +set -o pipefail + +REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" +cd "$REPO_ROOT" +export SPDM_CONFIG="$REPO_ROOT/config/spdm_config.json" + +LOG_DIR="$REPO_ROOT/target/port-fast" +mkdir -p "$LOG_DIR" +RC=0 + +run() { # name timeout cmd... + local name="$1"; shift + local to="$1"; shift + local log="$LOG_DIR/${name}.log" + echo "=== $name ===" + set +e + timeout "$to" "$@" > "$log" 2>&1 + local rc=$? + set -e + if [ $rc -eq 0 ] && grep -q "SUCCESS" "$log"; then + echo " PASS ($name)" + else + echo " FAIL ($name) rc=$rc -> $log" + echo " --- last 20 lines ---" + tail -20 "$log" | sed 's/^/ /' + RC=1 + fi +} + +echo "[1/2] build skip-ra" +cargo build --no-default-features \ + --features "AzCVMEmu,test_disable_ra_and_accept_all" 2>&1 | tail -2 +run skip-ra 180 ./migtdemu.sh --skip-ra --both --no-sudo --log-level info --debug + +echo "[2/2] build spdm skip-ra" +cargo build --no-default-features \ + --features "AzCVMEmu,test_disable_ra_and_accept_all,spdm_attestation" 2>&1 | tail -2 +run spdm-skip-ra 180 ./migtdemu.sh --skip-ra --features spdm_attestation --both --no-sudo --log-level info --debug + +echo +if [ $RC -eq 0 ]; then echo "fast-emu-check: PASS"; else echo "fast-emu-check: FAIL"; fi +exit $RC diff --git a/.agents/skills/migtd-port/scripts/find-port-candidates.sh b/.agents/skills/migtd-port/scripts/find-port-candidates.sh new file mode 100755 index 000000000..3a7ca391c --- /dev/null +++ b/.agents/skills/migtd-port/scripts/find-port-candidates.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash +# +# find-port-candidates.sh — list commits that live on the Microsoft `integration` +# branch but are NOT yet on an intel/main-based target branch, and flag the ones +# that look already-upstreamed so you can skip them. +# +# Why this exists: the majority of `integration` work has already been upstreamed +# to intel/main (in reworded / squashed form), so a naive `git cherry-pick +# base..integration` re-applies dozens of commits that are already present. Patch-id +# (`git cherry`) under-detects because upstreaming refines the patch; commit-message +# similarity is the reliable "already there" signal. This script combines both: +# - git cherry patch-id membership (- = identical patch already on target) +# - subject-similarity vs every target subject (high % = reworded duplicate) +# +# Output is a human-reviewable table. YOU still decide keep/skip per row — treat +# CANDIDATE as "look closer", not "blindly pick". +# +# Usage: +# ./find-port-candidates.sh [--source REF] [--target REF] [--base REF] +# [--threshold N] [--full] [--sql] +# +# --source REF branch carrying the changes (default: origin/integration) +# --target REF intel/main-based branch to port onto (default: current branch) +# --base REF only consider commits after this (default: merge-base src/tgt) +# --threshold N similarity %% at/above which a row is tagged LIKELY-UPSTREAMED +# (default: 55) +# --full do not truncate subjects +# --sql also emit `INSERT INTO picks ...` lines for the session DB +# +# Exit: 0 always (this is a reporting tool). +set -u +set -o pipefail + +SOURCE="origin/integration" +TARGET="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)" +BASE="" +THRESHOLD=55 +FULL=0 +EMIT_SQL=0 + +while [ $# -gt 0 ]; do + case "$1" in + --source) SOURCE="$2"; shift 2 ;; + --target) TARGET="$2"; shift 2 ;; + --base) BASE="$2"; shift 2 ;; + --threshold) THRESHOLD="$2"; shift 2 ;; + --full) FULL=1; shift ;; + --sql) EMIT_SQL=1; shift ;; + -h|--help) sed -n '2,40p' "$0"; exit 0 ;; + *) echo "unknown arg: $1" >&2; exit 2 ;; + esac +done + +git rev-parse --verify "$SOURCE^{commit}" >/dev/null 2>&1 || { echo "bad --source: $SOURCE" >&2; exit 2; } +git rev-parse --verify "$TARGET^{commit}" >/dev/null 2>&1 || { echo "bad --target: $TARGET" >&2; exit 2; } +[ -z "$BASE" ] && BASE="$(git merge-base "$SOURCE" "$TARGET")" +git rev-parse --verify "$BASE^{commit}" >/dev/null 2>&1 || { echo "bad --base: $BASE" >&2; exit 2; } + +echo "source : $SOURCE ($(git rev-parse --short "$SOURCE"))" +echo "target : $TARGET ($(git rev-parse --short "$TARGET"))" +echo "base : $BASE ($(git rev-parse --short "$BASE"))" +echo "thresh : ${THRESHOLD}% subject similarity" +echo + +# Candidate commits = base..source, with patch-id membership vs target. +# git cherry => examines .., +# prefixing '-' if an equivalent patch is already in , else '+'. +SRC_TSV="$(mktemp)"; TGT_TSV="$(mktemp)" +trap 'rm -f "$SRC_TSV" "$TGT_TSV"' EXIT + +git cherry "$TARGET" "$SOURCE" "$BASE" | while read -r flag sha; do + printf '%s\t%s\t%s\n' "$flag" "$sha" "$(git show -s --format=%s "$sha")" +done > "$SRC_TSV" + +# Target subjects (the already-upstreamed corpus to match against). +git log --format='%H%x09%s' "$BASE..$TARGET" > "$TGT_TSV" + +THRESHOLD="$THRESHOLD" FULL="$FULL" EMIT_SQL="$EMIT_SQL" \ +python3 - "$SRC_TSV" "$TGT_TSV" <<'PY' +import os, re, sys + +thr = int(os.environ["THRESHOLD"]) +full = os.environ["FULL"] == "1" +emsql = os.environ["EMIT_SQL"] == "1" +src_f, tgt_f = sys.argv[1], sys.argv[2] + +PREFIX = re.compile(r'^[a-z]+(\([^)]*\))?!?:\s*') # strip conventional-commit type(scope): +STOP = set("""a an the to of for in on with and or not is are be add adds added +adding update updates updated use uses using fix fixes fixed feat feature refactor +chore docs test tests style ci build perf migtd support instead into via from this +that when then return returns make makes only also new""".split()) + +def toks(subj): + s = PREFIX.sub('', subj.strip().lower()) + s = re.sub(r'[^a-z0-9]+', ' ', s) + return {w for w in s.split() if w and w not in STOP and len(w) > 2} + +def load(path): + rows = [] + with open(path) as fh: + for line in fh: + line = line.rstrip('\n') + if not line: + continue + parts = line.split('\t') + rows.append(parts) + return rows + +tgt = [(h, s, toks(s)) for h, s in load(tgt_f)] + +def jaccard(a, b): + if not a or not b: + return 0.0 + return len(a & b) / len(a | b) + +def trunc(s, n): + return s if full or len(s) <= n else s[:n-1] + "\u2026" + +rows = load(src_f) +print(f"{'#':>3} {'SHA':<9} {'PID':<3} {'SIM':>4} {'SUGGEST':<17} SUBJECT") +print("-" * 100) +seq = 0 +sql_lines = [] +for r in rows: + flag, sha = r[0], r[1] + subj = r[2] if len(r) > 2 else "" + seq += 1 + short = sha[:9] + st = toks(subj) + best, bestsubj = 0.0, "" + for _, ts, tt in tgt: + j = jaccard(st, tt) + if j > best: + best, bestsubj = j, ts + simpct = round(best * 100) + if flag == '-': + suggest = "SKIP-patchid" # identical patch already on target + elif simpct >= thr: + suggest = "SKIP-similar" # reworded/squashed duplicate, verify then skip + else: + suggest = "CANDIDATE" # likely genuinely missing — review + print(f"{seq:>3} {short:<9} {flag:<3} {simpct:>3}% {suggest:<17} {trunc(subj,52)}") + if simpct >= thr and bestsubj: + print(f"{'':>3} {'':<9} {'':<3} {'':>4} {'':<17} ~ {trunc(bestsubj,70)}") + if emsql: + esc = lambda x: x.replace("'", "''") + status = {'SKIP-patchid':'skip-similar','SKIP-similar':'skip-similar','CANDIDATE':'pick'}[suggest] + sql_lines.append( + f"INSERT INTO picks(seq,hash,subject,status,note) VALUES" + f"({seq},'{sha}','{esc(subj)}','{status}','{esc(bestsubj)}');") + +cand = sum(1 for r in rows + if not (r[0] == '-' )) +print("-" * 100) +print(f"total={len(rows)} (PID '-' = identical patch already on target; " + f"SIM >= {thr}% = likely reworded duplicate)") +if emsql and sql_lines: + print("\n-- session-DB seed (review before trusting 'status'):") + print("\n".join(sql_lines)) +PY diff --git a/.agents/skills/migtd-port/scripts/port-verify.sh b/.agents/skills/migtd-port/scripts/port-verify.sh new file mode 100755 index 000000000..9863890b8 --- /dev/null +++ b/.agents/skills/migtd-port/scripts/port-verify.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# +# port-verify.sh — the "after every pick" gate the porting workflow requires. +# Runs, in fastest-feedback-first order, stopping at the first failure: +# 1. cargo fmt (apply — picks frequently need reformatting) +# 2. cargo fmt --check (confirm clean) +# 3. cargo xtask lib-test --crates migtd (migtd unit tests + feature matrix) +# 4. fast-emu-check.sh (skip-ra + spdm skip-ra emulation smoke) +# +# Run this immediately after each `git cherry-pick` (and after resolving any +# conflict) before moving to the next commit. Run emu-milestone.sh at batch +# checkpoints and the full gauntlet before pushing. +# +# Usage: +# ./port-verify.sh # full gate +# ./port-verify.sh --no-emu # skip step 4 (use for doc-only / non-boundary picks) +# ./port-verify.sh --no-fmt-apply # only check fmt, do not auto-apply +set -u + +REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" +cd "$REPO_ROOT" +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +DO_EMU=1 +FMT_APPLY=1 +while [ $# -gt 0 ]; do + case "$1" in + --no-emu) DO_EMU=0; shift ;; + --no-fmt-apply) FMT_APPLY=0; shift ;; + -h|--help) sed -n '2,20p' "$0"; exit 0 ;; + *) echo "unknown arg: $1" >&2; exit 2 ;; + esac +done + +bail() { echo ""; echo "port-verify: FAILED at $1"; exit 1; } + +echo "=== [1/4] cargo fmt ===" +if [ $FMT_APPLY -eq 1 ]; then + cargo fmt || bail "cargo fmt (apply)" +fi +echo "=== [2/4] cargo fmt --check ===" +cargo fmt --check || bail "cargo fmt --check (commit the reformatting)" + +echo "=== [3/4] cargo xtask lib-test --crates migtd ===" +cargo xtask lib-test --crates migtd || bail "lib-test" + +if [ $DO_EMU -eq 1 ]; then + echo "=== [4/4] fast-emu-check ===" + "$HERE/fast-emu-check.sh" || bail "fast-emu-check" +else + echo "=== [4/4] emu skipped (--no-emu) ===" +fi + +echo "" +echo "port-verify: PASS" diff --git a/.agents/skills/migtd-review/SKILL.md b/.agents/skills/migtd-review/SKILL.md new file mode 100644 index 000000000..5e4538523 --- /dev/null +++ b/.agents/skills/migtd-review/SKILL.md @@ -0,0 +1,349 @@ +--- +name: migtd-review +description: Security and correctness review of the Intel MigTD codebase (TDX migration TD firmware, Rust no_std). Use when reviewing MigTD source code, triaging clawpatch findings, filing GitHub issues for review findings, or running local EMU integration tests. Triggers on phrases like "review MigTD", "audit MigTD", "triage MigTD finding", "MigTD code review", "review code in intel/MigTD". +--- + +# MigTD Code Review + +Domain-specific guidance for reviewing the Intel MigTD codebase. Codifies the trust model, build-feature scope, common false-positive patterns, lessons learned from previous reviews, and the verification workflow. + +--- + +## 1. High-Level View (read this FIRST) + +Most failed/regressed "fixes" in this codebase trace back to skipping this section. Internalize these properties before flagging anything. + +### Execution model + +- **Single-core, single-threaded `no_std` Rust firmware**. No `Sync`/`Send` races within one TD. There is no preemption between non-interrupt code paths. + - Do **not** flag missing locks, atomics, or `Send` bounds unless an interrupt handler mutates shared state. +- **Heap is ~7 MiB**, bump-allocator behaviour for some paths. Out-of-memory is recoverable but rare. +- **Async runtime is cooperative** (`async_runtime` crate, single-threaded executor). Futures run to suspension; "races" between awaits are not races in the classical sense. + +### Trust model + +- **VMM is untrusted but has inherent DoS capability** — it can starve the TD, stall vmcalls, drop packets, withhold cycles, or kill the TD. **DoS-via-VMM is NOT a finding.** Do not file issues that boil down to "the VMM could refuse to make progress". +- **Root of trust = hardware attestation registers**: `MRTD` and `RTMR0..RTMR3`. The QE/PCK chain is a transport, not the root. + - Policy-v2 signer identity is attested through the **RTMR1 signer anchor** + (root-certificate fingerprint + enrolled signer-purpose EKU), not raw + issuer-chain bytes or leaf Subject Name. +- **Trusted-after-init**: `mig_policy::init_policy()` verifies the RTMR2-bound + policyData plus its inner JSON/CoRIM endorsements and freezes + `VERIFIED_POLICY`. The legacy outer policy signature is ignored. +- **Two distinct attestation paths**: + - *Regular migration* → uses **quotes**. REPORTDATA at byte offset **520**. Helper: `verify_report_data_binding`. + - *Rebind* → uses **TDREPORT** (no quote). REPORTDATA at byte offset **128**. Helper: `verify_tdreport_data_binding`. + - **Mixing the two = bug.** Always trace which helper is called from each rebind/migration code path. See commit `94975ec` for the TH1 binding fix. + +### Boundary surfaces (where bugs actually live) + +- The **vmcall transports** (`vmcall-raw`, `virtio-vsock`, etc.): every byte coming from VMM must be size-checked. Wrap-around arithmetic on `u32` offsets is a real risk; integer overflow on `u64` is generally not exploitable on 64-bit. +- **TLS-over-vmcall** in `crypto/`: certificate parsing, ASN.1, PEM. Look for slice indexing, `find()` ordering, and PEM block delimiters. +- **Policy parsing/verification** in `policy/src/v2/`: JSON/CoRIM decoding, + RTMR1 anchor binding, PEM/x5chain handling, and one-hash lookups. +- **Event log / RTMR replay** in `migtd/src/event_log.rs` and upstream `cc-measurement`: bounds checks, off-by-ones, RTMR replay correctness. +- **FFI / over-the-wire structs**: anything sent between source and destination MigTDs or exchanged with td-shim must be `#[repr(C)]` (or explicitly serialised). + +### What looks like a bug but isn't + +- "VMM can supply OOB buffer offsets" → each migration ctx has its own shared buffer with `data_status` as ground truth. +- "`vmcall-raw` read returns 0 → infinite loop" → the transport blocks until data or error; it **never returns Ok(0)/EOF**. +- "Interrupt broadcast wakes all migrations" → per-buffer `data_status` check filters spurious wakes (correct by design). +- "TSC division by zero in calibration" → pre-conditioned by CPUID/feature detection on real hardware. +- "Unbounded heap allocation in peer-info parse" → bounded by mig session size limits and the 7 MiB heap. DoS only. +- "`ecdsa_sign` PKCS8 panic" → dead code; no callers in the production binary. +- "Missing `#[repr(C)]` on `ExchangeInformation`" → dead code behind `#[cfg(not(feature = "spdm_attestation"))]` in the in-scope build. +- "Misspelled identifier" → fix only if user-visible; do not churn internal names. + +### Patterns that look like style fixes but are actually load-bearing + +This is the most important class to internalise. **Do not "clean up" code that looks redundant without first proving it is redundant.** + +- **`event_log::get_event_log()` returns `&raw[..size + 1]`**, not `&raw[..size]`. The `+1` looks like an off-by-one but is a deliberate workaround for a bug in upstream `cc_measurement::log::CcEvents::next()` (uses `<` instead of `<=`), which silently drops the last event when the slice ends exactly at the last event boundary. The runtime CCEL area is zero-padded so the extra byte is safe. **Removing the `+1` breaks AzCVMEmu integration tests** (lost policy tag → `Failed to initialize migration policy`). Upstream issue: . Regression test: `event_log::tests::last_event_visible_only_with_trailing_padding`. +- **Comments documenting workarounds are mandatory**. If you find code that does something odd without a comment, add the comment before considering changing the code. +- **CI history is the source of truth for "what broke when"**. If a regression appears, find the breaking commit via `git bisect` or by reading CI run history; do not guess from local symptoms (which may be masked by other environment issues — see §6). + +### Why these matter + +A previous review pass produced a "fix" (`bc99fa4`) that removed the `+1`, passed cargo fmt/clippy and the host-runnable unit tests, but silently broke the EMU integration tests. The breakage was not caught until CI history was inspected. The lesson: **passing `cargo test` is not sufficient evidence of correctness for changes that touch boundary code; always run the EMU integration tests after every behavioural change.** + +--- + +## 2. Codebase essentials + +- **MANDATORY first step after fresh checkout / submodule update**: run `bash sh_script/preparation.sh`. This: + 1. Invokes `deps/td-shim/sh_script/preparation.sh` (td-shim's own prep). + 2. Applies the spdm-rs ring patches (`0003-introduce-EphemeralPrivateKey-serialization.patch` and `0004-Introduce-digest-de-serialization.patch` from `deps/spdm-rs/external/patches/ring/`) to `deps/td-shim/library/ring`. MigTD's workspace-level `[patch.crates-io]` selects this ring copy, not spdm-rs's copy. The patches add `EphemeralPrivateKey::export_private_key_bytes`/`from_private_key_bytes` and `digest::Context::to_bytes`/`from_bytes`, which spdmlib needs to preserve intermediate SPDM context. + 3. Runs `deps/spdm-rs/sh_script/pre-build.sh`. + CI does this automatically via `.github/actions/setup-build-environment` (default `run-preparation: true`). Locally you MUST run it manually after any `git clean -fdx`, `git submodule update`, or fresh clone. Failing to run it produces build errors that look like a real baseline regression but are not. See [`doc/dependency_preparation.md`](../../../doc/dependency_preparation.md) for the dependency-resolution rationale. +- **Build profiles vary**. Always confirm scope before flagging code as buggy. Default in-scope set used during the audit: + - `vmcall-raw, stack-guard, main, vmcall-interrupt, oneshot-apic, spdm_attestation, igvm-attest, policy_v2` + - `policy_v2` pulls in `policy/policy_v2` + `attestation/attest-lib-ext`. + - **Out of scope in that profile**: `virtio-serial`, `virtio-vsock`, `vmcall-vsock`, `fuzz`, `AzCVMEmu` runtime (the host-side emu harness is separate from the in-firmware build). +- **Always in tree** (regardless of features): `virtio`, `pci`, `crypto` (rustls enabled by default). +- **Build (production image)**: + ```bash + cargo image --features main,vmcall-raw,stack-guard,vmcall-interrupt,oneshot-apic,spdm_attestation,igvm-attest,policy_v2 + ``` + - The xtask sets release/debug profile internally — do **not** pass `--release`. +- **Build (AzCVMEmu host harness)**: see §6. +- Bigger build cmd (matrix): `.github/workflows/main.yml`. +- Architectural facts: + - `ring::pkcs8::Document` in **this fork** is stack-inlined `[u8; 185]` + `len`, NOT heap-allocated → `sensitive_data_cleanup` works as intended. + - `verify_quote_integrity_ex` is a C-library built from source as a submodule. + - Policy v2 supports a JSON servTD-collateral path (PEM chain derives the + RTMR1 anchor) and a CoRIM-only path (direct 48-byte anchor + signed + TCB-mapping CoRIM). The outer JSON policy signature is legacy/ignored; + mapping/identity or CoRIM signatures must bind to the same root+EKU anchor. + +--- + +## 3. Common false-positive patterns + +| Pattern | Why it's usually NOT a bug | +|---|---| +| "VMM can supply OOB buffer offsets" | Each migration ctx has its own shared buffer; `data_status` is ground truth. Wrap arithmetic on `u32` offsets is checked. | +| "Shared log circular buffer overflow" | Wrapping logic keeps offsets in bounds; VMM is reader, not writer. | +| "vmcall-raw read returns 0 → infinite loop" | The `vmcall-raw` transport blocks until data or error; **never returns 0/EOF**. | +| "Interrupt broadcast wakes all migrations" | Spurious wakes are caught by per-buffer status check (correct by design). | +| "Cert chain weakness in attestation/SPDM verifier" | The root+signer-EKU anchor is measured into RTMR1; chain compromise alone is insufficient unless it can produce a chain under that anchor and evade revocation. | +| "TSC div-by-zero in calibration" | Pre-conditioned by CPUID/feature detection on real HW. | +| "Unbounded heap alloc in peer-info parse" | Bounded by mig session size limits + 7 MiB heap → just DoS. | +| "Misspelled identifier" | Fix only if user-visible; don't churn the codebase for internal names. | +| `ecdsa_sign` PKCS8 panic | Dead code — no callers in the production binary. | +| `ExchangeInformation` missing `#[repr(C)]` | Dead code behind `#[cfg(not(feature = "spdm_attestation"))]` in this build. | + +--- + +## 4. Known real bug patterns + +Fixes already merged that double as templates for what *real* bugs look like: + +1. **Match-arm fallthrough** in `match … { _ => { … } }` blocks where caller expects early return → check every arm for explicit `return` (see `poll_vmcall_completion`, commit `ed80789`). +2. **Missing `#[repr(C)]`** on FFI / serialized-over-the-wire structs → see `HelloPacketPayload` (commit `a277723`). +3. **Wrong field used for crypto-algorithm lookup**: `cert.signature_algorithm` (the signer's algorithm) vs `cert.tbs_certificate.subject_public_key_info.algorithm` (the subject's algorithm used to verify the cert *under* the subject's pub key) → commit `70872c0`. +4. **PEM search order**: `find(END)` before `find(BEGIN)` allows END before BEGIN → search for END *after* BEGIN's end-index (commit `dfb449c`). +5. **Missing TH1 binding on SPDM rebind path**: rebind uses `TDREPORT` (REPORTDATA at offset **128**), regular migration uses quotes (REPORTDATA at offset **520**). They need distinct verification helpers (`verify_tdreport_data_binding` vs `verify_report_data_binding`). See commit `94975ec`. + +--- + +## 5. The verification cycle (DO THIS AFTER EVERY FIX) + +A fix is not done until **all of these pass — every test in every CI workflow, no exceptions**. The user explicitly requires this. The order matters — fastest feedback first. + +### Local quick gate (must all be green before pushing) + +```bash +# 0. Preparation (skip only if you've already run it since last submodule update) +bash sh_script/preparation.sh + +# 1. Format check (instant) +cargo fmt --check + +# 2. Clippy on the in-scope feature set +cargo clippy --workspace --all-targets \ + --features main,vmcall-raw,stack-guard,vmcall-interrupt,oneshot-apic,spdm_attestation,igvm-attest,policy_v2 \ + -- -D warnings + +# 3. Host-runnable unit tests for the crates you touched (seconds) +cargo test -p migtd --lib +# e.g.: cargo test -p migtd --lib event_log +# e.g.: cargo test -p crypto + +# 4. EMU integration tests (minutes) — REQUIRED for any change to: +# - event_log / RTMR replay code +# - policy parsing or verification +# - migration session / handshake / rebind paths +# - SPDM transport +# - crypto / cert / PEM parsing +# - any vmcall transport +./sh_script/build_AzCVMEmu_policy_and_test.sh --skip-test # build first +./sh_script/build_AzCVMEmu_policy_and_test.sh # then full test run +# OR run individual scenarios via ./migtdemu.sh (see §6). +``` + +### Full CI parity (all five workflows MUST pass — no exceptions) + +The user has stated **every test in every workflow must pass**. The reusable gauntlet script automates this — use it as the standard pre-push verification: + +```bash +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh +``` + +It runs the five CI workflows in the order `prep → format → deny → library → main → emu` and **stops at the first failure** with the failing command, the path of the captured log, and a resume hint (`--from `). Logs land under `target/ci-gauntlet/`. Total wall-clock is ~30 min cold, much less on warm caches. + +```bash +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --list # list stages +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --from main # resume from main +.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh --only emu # single stage +``` + +When the gauntlet fails, **fix the root cause first, then re-run from the failing stage** — do not skip ahead. The script intentionally bails so a review agent (or you) has time to read the log, propose a minimal fix, and re-verify before continuing. + +What each stage covers (the commands the script runs are the source of truth): + +| Workflow | Stage | What it runs | +|---|---|---| +| `.github/workflows/format.yml` | `format` | `cargo fmt -- --check`, `cargo check`, `cargo clippy --features stack-guard,virtio-vsock,virtio-serial,vmcall-interrupt` (no `-D warnings`) | +| `.github/workflows/deny.yml` | `deny` | `cargo deny check advisories`, `cargo deny check sources` (continue-on-error), `cargo deny check bans` | +| `.github/workflows/library.yml` | `library` | `cargo xtask lib-build`, `cargo xtask lib-test` | +| `.github/workflows/main.yml` | `main` | 32 `cargo image` builds = 4 devices × 2 policy_versions × 2 protocols × 2 build_types | +| `.github/workflows/integration-emu.yml` | `emu` | CoRIM policy-contract checks plus 18 EMU scenarios mirroring the workflow matrix exactly, including CoRIM-only migration/rebind/asymmetric lookup and the fail-closed revoked-signer policy test | + +**Note**: the format.yml clippy step uses a *different* feature set than the in-scope set above (`stack-guard,virtio-vsock,virtio-serial,vmcall-interrupt`). Both must compile cleanly; the former is what runs in CI and gates merges. + +**Why step 4 is mandatory**: passing `cargo test` is not sufficient evidence of correctness for boundary code. Unit tests in `migtd` exercise small, controlled inputs; many real bugs only surface when the full source ↔ destination migration handshake replays the event log, parses a real signed policy, or extends RTMRs. The bc99fa4/event_log regression is the canonical example — host unit tests passed; EMU integration tests failed loudly. + +If `cargo image` succeeds (full TDX firmware build) that's a strong signal the change at least compiles for the no_std target, but it does not exercise runtime behaviour. The EMU harness does. + +### EMU test failure debugging order + +If an EMU test fails after a fix: + +1. **First**: check the CI run history on GitHub to see whether the same test passes for an unrelated commit on `main`. If `main` is also failing the test in CI, the failure is pre-existing (environment, OpenSSL, runner image) — see §6. +2. **Then**: `git bisect` (or scan recent commits) to find the breaking commit. The narrative "my fix broke it" is often correct; the narrative "the failure is unrelated" is often wrong. +3. Only after you have a specific breaking commit, reason about *why* — typically by reading the diff in light of §1. + +--- + +## 6. Running EMU integration tests locally + +Prerequisites: Rust 1.88.0, nasm, clang, libtss2-dev, pkg-config, jq, and `bash sh_script/preparation.sh` has been run (see §2). On a fresh host, install the full toolchain in one shot with `./sh_script/setup_build_env.sh` (single `sudo apt-get install` + rustup/toolchain/`x86_64-unknown-none`; `--print-apt` shows just the apt one-liner). + +Working tests on Ubuntu 24.04 (skip-RA paths): + +```bash +./migtdemu.sh --skip-ra --both --no-sudo --log-level info +./migtdemu.sh --operation rebind-prepare \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --skip-ra --both --no-sudo --log-level info +./migtdemu.sh --skip-ra --features spdm_attestation --both --no-sudo --log-level info +``` + +Full test matrix script (mirrors `.github/workflows/integration-emu.yml`): + +```bash +./sh_script/build_AzCVMEmu_policy_and_test.sh --mock-report +``` + +### Policy file gotcha — `EXPLICIT_POLICY_FILE` + +- `config/AzCVMEmu/policy_v2_signed.json`, `config/AzCVMEmu/policy_v2_raw.json`, and `config/AzCVMEmu/policy_issuer_chain.pem` are **tracked in git**. CI starts every job from a clean `actions/checkout`, so these are always present. +- `migtdemu.sh` only auto-generates policy files when `EXPLICIT_POLICY_FILE != true` *and* `SKIP_POLICY_GENERATION != true` (see `migtdemu.sh:452`). Passing `--policy-file` sets `EXPLICIT_POLICY_FILE=true`, which **disables** auto-generation. So if you `git clean -fdx` (or otherwise delete the tracked policy files), then run with `--policy-file`, you'll get `Error: Source Policy file not found: …`. Restore them with `git checkout config/AzCVMEmu/` and re-run. +- The key-rotation policy files (`policy_v2_signed_a/b/pm_b/pmi_b.json` + matching chains) are **not** tracked. The rotation scenarios in `integration-emu.yml` generate them on demand. + +### Local CI matrix invocations (mirrors `integration-emu.yml`) + +Single-instance scenarios (no `--mock-report` or `--policy-v2`): + +```bash +./migtdemu.sh --skip-ra --both --no-sudo +./migtdemu.sh --features spdm_attestation --skip-ra --both --no-sudo +``` + +`policy_v2` + mock-report scenarios (require the tracked policy files): + +```bash +./migtdemu.sh --policy-v2 --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --mock-report --both --no-sudo +``` + +Rebind scenarios use `--operation rebind-prepare`. SPDM scenarios add `--features spdm_attestation`. Key-rotation scenarios additionally pass `--policy-file`/`--policy-issuer-chain-file` pointing at the rotated artifacts (e.g., `policy_v2_signed_a.json`). + +### No safe parallelism for `migtdemu.sh` + +Do **not** run multiple `migtdemu.sh` invocations concurrently. The script: +- Hardcodes TCP port `8001` (no override flag). +- Uses `taskset -c 0` (all invocations contend on the same core). +- Writes log files at fixed names (`dest_*_out.log`, `migtd__.log`). +- Builds into `target/release/migtd`, rebuilt per-scenario with different feature sets — concurrent runs will clobber each other's binary. + +If you must speed up local CI parity, run scenarios sequentially in a single shell. CI parallelism is achieved per-job in GitHub Actions, where each runner has its own isolated filesystem. + +### When CI passes but local fails (or vice versa) + +CI failures can mask local regressions and vice versa. If `cargo image` or an EMU test fails locally but the same commit passes in CI on `main`, suspect: missing `preparation.sh`, missing system package, stale submodule, OpenSSL version skew, or deleted tracked policy files. Conversely, if a local change passes but CI fails, do **not** assume the CI is flaky — re-read the §1 trust-model rules first. + +--- + +## 7. Workflow A — Triaging clawpatch findings + +```bash +ls .clawpatch/findings/*.json | xargs -I{} jq -r '.findingId + " " + .status + " - " + .title' {} +# Open ones first: +ls .clawpatch/findings/*.json | xargs -I{} jq -r 'select(.status=="open") | .findingId + " - " + .title' {} +``` + +For each open finding: + +1. Open the JSON; read `evidence`, `reasoning`, `reproduction` against the source. +2. Confirm the file/line is **actually compiled** in the in-scope build (check `Cargo.toml` features). Many findings are in vsock/virtio-serial dead code for vmcall-raw. +3. Decide and triage: + ```bash + clawpatch triage --finding --status --note "" + ``` +4. For *fixed* findings: make a minimal, surgical commit; reference the finding ID in the commit body. **Then run the §5 verification cycle, including EMU integration tests for any boundary-code change.** + +Required JSON fields when manually creating a finding (clawpatch finding schema): +`schemaVersion, findingId, featureId, title, category, severity, confidence, triage, evidence, reasoning, reproduction (string not null), recommendation, whyTestsDoNotAlreadyCoverThis (string not null), suggestedRegressionTest (string not null), minimumFixScope, status, history, signature (string), linkedPatchAttemptIds (array), createdByRunId (string), createdAt, updatedAt`. + +--- + +## 8. Workflow B — Manual deep review + +Use parallel `explore` agents (Haiku) for breadth, then `view`/`grep` for verification. Suggested chunking: + +- Agent 1: `src/devices/**`, `src/std-support/**` +- Agent 2: `src/spdm/**`, SPDM transport, attestation glue +- Agent 3: `src/migtd/src/main/*`, migration session, policy +- Agent 4: `src/crypto/**`, `src/attestation/**`, `src/policy/**` + +Prompt each agent to read **only files compiled in the target build**, return findings as a structured list (file:line, severity, description, suggested fix). Then *you* verify each finding against the source before filing — agents will hallucinate; the trust model in §1 catches most hallucinations. + +--- + +## 9. Workflow C — Filing GitHub issues for the audit + +See `scripts/create_review_issues.sh` template. Important details: + +- Use `[Copilot Review]` prefix in the title (not `[Security]`) — not every finding is a security concern. +- Microsoft org requires SSO; **EMU (Enterprise Managed User) accounts cannot create issues** — use a personal GitHub account with `gh auth login --hostname github.com --web` (device-flow login). Verify the active account with `gh auth status` before running create scripts. +- `gh issue close` uses `--reason "not planned"` (with a literal space), NOT `not_planned`. +- For each issue body file: include Title, Severity, File:line, Description, Triage Status (Fixed / False-positive / Wont-fix), and Triage Notes from the clawpatch finding. +- Before running the create script, scan all body files for duplicated triage-note sentences and empty triage-notes sections; cross-check empty ones against the original clawpatch JSON (the `triage.notes` array — multiple entries should be concatenated, deduplicated, and de-fluffed). + +--- + +## 10. Workflow D — Filing upstream issues for cross-repo bugs + +Some bugs surface in MigTD but live in submodules (`deps/td-shim`, `deps/spdm-rs`, etc.). When you confirm one: + +1. Identify the upstream repo via `.gitmodules`. +2. Search existing issues + PRs (open and closed) for the symptom and the symbol names. Try at least 3–4 wordings. +3. Verify the bug still exists on upstream `origin/main` (the submodule SHA may be stale). +4. File an issue containing: a self-contained reproducer, the affected file:line, downstream impact, and a proposed fix. Offer to send a PR. +5. In the MigTD-side workaround, **add a code comment referencing the upstream issue URL** so the workaround is not removed later. +6. Add a **regression test** in MigTD that mirrors the upstream reproducer; phrase the assertion so it fails loudly when upstream fixes the bug, signaling that the workaround and test can be removed. Example: `event_log::tests::last_event_visible_only_with_trailing_padding`. + +--- + +## 11. Things to avoid + +- **Don't fix unrelated pre-existing issues** uncovered during review unless they are *directly coupled* to the change. If a pre-existing fmt/style issue blocks `cargo fmt --check` for your commit, fix it as a **separate** standalone commit with a clear "pre-existing; not caused by this series" note in the body — do not bundle it into a behavioural commit. +- **Don't churn formatting/lint across the codebase**. `cargo fmt` only touches files you've already modified; do not run it repo-wide. +- **Don't add `.clawpatch/` or `.copilot-review-issues/` to source control** — they are gitignored. +- **Don't "fix" code that looks redundant without proving it is redundant.** See §1's discussion of `event_log::get_event_log()`. The standard test is: revert your fix, run the EMU integration tests; if they break, the code was load-bearing. +- **Don't trust local symptoms when CI tells a different story.** A `SignatureVerificationFailed` locally on Ubuntu 24.04 can mask an entirely unrelated regression (or vice versa). +- **Don't pile new commits on top of an incorrect commit.** If a commit is wrong, use `git rebase -i` to drop or fold it (`fixup`/`squash`) before pushing. Force-push with `--force-with-lease=:` to a personal fork only; never to a shared branch. + +--- + +## 12. References + +- `references/build-features.md` — full feature gating + which crates compile when. +- `references/triage-justifications.md` — boilerplate justifications for the most common false-positives. +- `references/security-test-areas.md` — static analysis, fuzz targets by area, and the secure-review checklist for external-input boundaries. +- `scripts/list_open_findings.sh` — list open clawpatch findings. +- `scripts/create_review_issues.sh` — template to create GH issues from body files. diff --git a/.agents/skills/migtd-review/references/build-features.md b/.agents/skills/migtd-review/references/build-features.md new file mode 100644 index 000000000..dc7346c9c --- /dev/null +++ b/.agents/skills/migtd-review/references/build-features.md @@ -0,0 +1,58 @@ +--- +type: Reference +title: MigTD Build Features +description: Feature-gating map of which crates and code paths compile under which Cargo feature combinations. +tags: [build, cargo-features, feature-gating] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Build features — what compiles when + +Source: `src/migtd/Cargo.toml`, `src/devices/Cargo.toml`, `Cargo.toml` workspace. + +## Default in-scope feature set used in the audit + +``` +main, vmcall-raw, stack-guard, vmcall-interrupt, oneshot-apic, +spdm_attestation, igvm-attest, policy_v2 +``` + +## Feature → enabled crates / modules + +| Feature | Pulls in / enables | +|---|---| +| `main` | `bin/migtd` binary | +| `vmcall-raw` | `src/devices/vmcall_raw/` transport | +| `vmcall-interrupt` | Interrupt-driven completion in `vmcall_raw/transport/vmcall.rs` | +| `oneshot-apic` | One-shot APIC mode in `td_payload`/`devices/apic` | +| `spdm_attestation` | `src/migtd/src/spdm/` paths (requester + responder) | +| `igvm-attest` | `attestation/igvm-attest` integration in `attestation/` | +| `policy_v2` | `src/policy/src/v2/`, `attestation/attest-lib-ext` | +| `stack-guard` | Stack canary in `migtd` startup | + +## Not in scope under that set + +| Feature | Module | +|---|---| +| `virtio-vsock`, `vmcall-vsock` | `src/devices/vsock/` (entire crate path) | +| `virtio-serial` | `src/devices/virtio_serial/` | +| `AzCVMEmu` | `deps/td-shim-AzCVMEmu/`, `cvmemu` module | +| `fuzz` | `src/devices/*/fuzz/`, top-level `fuzz/` | +| `test_disable_ra_and_accept_all` | RA-bypass paths (skip-ra EMU tests only) | + +## Always compiled + +- `src/devices/virtio/` (not optional) +- `src/devices/pci/` (not optional, but in vmcall-raw builds it's effectively dead — still compiled) +- `src/crypto/` (rustls is default) +- `src/attestation/` (attest-lib backbone) + +## How to decide if code is dead in your build + +```bash +# Find feature gates on the offending function/module: +grep -rn '#\[cfg(' path/to/file.rs | head -20 +# Then check Cargo.toml deps in the consuming crate. +``` + +If the function has `#[cfg(feature = "virtio-vsock")]` and your build doesn't enable that, the finding is wont-fix. diff --git a/.agents/skills/migtd-review/references/security-test-areas.md b/.agents/skills/migtd-review/references/security-test-areas.md new file mode 100644 index 000000000..129965fc9 --- /dev/null +++ b/.agents/skills/migtd-review/references/security-test-areas.md @@ -0,0 +1,52 @@ +--- +type: Reference +title: Security Test Areas — Static Analysis, Fuzzing, Secure Review +description: The MigTD security test surface — static analyzers, vulnerable-crate scanning, fuzz targets by area, and the secure-code-review checklist for external-input boundaries. +tags: [security, fuzzing, clippy, cargo-deny, review] +timestamp: 2026-07-13T22:37:00+00:00 +--- + +# Security Test Areas + +Canonical source: [doc/security_test.md](../../../../doc/security_test.md). Use this as +a checklist when reviewing changes that touch external-input boundaries (see +also the [migtd-review SKILL.md](../SKILL.md) trust model and +[triage-justifications.md](triage-justifications.md)). + +## Static analysis + +`cargo-clippy`, Prusti, MIRAI (see `td-shim`'s +[`static_analyzer.md`](https://github.com/confidential-containers/td-shim/blob/main/doc/static_analyzer.md)). + +## Vulnerable crate scan + +`cargo-deny` (see `td-shim`'s +[`cargo-deny.md`](https://github.com/confidential-containers/td-shim/blob/main/doc/cargo-deny.md)) +— this is the `deny` stage of `run-ci-gauntlet.sh`. + +## Fuzz targets by area + +| Area | Fuzzer | Location | +|---|---|---| +| Virtio devices (VirtioPci, VirtioVsock) | AFL | `src/devices/virtio/fuzz/` | +| Migration policy | AFL & LibFuzzer | `src/policy/fuzz/` | +| X.509 certificate parsing | AFL & LibFuzzer | `src/crypto/fuzz/` | +| GHCI `VmcallServiceResponse` | AFL & LibFuzzer | `src/migtd/fuzz/` | + +## Secure-code-review checklist (external-input boundaries) + +These four areas take **untrusted external input** and must copy-to-private + +sanity-check before use — flag any code that reads from these sources +directly without validation as a candidate finding: + +- **Virtio devices** — external input; copy to private memory before use. +- **GHCI `VmcallServiceResponse`** — VMM result is untrusted; copy to private + memory + sanity-check before use. +- **Migration policy** — external input; must be measured (RTMR) and + sanity-checked before use. +- **X.509 certificate** (peer MigTD's) — external input; must be measured and + sanity-checked before use. + +Cross-reference: [Domain Facts § Trust model](../../../knowledge/domain-facts.md) +— "VMM is untrusted but can DoS" already covers the DoS-vs-integrity +distinction for these same boundaries. diff --git a/.agents/skills/migtd-review/references/triage-justifications.md b/.agents/skills/migtd-review/references/triage-justifications.md new file mode 100644 index 000000000..1f924bac6 --- /dev/null +++ b/.agents/skills/migtd-review/references/triage-justifications.md @@ -0,0 +1,94 @@ +--- +type: Reference +title: MigTD Review Triage Justifications +description: Rationale patterns for accepting or rejecting review findings, including common false-positive categories. +tags: [review, triage, false-positives, security] +timestamp: 2026-07-10T19:26:55+00:00 +--- + +# Boilerplate triage justifications + +Reusable text for the `--note` arg of `clawpatch triage`. Adapt the file:line and specifics. + +## Out-of-scope feature + +``` +Dead code in target build: function is gated by `#[cfg(feature = "")]` at +:. The target build set (vmcall-raw, policy_v2, ...) does NOT enable +``, so the offending code is not compiled. No action needed for this build. +``` + +## VMM-controlled offsets in shared circular buffer + +``` +False-positive. The shared log area is a circular buffer where the migtd is the +writer and the VMM is the reader. Wrapping arithmetic in : keeps +write offsets in bounds. VMM-supplied offsets cannot drive OOB reads because the +migtd never reads from the buffer; the VMM only reads. See for the +wrap logic. +``` + +## DoS by untrusted VMM + +``` +Wont-fix. VMM is untrusted and has inherent DoS capability (can starve resources +or kill the TD outright). Unbounded allocation / blocking call here is bounded by +the per-session buffer (max bytes) and the 7 MiB heap — worst case is the TD +exits, which is already part of the VMM's threat surface. +``` + +## Cert-chain weakness in attested path + +``` +False-positive. The root CA chain is measured into RTMR and attested via the +TDX quote — see . A compromised cert alone is insufficient +because the peer's verification of our quote would catch a divergent measurement. +Trust root is hardware attestation, not the software chain. +``` + +## vmcall-raw 0-byte read + +``` +False-positive. The vmcall-raw transport in : blocks until data +arrives or returns an error; it never returns Ok(0). The "infinite loop on EOF" +pattern flagged by the static rule does not apply to this transport. +``` + +## Spurious interrupt wake + +``` +False-positive. The vmcall-interrupt model broadcasts to all migrations on every +event, but each context re-checks its own buffer status (data_status field) before +acting. Spurious wakes are absorbed correctly — see . +``` + +## Single-threaded firmware, no race + +``` +False-positive. MigTD is a single-core, single-threaded no_std firmware. The +flagged access cannot race with another thread; there is no other thread. The +only re-entrancy source is interrupt handlers, which do not mutate the field at +:. +``` + +## Dead public API + +``` +Wont-fix. Function is public but has no in-tree callers in the target build. +Verified with `grep -rn "" src/ --include=*.rs` — only the definition is +returned. Will be removed in a future cleanup pass; not exploitable today. +``` + +## Misspelling without user impact + +``` +Wont-fix (cosmetic). Misspelled internal identifier at : is +not user-visible (no print, no API, no wire format). Renaming would touch +call sites without behavior change. Deferred. +``` + +## Duplicate finding + +``` +Duplicate of finding . Same root cause / same fix surface. +``` diff --git a/.agents/skills/migtd-review/scripts/create_review_issues.sh b/.agents/skills/migtd-review/scripts/create_review_issues.sh new file mode 100755 index 000000000..b0a95aa40 --- /dev/null +++ b/.agents/skills/migtd-review/scripts/create_review_issues.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Template: create+close GH issues from a directory of body files. +# Body files: body_000.md ... body_NNN.md (each starts with "# " on line 1) +# Each body file may end with a marker line "STATUS: closed/<reason>" or "STATUS: open" +# +# Expected env: +# REPO - e.g. "Microsoft/MigTD" +# PREFIX - title prefix, defaults to "[Copilot Review]" +# +# Notes: +# - Auth: `gh auth login --hostname github.com --web` first (device flow). +# - SSO: SAML may require `gh auth refresh -s repo,write:org`. +# - EMU accounts cannot create issues — use a personal account. +# - `gh issue close --reason "not planned"` (with space). + +set -euo pipefail + +: "${REPO:?Set REPO=<owner>/<repo>}" +PREFIX="${PREFIX:-[Copilot Review]}" +BODY_DIR="${BODY_DIR:-.copilot-review-issues}" + +if [[ ! -d "$BODY_DIR" ]]; then + echo "Body dir not found: $BODY_DIR" >&2 + exit 1 +fi + +for body in "$BODY_DIR"/body_*.md; do + [[ -f "$body" ]] || continue + title_line=$(head -n1 "$body") + title="${title_line#"# "}" + full_title="$PREFIX $title" + + echo "→ Creating: $full_title" + issue_url=$(gh issue create --repo "$REPO" --title "$full_title" --body-file "$body") + echo " $issue_url" + + # Look at last line for STATUS marker + status_line=$(tail -n1 "$body") + case "$status_line" in + "STATUS: closed/fixed") + gh issue close "$issue_url" --reason "completed" --comment "Fixed in linked commit." ;; + "STATUS: closed/wont-fix") + gh issue close "$issue_url" --reason "not planned" --comment "Wont-fix: see triage notes." ;; + "STATUS: closed/false-positive") + gh issue close "$issue_url" --reason "not planned" --comment "False-positive: see triage notes." ;; + *) ;; + esac +done diff --git a/.agents/skills/migtd-review/scripts/list_open_findings.sh b/.agents/skills/migtd-review/scripts/list_open_findings.sh new file mode 100755 index 000000000..7911fb9a7 --- /dev/null +++ b/.agents/skills/migtd-review/scripts/list_open_findings.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# List open (unresolved) clawpatch findings, oldest first. +# Usage: ./list_open_findings.sh [findings-dir] + +set -euo pipefail + +DIR="${1:-.clawpatch/findings}" + +if [[ ! -d "$DIR" ]]; then + echo "Directory not found: $DIR" >&2 + exit 1 +fi + +# Print: id severity title (status) +for f in "$DIR"/*.json; do + jq -r 'select(.status=="open") | [.findingId, .severity, .title] | @tsv' "$f" +done | sort -k1 diff --git a/.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh b/.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh new file mode 100755 index 000000000..c62dd3d8e --- /dev/null +++ b/.agents/skills/migtd-review/scripts/run-ci-gauntlet.sh @@ -0,0 +1,425 @@ +#!/usr/bin/env bash +# +# run-ci-gauntlet.sh — exercise the full MigTD CI test surface locally and +# stop at the first failure so an agent can fix it before continuing. +# +# Mirrors: +# .github/workflows/format.yml +# .github/workflows/deny.yml +# .github/workflows/library.yml +# .github/workflows/main.yml +# .github/workflows/integration-emu.yml +# +# Logs are written to target/ci-gauntlet/. On failure the script prints +# the path of the failing log and exits non-zero so the caller (or a +# review agent) can read it and propose a fix. +# +# Usage: +# ./run-ci-gauntlet.sh # full run +# ./run-ci-gauntlet.sh --list # list stages without running +# ./run-ci-gauntlet.sh --from STAGE # resume from STAGE (skip earlier) +# ./run-ci-gauntlet.sh --only STAGE # run a single stage only +# ./run-ci-gauntlet.sh -h | --help +# +# STAGE ∈ { prep | format | deny | library | main | emu } +# +set -u +set -o pipefail + +# ------------------------------------------------------------ paths / setup +REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" +cd "$REPO_ROOT" + +LOG_DIR="$REPO_ROOT/target/ci-gauntlet" +mkdir -p "$LOG_DIR" +SUMMARY="$LOG_DIR/summary.txt" +: > "$SUMMARY" + +STAGES=(prep format deny library main emu) +FROM_STAGE="prep" +ONLY_STAGE="" + +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) + sed -n '2,25p' "$0" + exit 0 + ;; + --list) + printf '%s\n' "${STAGES[@]}" + exit 0 + ;; + --from) + FROM_STAGE="$2"; shift 2 ;; + --only) + ONLY_STAGE="$2"; shift 2 ;; + *) + echo "unknown arg: $1" >&2 + exit 2 + ;; + esac +done + +# stage-runner state +CURRENT_STAGE="" +STARTED=0 + +stage_should_run() { + local name="$1" + if [ -n "$ONLY_STAGE" ]; then + [ "$name" = "$ONLY_STAGE" ] && return 0 || return 1 + fi + if [ "$STARTED" -eq 1 ]; then return 0; fi + if [ "$name" = "$FROM_STAGE" ]; then STARTED=1; return 0; fi + return 1 +} + +# log + run a sub-step; on failure print path and bail. +# usage: step "<label>" <cmd...> +step() { + local label="$1"; shift + local log="$LOG_DIR/${CURRENT_STAGE}__${label}.log" + printf ' [%s] %-50s ' "$CURRENT_STAGE" "$label" | tee -a "$SUMMARY" + local start=$(date +%s) + if "$@" >"$log" 2>&1; then + local dur=$(( $(date +%s) - start )) + printf '✓ PASS (%ds)\n' "$dur" | tee -a "$SUMMARY" + return 0 + else + local rc=$? + local dur=$(( $(date +%s) - start )) + printf '✗ FAIL (%ds rc=%d)\n' "$dur" "$rc" | tee -a "$SUMMARY" + echo "" | tee -a "$SUMMARY" + echo "==== gauntlet FAILED ====" | tee -a "$SUMMARY" + echo "stage: $CURRENT_STAGE" | tee -a "$SUMMARY" + echo "label: $label" | tee -a "$SUMMARY" + echo "command: $*" | tee -a "$SUMMARY" + echo "log: $log" | tee -a "$SUMMARY" + echo "resume: $(realpath "$0") --from $CURRENT_STAGE" | tee -a "$SUMMARY" + echo "" | tee -a "$SUMMARY" + echo "----- last 80 lines of $log -----" | tee -a "$SUMMARY" + tail -n 80 "$log" | tee -a "$SUMMARY" + exit "$rc" + fi +} + +# Run a negative test that must fail and emit a specific diagnostic. +# usage: step_expect_failure_pattern "<label>" "<pattern>" <cmd...> +step_expect_failure_pattern() { + local label="$1"; shift + local pattern="$1"; shift + local log="$LOG_DIR/${CURRENT_STAGE}__${label}.log" + printf ' [%s] %-50s ' "$CURRENT_STAGE" "$label" | tee -a "$SUMMARY" + local start=$(date +%s) + "$@" >"$log" 2>&1 + local rc=$? + local dur=$(( $(date +%s) - start )) + if [ "$rc" -ne 0 ] && grep -aq "$pattern" "$log"; then + printf '✓ PASS (%ds expected rc=%d)\n' "$dur" "$rc" | tee -a "$SUMMARY" + return 0 + fi + + printf '✗ FAIL (%ds rc=%d)\n' "$dur" "$rc" | tee -a "$SUMMARY" + echo "" | tee -a "$SUMMARY" + echo "==== gauntlet FAILED ====" | tee -a "$SUMMARY" + echo "stage: $CURRENT_STAGE" | tee -a "$SUMMARY" + echo "label: $label" | tee -a "$SUMMARY" + echo "expected: non-zero exit and log pattern '$pattern'" | tee -a "$SUMMARY" + echo "command: $*" | tee -a "$SUMMARY" + echo "log: $log" | tee -a "$SUMMARY" + echo "resume: $(realpath "$0") --from $CURRENT_STAGE" | tee -a "$SUMMARY" + echo "" | tee -a "$SUMMARY" + echo "----- last 80 lines of $log -----" | tee -a "$SUMMARY" + tail -n 80 "$log" | tee -a "$SUMMARY" + exit 1 +} + +banner() { + CURRENT_STAGE="$1" + echo "" | tee -a "$SUMMARY" + echo "============== stage: $CURRENT_STAGE ==============" | tee -a "$SUMMARY" +} + +verify_corim_runtime() { + local operation="$1" + local policy_file="$2" + local anchor_file="$3" + + jq -e '.policyData | has("servtdCollateral") | not' "$policy_file" >/dev/null && + [ "$(wc -c < "$anchor_file")" -eq 48 ] || return 1 + + local role log + for role in source destination; do + log="migtd_${operation}_${role}.log" + [ -f "$log" ] && + grep -aq "Loaded signed ServTD CoRIM endorsement" "$log" || return 1 + done +} + +verify_asymmetric_corim() { + jq -e '[.policyData.policy[] | select(has("servtd"))] | length == 0' \ + config/AzCVMEmu/policy_v2_corim_asymmetric.json >/dev/null && + [ "$(wc -c < config/AzCVMEmu/servtd_signer_anchor_asymmetric.bin)" -eq 48 ] && + ! cmp -s config/AzCVMEmu/tcb_mapping_corim_asymmetric_src.cose \ + config/AzCVMEmu/tcb_mapping_corim_asymmetric_dst.cose || return 1 + + local role log + for role in source destination; do + log="migtd_migration_${role}.log" + [ -f "$log" ] || return 1 + if grep -aq "UnqualifiedMigTdInfo\|Policy v2 check failed" "$log"; then + return 1 + fi + done +} + +# ============================================================ STAGE: prep +if stage_should_run prep; then + banner prep + step preparation bash sh_script/preparation.sh +fi + +# ============================================================ STAGE: format +# Mirrors .github/workflows/format.yml. The CI clippy step does NOT +# escalate warnings to errors; we match that. +if stage_should_run format; then + banner format + step fmt-check cargo fmt -- --check + step cargo-check cargo check + step clippy cargo clippy \ + --features stack-guard,virtio-vsock,virtio-serial,vmcall-interrupt +fi + +# ============================================================ STAGE: deny +# Mirrors .github/workflows/deny.yml. CI marks `sources` as +# continue-on-error; we do the same. +if stage_should_run deny; then + banner deny + if ! command -v cargo-deny >/dev/null 2>&1; then + echo " [deny] cargo-deny not installed — install with: cargo install cargo-deny" | tee -a "$SUMMARY" + exit 2 + fi + step advisories cargo deny check advisories + # sources is continue-on-error in CI + CURRENT_STAGE_LOG="$LOG_DIR/deny__sources.log" + printf ' [deny] %-50s ' "sources (continue-on-error)" | tee -a "$SUMMARY" + if cargo deny check sources >"$CURRENT_STAGE_LOG" 2>&1; then + echo "✓ PASS" | tee -a "$SUMMARY" + else + echo "⚠ fail (ignored per CI policy, log: $CURRENT_STAGE_LOG)" | tee -a "$SUMMARY" + fi + step bans cargo deny check bans +fi + +# ============================================================ STAGE: library +# Mirrors .github/workflows/library.yml. +if stage_should_run library; then + banner library + step lib-build cargo xtask lib-build + step lib-test cargo xtask lib-test +fi + +# ============================================================ STAGE: main +# Mirrors .github/workflows/main.yml: 32 cargo image builds. +# device × policy_version × protocol × build_type +if stage_should_run main; then + banner main + for device in virtio-vsock virtio-serial vmcall-vsock vmcall-raw; do + for policy_version in v1 v2; do + for protocol in tls spdm; do + for build_type in release debug; do + label="${device}-${policy_version}-${protocol}-${build_type}" + cmd=(cargo image) + if [ "$device" != "virtio-vsock" ]; then + features="stack-guard,${device}" + if [ "$protocol" = "spdm" ]; then + features="${features},spdm_attestation" + fi + cmd+=(--no-default-features --features "$features") + elif [ "$protocol" = "spdm" ]; then + cmd+=(--features spdm_attestation) + fi + if [ "$policy_version" = "v2" ]; then + cmd+=(--policy-v2 + --policy config/templates/policy_v2_signed.json + --policy-issuer-chain config/templates/policy_issuer_chain.pem) + fi + if [ "$build_type" = "debug" ]; then + cmd+=(--debug) + fi + step "$label" "${cmd[@]}" + done + done + done + done +fi + +# ============================================================ STAGE: emu +# Mirrors .github/workflows/integration-emu.yml. Some scenarios run an +# explicit `cargo build` *before* migtdemu.sh; others let migtdemu.sh +# build internally. We match the workflow exactly. +if stage_should_run emu; then + banner emu + step native-archive-fixup bash src/attestation/test-fixup-libservtd-attest-lib.sh + + # CI generates all default, rotation, revocation, and CoRIM-only policy + # variants before the corresponding scenarios. A single generation covers + # this local serial run. + step policy-generation ./sh_script/build_AzCVMEmu_policy_and_test.sh \ + --mock-report --skip-test --corim-only + + # CoRIM-only policy contract job. + step corim-policy__build env SPDM_CONFIG="$REPO_ROOT/config/spdm_config.json" \ + cargo build --no-default-features \ + --features AzCVMEmu,policy_v2,test_mock_report,spdm_attestation,servtd_corim + step corim-policy__policy-tests cargo test -p policy \ + --features policy_v2,servtd_corim + step corim-policy__hash-tests cargo test -p migtd-hash + step corim-policy__azure-script-syntax bash -n sh_script/Azure/build_azure_mock_test.sh + step corim-policy__mock-script-syntax bash -n sh_script/Azure/build_mock_quote_igvm.sh + + # 1. skip-ra + step skip-ra__build cargo build \ + --features AzCVMEmu,test_disable_ra_and_accept_all --no-default-features + step skip-ra ./migtdemu.sh --skip-ra --debug --both --no-sudo --log-level info + + # 2. policy-v2 + step policy-v2 ./migtdemu.sh --policy-v2 \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --mock-report --both --no-sudo --log-level info + + # 3. policy-v2-igvm + step policy-v2-igvm ./migtdemu.sh --policy-v2 \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --mock-report --features igvm-attest --both --no-sudo --log-level info + + # 4. rebind-skip-ra + step rebind-skip-ra__build cargo build \ + --features AzCVMEmu,policy_v2,test_disable_ra_and_accept_all --no-default-features + step rebind-skip-ra ./migtdemu.sh --operation rebind-prepare \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --skip-ra --debug --both --no-sudo --log-level info + + # 5. rebind-mock + step rebind-mock ./migtdemu.sh --operation rebind-prepare \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --mock-report --both --no-sudo --log-level info + + # 6. spdm-skip-ra + export SPDM_CONFIG="$REPO_ROOT/config/spdm_config.json" + step spdm-skip-ra__build cargo build \ + --features AzCVMEmu,test_disable_ra_and_accept_all,spdm_attestation --no-default-features + step spdm-skip-ra ./migtdemu.sh --skip-ra --debug --features spdm_attestation \ + --both --no-sudo --log-level info + + # 7. spdm-policy-v2 + step spdm-policy-v2 ./migtdemu.sh --policy-v2 \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --mock-report --features spdm_attestation --both --no-sudo --log-level info + + # 8. corim-migration + step corim-migration ./migtdemu.sh --policy-v2 \ + --policy-file ./config/AzCVMEmu/policy_v2_corim.json \ + --servtd-signer-anchor-file ./config/AzCVMEmu/servtd_signer_anchor.bin \ + --servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim.cose \ + --mock-report --features spdm_attestation --both --no-sudo --log-level info + step corim-migration__verify verify_corim_runtime migration \ + config/AzCVMEmu/policy_v2_corim.json \ + config/AzCVMEmu/servtd_signer_anchor.bin + + # 9. corim-rebind + step corim-rebind ./migtdemu.sh --operation rebind-prepare \ + --policy-file ./config/AzCVMEmu/policy_v2_corim.json \ + --servtd-signer-anchor-file ./config/AzCVMEmu/servtd_signer_anchor.bin \ + --servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim.cose \ + --mock-report --features spdm_attestation --both --no-sudo --log-level info + step corim-rebind__verify verify_corim_runtime rebind-prepare \ + config/AzCVMEmu/policy_v2_corim.json \ + config/AzCVMEmu/servtd_signer_anchor.bin + + # 10. corim-asymmetric-migration + step corim-asymmetric__generate ./sh_script/gen_asymmetric_servtd_corim_fixture.sh + step corim-asymmetric-migration ./migtdemu.sh --policy-v2 \ + --policy-file ./config/AzCVMEmu/policy_v2_corim_asymmetric.json \ + --servtd-signer-anchor-file ./config/AzCVMEmu/servtd_signer_anchor_asymmetric.bin \ + --src-servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim_asymmetric_src.cose \ + --dst-servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim_asymmetric_dst.cose \ + --mock-report --features spdm_attestation --both --no-sudo --log-level info + step corim-asymmetric-migration__verify verify_asymmetric_corim + + # 11. spdm-rebind-skip-ra + step spdm-rebind-skip-ra__build cargo build \ + --features AzCVMEmu,policy_v2,test_disable_ra_and_accept_all,spdm_attestation --no-default-features + step spdm-rebind-skip-ra ./migtdemu.sh --operation rebind-prepare \ + --policy-file ./config/AzCVMEmu/policy_v2_signed.json \ + --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --skip-ra --debug --features spdm_attestation --both --no-sudo --log-level info + + # 12. mock-quote-retry + step mock-quote-retry ./migtdemu.sh --mock-report --mock-quote-retry \ + --features igvm-attest --both --no-sudo --log-level info + + # 13. policy-v2-key-rotation + step policy-v2-key-rotation ./migtdemu.sh --policy-v2 \ + --src-policy-file ./config/AzCVMEmu/policy_v2_signed_a.json \ + --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_a.pem \ + --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_b.json \ + --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_b.pem \ + --mock-report --both --no-sudo --log-level info + + # 14. policy-v2-key-rotation-igvm + step policy-v2-key-rotation-igvm ./migtdemu.sh --policy-v2 \ + --src-policy-file ./config/AzCVMEmu/policy_v2_signed_a.json \ + --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_a.pem \ + --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_b.json \ + --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_b.pem \ + --mock-report --features igvm-attest --both --no-sudo --log-level info + + # 15. spdm-policy-v2-key-rotation + step spdm-policy-v2-key-rotation ./migtdemu.sh --policy-v2 \ + --src-policy-file ./config/AzCVMEmu/policy_v2_signed_a.json \ + --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_a.pem \ + --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_b.json \ + --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_b.pem \ + --mock-report --features spdm_attestation --both --no-sudo --log-level info + + # 16. policy-v2-policy-mapping-rotation + step policy-v2-policy-mapping-rotation ./migtdemu.sh --policy-v2 \ + --src-policy-file ./config/AzCVMEmu/policy_v2_signed_a.json \ + --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_a.pem \ + --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_pm_b.json \ + --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_b.pem \ + --mock-report --both --no-sudo --log-level info + + # 17. policy-v2-all-chains-rotation + step policy-v2-all-chains-rotation ./migtdemu.sh --policy-v2 \ + --src-policy-file ./config/AzCVMEmu/policy_v2_signed_a.json \ + --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_a.pem \ + --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_pmi_b.json \ + --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_b.pem \ + --mock-report --both --no-sudo --log-level info + + # 18. policy-v2-revoked + step policy-v2-revoked__build cargo build --release \ + --features AzCVMEmu,policy_v2,test_mock_report --no-default-features + step_expect_failure_pattern policy-v2-revoked SignerRevoked \ + ./migtdemu.sh --policy-v2 \ + --src-policy-file ./config/AzCVMEmu/policy_v2_signed_revoked.json \ + --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_revoked.json \ + --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem \ + --mock-report --both --no-sudo --log-level info +fi + +# ============================================================ SUMMARY +{ + echo "" + echo "============== gauntlet PASSED ==============" + echo "logs: $LOG_DIR" + echo "" +} | tee -a "$SUMMARY" diff --git a/.github/workflows/integration-emu.yml b/.github/workflows/integration-emu.yml index 2b61a985c..9c6cd8f6e 100644 --- a/.github/workflows/integration-emu.yml +++ b/.github/workflows/integration-emu.yml @@ -21,6 +21,39 @@ permissions: contents: read jobs: + corim-only-policy: + name: "CoRIM-only Azure release policy" + runs-on: ubuntu-22.04 + timeout-minutes: 60 + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 + with: + egress-policy: audit + + - name: Checkout sources + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + submodules: recursive + + - name: Setup build environment + uses: ./.github/actions/setup-build-environment + with: + install-tpm-tools: 'true' + + - name: Build and test CoRIM-only policy contract + run: | + bash src/attestation/test-fixup-libservtd-attest-lib.sh + export SPDM_CONFIG="$GITHUB_WORKSPACE/config/spdm_config.json" + cargo build \ + --no-default-features \ + --features "AzCVMEmu,policy_v2,test_mock_report,spdm_attestation,servtd_corim" + cargo test -p policy --features "policy_v2,servtd_corim" + cargo test -p migtd-hash + bash -n sh_script/Azure/build_azure_mock_test.sh + bash -n sh_script/Azure/build_mock_quote_igvm.sh + emulation-tests: name: ${{ matrix.test-name }} runs-on: ubuntu-22.04 @@ -78,6 +111,29 @@ jobs: test-command: "./migtdemu.sh --policy-v2 --policy-file ./config/AzCVMEmu/policy_v2_signed.json --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem --mock-report --features spdm_attestation --both --no-sudo --log-level info" artifact-name: "spdm-policy-v2-test-logs" + - test-name: "CoRIM-only SPDM Migration (Mock Report)" + test-type: "corim-migration" + install-jq: 'true' + timeout-seconds: 900 + test-command: "./migtdemu.sh --policy-v2 --policy-file ./config/AzCVMEmu/policy_v2_corim.json --servtd-signer-anchor-file ./config/AzCVMEmu/servtd_signer_anchor.bin --servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim.cose --mock-report --features spdm_attestation --both --no-sudo --log-level info" + artifact-name: "corim-migration-test-logs" + + - test-name: "CoRIM-only Rebind Prepare (Mock Report)" + test-type: "corim-rebind" + install-jq: 'true' + timeout-seconds: 900 + test-command: "./migtdemu.sh --operation rebind-prepare --policy-file ./config/AzCVMEmu/policy_v2_corim.json --servtd-signer-anchor-file ./config/AzCVMEmu/servtd_signer_anchor.bin --servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim.cose --mock-report --features spdm_attestation --both --no-sudo --log-level info" + artifact-name: "corim-rebind-test-logs" + + # The source CoRIM maps the mock TDINFO hash while the destination + # CoRIM does not, requiring lookup through the authenticated peer. + - test-name: "CoRIM Asymmetric Peer SVN Lookup (Mock Report)" + test-type: "corim-asymmetric-migration" + install-jq: 'true' + timeout-seconds: 900 + test-command: "./migtdemu.sh --policy-v2 --policy-file ./config/AzCVMEmu/policy_v2_corim_asymmetric.json --servtd-signer-anchor-file ./config/AzCVMEmu/servtd_signer_anchor_asymmetric.bin --src-servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim_asymmetric_src.cose --dst-servtd-corim-file ./config/AzCVMEmu/tcb_mapping_corim_asymmetric_dst.cose --mock-report --features spdm_attestation --both --no-sudo --log-level info" + artifact-name: "corim-asymmetric-migration-test-logs" + - test-name: "SPDM Rebind Prepare (Skip RA)" test-type: "spdm-rebind-skip-ra" install-jq: 'true' @@ -127,6 +183,18 @@ jobs: test-command: "./migtdemu.sh --policy-v2 --src-policy-file ./config/AzCVMEmu/policy_v2_signed_a.json --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_a.pem --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_pmi_b.json --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain_b.pem --mock-report --both --no-sudo --log-level info" artifact-name: "policy-v2-all-chains-rotation-test-logs" + # Negative test: the TCB-mapping signer certificate is revoked by the + # signer CRL embedded in collaterals.servtdCrl, so every MigTD must + # fail closed at policy init (PolicyError::SignerRevoked) and refuse + # to migrate. Uses the policy_v2_signed_revoked.json variant emitted + # by build_AzCVMEmu_policy_and_test.sh on both sides. + - test-name: "Policy v2 Signer Revocation (Mock Report)" + test-type: "policy-v2-revoked" + install-jq: 'true' + timeout-seconds: 300 + test-command: "./migtdemu.sh --policy-v2 --src-policy-file ./config/AzCVMEmu/policy_v2_signed_revoked.json --src-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem --dst-policy-file ./config/AzCVMEmu/policy_v2_signed_revoked.json --dst-policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem --mock-report --both --no-sudo --log-level info" + artifact-name: "policy-v2-revoked-test-logs" + steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0 @@ -170,6 +238,12 @@ jobs: export SPDM_CONFIG="$(pwd)/config/spdm_config.json" cargo build --features "AzCVMEmu,policy_v2,test_disable_ra_and_accept_all,spdm_attestation" --no-default-features + - name: Build MigTD for signer revocation test + if: matrix.test-type == 'policy-v2-revoked' + run: | + echo "Prebuilding MigTD so the negative-test timeout covers runtime, not compilation..." + cargo build --release --features "AzCVMEmu,policy_v2,test_mock_report" --no-default-features + - name: Verify emulation script if: matrix.test-type == 'skip-ra' || matrix.test-type == 'rebind-skip-ra' || matrix.test-type == 'spdm-skip-ra' || matrix.test-type == 'spdm-rebind-skip-ra' run: | @@ -188,14 +262,28 @@ jobs: run: | chmod +x ./migtdemu.sh chmod +x ./sh_script/build_AzCVMEmu_policy_and_test.sh + chmod +x ./sh_script/gen_asymmetric_servtd_corim_fixture.sh - name: Generate policy files if: matrix.install-jq == 'true' run: | echo "Generating AzCVMEmu policy files with mock measurements..." - ./sh_script/build_AzCVMEmu_policy_and_test.sh --mock-report --skip-test + GEN_ARGS=(--mock-report --skip-test) + if [[ "${{ matrix.test-type }}" == corim-* ]]; then + GEN_ARGS+=(--corim-only) + fi + ./sh_script/build_AzCVMEmu_policy_and_test.sh "${GEN_ARGS[@]}" echo "Policy files generated:" ls -la config/AzCVMEmu/policy_v2_signed*.json config/AzCVMEmu/policy_issuer_chain*.pem + if [[ "${{ matrix.test-type }}" == corim-* ]]; then + ls -la config/AzCVMEmu/policy_v2_corim.json \ + config/AzCVMEmu/servtd_signer_anchor.bin \ + config/AzCVMEmu/tcb_mapping_corim.cose + fi + + - name: Generate asymmetric CoRIM fixtures + if: matrix.test-type == 'corim-asymmetric-migration' + run: ./sh_script/gen_asymmetric_servtd_corim_fixture.sh - name: Run test id: test_run @@ -209,6 +297,31 @@ jobs: set -e echo "Test completed with exit code: $EXIT_CODE" + + # Negative test: a revoked TCB-mapping signer must make every MigTD + # fail closed at policy init (before any migration), logging + # PolicyError::SignerRevoked. Its presence is the definitive proof + # the revocation control fired — the MigTD crashes at boot, so it can + # never complete a migration. Pass on that evidence. + if [[ "${{ matrix.test-type }}" == "policy-v2-revoked" ]]; then + if [[ $EXIT_CODE -eq 0 ]]; then + echo "❌ Revoked-signer policy unexpectedly completed successfully" + echo "test_status=failed" >> $GITHUB_OUTPUT + exit 1 + elif grep -aq "SignerRevoked" migtd_migration_source.log migtd_migration_destination.log dest_*_out.log 2>/dev/null; then + echo "✅ Revocation enforced: MigTD refused a revoked-signer policy (SignerRevoked), exit=$EXIT_CODE" + echo "test_status=success" >> $GITHUB_OUTPUT + exit 0 + elif [[ $EXIT_CODE -eq 124 ]]; then + echo "❌ Revocation test timed out without reaching SignerRevoked" + echo "test_status=timeout" >> $GITHUB_OUTPUT + exit 1 + else + echo "❌ Expected a SignerRevoked error in the guest logs, but none was found (exit=$EXIT_CODE)" + echo "test_status=failed" >> $GITHUB_OUTPUT + exit 1 + fi + fi if [[ $EXIT_CODE -eq 0 ]]; then echo "✅ Test completed successfully" @@ -329,6 +442,67 @@ jobs: echo "✅ Quote retry verification passed (5 failures + success on both sides)" fi + # Prove the CoRIM-only scenarios did not fall back to legacy JSON + # servtdCollateral and that both peers attached the signed CoRIM. + if [[ "${{ matrix.test-type }}" == corim-* ]]; then + echo "" + echo "=== Verifying CoRIM-only runtime path ===" + if ! jq -e '.policyData | has("servtdCollateral") | not' config/AzCVMEmu/policy_v2_corim.json >/dev/null; then + echo "❌ CoRIM-only policy contains legacy servtdCollateral" + exit 1 + fi + if [[ $(wc -c < config/AzCVMEmu/servtd_signer_anchor.bin) -ne 48 ]]; then + echo "❌ ServTD signer anchor is not 48 bytes" + exit 1 + fi + for ROLE in source destination; do + LOG=$(find . -maxdepth 1 -name "migtd_*_${ROLE}.log" -print -quit) + if [[ -z "$LOG" ]] || ! grep -aq "Loaded signed ServTD CoRIM endorsement" "$LOG"; then + echo "❌ Missing signed-CoRIM attachment evidence for $ROLE" + exit 1 + fi + echo "✅ $ROLE attached the signed ServTD CoRIM" + done + fi + + # Confirm the peer mappings differ and the policy check succeeded. + if [[ "${{ matrix.test-type }}" == "corim-asymmetric-migration" ]]; then + echo "" + echo "=== Verifying asymmetric peer CoRIM fixtures ===" + if ! jq -e '[.policyData.policy[] | select(has("servtd"))] | length == 0' \ + config/AzCVMEmu/policy_v2_corim_asymmetric.json >/dev/null; then + echo "❌ policy_v2_corim_asymmetric.json still contains a servtd isvsvn rule (would mask the decisive check)" + exit 1 + fi + if [[ $(wc -c < config/AzCVMEmu/servtd_signer_anchor_asymmetric.bin) -ne 48 ]]; then + echo "❌ Asymmetric ServTD signer anchor is not 48 bytes" + exit 1 + fi + if cmp -s config/AzCVMEmu/tcb_mapping_corim_asymmetric_src.cose \ + config/AzCVMEmu/tcb_mapping_corim_asymmetric_dst.cose; then + echo "❌ Source and destination CoRIM fixtures are byte-identical -- scenario is not asymmetric" + exit 1 + fi + echo "✅ Source/destination CoRIM fixtures differ and share a 48-byte signer anchor" + for ROLE in source destination; do + LOG=$(find . -maxdepth 1 -name "migtd_*_${ROLE}.log" -print -quit) + if [[ -n "$LOG" ]] && grep -aq "UnqualifiedMigTdInfo\|Policy v2 check failed" "$LOG"; then + echo "❌ $ROLE log shows a policy check failure despite the run being reported as passing" + exit 1 + fi + done + echo "✅ No UnqualifiedMigTdInfo/policy-check-failed evidence in either role's log" + fi + + # Dump revocation-related log lines for the signer-revocation test. + if [[ "${{ matrix.test-type }}" == "policy-v2-revoked" ]]; then + echo "" + echo "=== Signer revocation log lines ===" + grep -a "SignerRevoked\|Failed to initialize migration policy\|revoked" \ + migtd_migration_source.log migtd_migration_destination.log dest_*_out.log 2>/dev/null || \ + echo "(no revocation-related lines found)" + fi + - name: Upload test artifacts on failure if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 @@ -343,9 +517,17 @@ jobs: config/AzCVMEmu/policy_v2_signed_b.json config/AzCVMEmu/policy_v2_signed_pm_b.json config/AzCVMEmu/policy_v2_signed_pmi_b.json + config/AzCVMEmu/policy_v2_signed_revoked.json config/AzCVMEmu/policy_issuer_chain.pem config/AzCVMEmu/policy_issuer_chain_a.pem config/AzCVMEmu/policy_issuer_chain_b.pem + config/AzCVMEmu/policy_v2_corim.json + config/AzCVMEmu/servtd_signer_anchor.bin + config/AzCVMEmu/tcb_mapping_corim.cose + config/AzCVMEmu/policy_v2_corim_asymmetric.json + config/AzCVMEmu/servtd_signer_anchor_asymmetric.bin + config/AzCVMEmu/tcb_mapping_corim_asymmetric_src.cose + config/AzCVMEmu/tcb_mapping_corim_asymmetric_dst.cose target/release/migtd retention-days: 7 if-no-files-found: ignore diff --git a/.github/workflows/reproducible-igvm.yml b/.github/workflows/reproducible-igvm.yml new file mode 100644 index 000000000..44551581d --- /dev/null +++ b/.github/workflows/reproducible-igvm.yml @@ -0,0 +1,122 @@ +# Validates that the Azure IGVM image is a reproducible build, using the pinned +# Docker toolchain we ship (sh_script/Azure/Dockerfile + docker_build_igvm.sh). +# +# The wrapper builds the IGVM inside the pinned ubuntu:26.04 container (root, +# /root/MigTD, frozen clang/llvm/nasm + Rust 1.88.0 -- the real Azure build +# environment). We run it twice from the same prepared sources and fail unless +# the two migtd.igvm files are byte-identical. Building inside the pinned image +# is what makes the result reproducible across machines/OS images: a different +# clang produces different bytes (see doc/reproducible_build.md and readme.md). +# An identical image also implies an identical MRTD. +# +# This is intentionally the *faithful* check -- it exercises the shipped +# Dockerfile and wrapper and the exact toolchain the Azure image is built with, +# rather than the host runner's toolchain. +# +# It is heavy (a docker image build plus two full IGVM builds, each including +# the linux-sgx/OCaml attestation library and an LTO `cargo image`), so it runs +# weekly, on manual dispatch, and on PRs that touch inputs affecting the build. +name: reproducible-igvm + +on: + workflow_dispatch: + schedule: + # Weekly audit: Mondays 06:00 UTC. + - cron: "0 6 * * 1" + pull_request: + paths: + - "sh_script/Azure/**" + - ".github/workflows/reproducible-igvm.yml" + - "xtask/**" + - "Cargo.toml" + - "Cargo.lock" + - "rust-toolchain" + - "src/attestation/build.rs" + - "src/attestation/prune-unused-linux-sgx.sh" + - "src/attestation/test-prune-unused-linux-sgx.sh" + - "deps/linux-sgx" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + reproducible-igvm: + name: Azure IGVM reproducibility (pinned Docker image) + runs-on: ubuntu-22.04 + timeout-minutes: 240 + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4 + with: + egress-policy: audit + + - name: Free up disk space + run: | + # A docker image build plus two full IGVM builds need headroom. + sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android \ + /opt/hostedtoolcache/CodeQL || true + docker image prune -af || true + df -h / + + - name: Checkout sources + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + submodules: recursive + + - name: Prepare sources (ring/spdm patches; git-only) + # docker_build_igvm.sh local mode builds an already-prepared tree; the + # actual IGVM build (clang/rust/nasm) happens inside the container. + run: bash sh_script/preparation.sh + + - name: Test linux-sgx pruning safety + run: bash src/attestation/test-prune-unused-linux-sgx.sh + + - name: Build Azure IGVM in the pinned container (run 1) + run: ./sh_script/Azure/docker_build_igvm.sh -t build-igvm -o "$RUNNER_TEMP/out1" + + - name: Build Azure IGVM in the pinned container (run 2) + # Reuses the builder image from run 1 but builds in a fresh container, so + # the two IGVMs are independent rebuilds in the same pinned environment. + run: ./sh_script/Azure/docker_build_igvm.sh -t build-igvm -o "$RUNNER_TEMP/out2" + + - name: Compare IGVM images + run: | + set -euo pipefail + A=$(awk '{print $1}' "$RUNNER_TEMP/out1/migtd.igvm.sha256") + B=$(awk '{print $1}' "$RUNNER_TEMP/out2/migtd.igvm.sha256") + { + echo "## Azure IGVM reproducibility (pinned Docker image)" + echo "" + echo "| run | sha256 |" + echo "|-----|--------|" + echo "| 1 | \`$A\` |" + echo "| 2 | \`$B\` |" + echo "" + } >> "$GITHUB_STEP_SUMMARY" + + if [ "$A" = "$B" ]; then + echo "Reproducible: two container builds produced an identical IGVM ($A)" + echo "**Result: reproducible** ✅" >> "$GITHUB_STEP_SUMMARY" + else + echo "NOT reproducible: $A != $B" + ls -l "$RUNNER_TEMP"/out1/migtd.igvm "$RUNNER_TEMP"/out2/migtd.igvm || true + echo "First differing bytes:" + cmp -l "$RUNNER_TEMP"/out1/migtd.igvm "$RUNNER_TEMP"/out2/migtd.igvm | head -20 || true + echo "**Result: NOT reproducible** ❌ — see job logs and uploaded artifacts." >> "$GITHUB_STEP_SUMMARY" + exit 1 + fi + + - name: Upload IGVM images on mismatch + if: failure() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: igvm-repro-mismatch + path: | + ${{ runner.temp }}/out1/migtd.igvm + ${{ runner.temp }}/out2/migtd.igvm + if-no-files-found: ignore diff --git a/.gitignore b/.gitignore index 4bdfa2385..fdff828c2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # Cargo Junk target/ *.bin +!config/AzCVMEmu/corim/signer_anchor.bin *.o *.obj @@ -33,5 +34,25 @@ __pycache__ # Auto-generated policy files (regenerated by build_AzCVMEmu_policy_and_test.sh) config/AzCVMEmu/policy_v2_signed*.json config/AzCVMEmu/policy_issuer_chain*.pem +config/AzCVMEmu/policy_v2_corim.json +config/AzCVMEmu/servtd_signer_anchor.bin +config/AzCVMEmu/tcb_mapping_corim.cose +# Generated asymmetric CoRIM fixtures +config/AzCVMEmu/policy_v2_corim_asymmetric.json +config/AzCVMEmu/servtd_signer_anchor_asymmetric.bin +config/AzCVMEmu/tcb_mapping_corim_asymmetric_src.cose +config/AzCVMEmu/tcb_mapping_corim_asymmetric_dst.cose config/Azure/policy_v2_signed*.json config/Azure/policy_issuer_chain*.pem +# Auto-generated collateral/tcb-mapping (fetched/regenerated by the mock-test builds) +config/AzCVMEmu/collateral_thim.json +config/AzCVMEmu/tcb_mapping.json +config/Azure/collateral_thim.json +config/Azure/tcb_mapping.json + +# Local build and package output +out/ + +# review tooling +.clawpatch/ +.copilot-review-issues/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..7f0f43ce3 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,180 @@ +# MigTD agent guide + +Rules for every AI-assisted change. + +## Start here + +- Read [`CONTRIBUTING.md`](CONTRIBUTING.md). +- Read the relevant [knowledge files](.agents/knowledge/index.md). +- Use the [review playbook](.agents/skills/migtd-review/SKILL.md). +- Inspect cited commits before copying a pattern. +- Confirm the target checkout and branch. +- Leave sibling checkouts untouched. + +## Security model + +- Firmware is single-core and single-threaded. +- Rust is `no_std`. +- Async execution is cooperative. +- Treat interrupt-shared state separately. +- Treat the VMM as untrusted. +- Ignore findings that only give the VMM more DoS. +- Trust `MRTD` and `RTMR0..3`. +- Treat certificate chains as transport. +- The policy root CA is measured into RTMR. +- Trust `VERIFIED_POLICY` only after `init_policy()`. +- Regular migration uses quotes. +- Quote REPORTDATA starts at byte 520. +- Use `verify_report_data_binding`. +- Rebind uses TDREPORT. +- TDREPORT REPORTDATA starts at byte 128. +- Use `verify_tdreport_data_binding`. +- Never mix the two paths. +- `MROwner` is the policy signer key hash. +- `MROwnerConfig` is the policy SVN. +- Do not compare local TDINFO MROwnerConfig with policy SVN at startup. +- Require the same signer during migration. +- Require source SVN to meet destination SVN. +- Resolve both the initial and current MigTD hashes through the authenticated + source's verified one-hash mapping. +- Require the mapped initial SVN to be no greater than the mapped current SVN. +- Ignore the legacy wire Init_TDINFO after validating request framing. +- Keep `init_td_info` as the sole wire TDINFO field. +- Do not add redundant MigTD hash fields. +- Never upstream test-only security bypasses. +- Size-check every VMM-controlled byte range. +- Check `u32` offset arithmetic for wraparound. +- Use `#[repr(C)]` or explicit serialization at boundaries. +- `vmcall-raw` never returns `Ok(0)` or EOF. +- Per-buffer `data_status` filters broadcast wakes. +- Read [security bypasses](.agents/knowledge/security-bypasses.md). +- Read [domain facts](.agents/knowledge/domain-facts.md). + +## Code changes + +- Keep diffs small. +- Preserve existing names during functional work. +- Avoid unrelated cleanup. +- Format only touched files. +- Avoid `expect()` and `unwrap()` outside tests. +- Return errors. +- Prefer `LogErr` or `LogError`. +- Deduplicate only when reuse is real. +- Avoid one-use traits and macros. +- Do not add precautionary feature gates. +- Keep INFO logs sparse. +- Never dump full quotes, certs, or large blobs. +- Log length and short edge slices instead. +- Gate temporary diagnostics. +- Prove odd code is redundant before changing it. +- Preserve load-bearing workarounds. +- Keep their explanatory comments. +- Never grow a buffer to mask a bug. + +## Setup and build + +- Run `bash sh_script/preparation.sh` after: + - a fresh checkout; + - `git clean -fdx`; + - a submodule update; + - a branch switch that changes submodules. +- The script applies required `spdm-rs` patches. +- Missing patches can mimic baseline failures. +- Use repository build scripts. +- Treat CI commands as the source of truth. + +## Tests and validation + +- Run the smallest relevant checks first. +- Run `cargo fmt --check`. +- Run Clippy for the in-scope features. +- Deny warnings where required. +- Run tests for every touched crate. +- Run EMU tests for boundary changes. +- Boundary areas include: + - event log and RTMR replay; + - policy parsing and verification; + - migration, handshake, and rebind; + - SPDM transport; + - crypto, certificates, and PEM; + - vmcall transport. +- `cargo test` alone is insufficient there. +- Never run `migtdemu.sh` concurrently. +- It shares port, CPU, and output state. +- Before pushing code, run: + + ```bash + .agents/skills/migtd-review/scripts/run-ci-gauntlet.sh + ``` + +- Require every stage to pass. +- Stages: `prep`, `format`, `deny`, `main`, `emu`. +- Stop on failure. +- Fix the root cause. +- Resume from the failed stage. +- Do not skip failing checks. +- Documentation-only changes need no build or test. + +## Workflow + +- Keep independent fixes on independent branches. +- Confirm remote meaning from context. +- Prefer cherry-picking an existing upstream fix. +- Use `git rebase --onto` for targeted rebases. +- Resolve conflicts with minimal churn. +- Do not touch unrelated worktree changes. +- Do not track `.clawpatch/`. +- Do not track `.copilot-review-issues/`. +- Use `[Copilot Review]` for review issue titles. +- Check account permissions before filing issues. +- Under WSL, use Git or `gh` through their normal GitHub authentication flow. + A successful `git push` proves the cached Windows Git Credential Manager + credential is usable; do not query GCM directly and mistake an API prompt + without GitHub's authentication challenge for a missing cache. + +## Contribution and commits + +- Follow [`CONTRIBUTING.md`](CONTRIBUTING.md). +- Use `<type>(<crate/module>): <subject>`. +- Use `migtd` for repository-wide changes. +- Add a short body. +- Explain what changed and why. +- Keep each commit to one logical change. +- Use the configured human identity. +- Add the human DCO sign-off to every commit. +- Never sign off for an AI. +- Never name an AI in `Signed-off-by`. +- Never name an AI in `Co-authored-by`. +- Declare AI help with: + + ```text + Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2] + ``` + +- List only material specialist tools. +- Omit Git, compilers, formatters, editors, and test runners. +- Push to a personal fork. +- Never force-push shared remotes. +- If rewriting, use: + + ```text + --force-with-lease=<branch>:<known-sha> + ``` + +## Knowledge upkeep + +- Recheck the knowledge index at session end. +- Record durable, non-obvious learnings. +- Record human corrections. +- Record rejected hypotheses worth preserving. +- Correct stale guidance. +- Update the smallest relevant topical file. +- Cite a SHA, file, or test when useful. +- Explain removed guidance in the commit body. +- Keep task-specific state out of the knowledge base. +- Keep the decisions log append-only. +- Add new topics only when no current file fits. +- Add OKF frontmatter to new knowledge files. +- Link new files from `.agents/knowledge/index.md`. +- Link new files from `.agents/index.md`. +- Preserve knowledge before risky cleanup. diff --git a/Cargo.lock b/Cargo.lock index cae63b1a3..0a0389004 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -315,9 +315,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block-buffer" @@ -330,9 +330,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] @@ -475,6 +475,28 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "corim" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18ae0dacf8af1ae85596c375df3bf848ff57712a8b07d5a9ba36863d901f78d7" +dependencies = [ + "corim-macros", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "corim-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c16ee2c7db3dde66570487ea3a6329bd07ca138652b57a3a442c200c75df495" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "cpufeatures" version = "0.2.10" @@ -529,9 +551,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", ] @@ -599,12 +621,12 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", - "crypto-common 0.2.1", + "block-buffer 0.12.1", + "crypto-common 0.2.2", ] [[package]] @@ -943,9 +965,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ "typenum", ] @@ -1271,7 +1293,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", ] @@ -1432,9 +1454,11 @@ dependencies = [ "clap", "crypto", "env_logger", + "hex", "igvm", "log", - "migtd", + "policy", + "r-efi 3.2.0", "serde_json", "td-layout", "td-shim-interface", @@ -1599,7 +1623,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "foreign-types", "libc", @@ -1737,6 +1761,7 @@ version = "0.1.0" dependencies = [ "cc-measurement", "chrono", + "corim", "crypto", "log", "serde", @@ -1902,7 +1927,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -2034,7 +2059,7 @@ version = "0.38.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", @@ -2215,7 +2240,7 @@ checksum = "c2ff74d7e7d1cc172f3a45adec74fbeee928d71df095b85aaaf66eb84e1e31e6" dependencies = [ "base64 0.22.1", "bitfield 0.19.3", - "bitflags 2.13.0", + "bitflags 2.13.1", "byteorder", "dirs", "hex", @@ -2247,7 +2272,7 @@ checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -2641,7 +2666,7 @@ name = "tdx-tdcall-emu" version = "0.1.0" dependencies = [ "az-tdx-vtpm", - "bitflags 2.13.0", + "bitflags 2.13.1", "interrupt-emu", "lazy_static", "log", @@ -2843,7 +2868,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "futures-util", "http", @@ -2939,9 +2964,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" @@ -3559,7 +3584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f042214de98141e9c8706e8192b73f56494087cc55ebec28ce10f26c5c364ae" dependencies = [ "bit_field", - "bitflags 2.13.0", + "bitflags 2.13.1", "rustversion", "volatile 0.4.6", ] diff --git a/Cargo.toml b/Cargo.toml index 9ae05208d..00c16d746 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,9 @@ strip = true [profile.release] panic = "abort" # disable stack unwinding on panic opt-level = "z" -lto = true +lto = "fat" +codegen-units = 1 +strip = true [patch.crates-io] ring = { path = "deps/td-shim/library/ring" } diff --git a/config/AzCVMEmu/corim/signer_anchor.bin b/config/AzCVMEmu/corim/signer_anchor.bin new file mode 100644 index 000000000..09c3c4100 Binary files /dev/null and b/config/AzCVMEmu/corim/signer_anchor.bin differ diff --git a/config/AzCVMEmu/corim/tcb_mapping.cose b/config/AzCVMEmu/corim/tcb_mapping.cose new file mode 100644 index 000000000..db34110f5 Binary files /dev/null and b/config/AzCVMEmu/corim/tcb_mapping.cose differ diff --git a/config/AzCVMEmu/tcb_mapping.json b/config/AzCVMEmu/tcb_mapping.json index ba58d2e7a..e2849a1b8 100644 --- a/config/AzCVMEmu/tcb_mapping.json +++ b/config/AzCVMEmu/tcb_mapping.json @@ -1 +1,7 @@ -{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","mrSigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"svnMappings":[{"tdMeasurements":{"mrtd":"E2C7DA7CF0D93973480F0A34A6FE52A204EA81B4F1B6CD16018F5B4CAEE7B3B544A9738464A7C95E1705E20687A0ADA6","rtmr0":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","rtmr1":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]} +{ + "id": "BB9668CA-4EE8-4523-941A-B3B03BE46E03", + "version": 1, + "issueDate": "2025-01-01T00:00:00Z", + "nextUpdate": "2026-01-01T00:00:00Z", + "svnMappings": [] +} diff --git a/config/AzCVMEmu/td_identity.json b/config/AzCVMEmu/td_identity.json index bba297175..dd1e8a55b 100644 --- a/config/AzCVMEmu/td_identity.json +++ b/config/AzCVMEmu/td_identity.json @@ -1 +1,15 @@ -{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]} \ No newline at end of file +{ + "id": "A0998F0F-B2F3-4872-8138-FBC2B853E8C6", + "version": 1, + "issueDate": "2025-01-01T00:00:00Z", + "nextUpdate": "2026-01-01T00:00:00Z", + "tcbLevels": [ + { + "tcb": { + "isvsvn": 1 + }, + "tcbDate": "2024-01-01T00:00:00Z", + "tcbStatus": "UpToDate" + } + ] +} \ No newline at end of file diff --git a/config/Azure/policy_data_raw.json b/config/Azure/policy_data_raw.json index 78a93212b..c9f9942ff 100644 --- a/config/Azure/policy_data_raw.json +++ b/config/Azure/policy_data_raw.json @@ -1 +1 @@ -{"id":"251E9C0A-0BB3-4B1F-8BEB-381F155CB8C6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbDate":{"operation":"greater-or-equal","reference":"2023-08-09T00:00:00Z"}},"platform":{"fmspc":{"operation":"equal","reference":"90C06F000000"}}}},{"servtd":{"migtdIdentity":{"tcbDate":{"operation":"greater-or-equal","reference":"2026-04-03T00:00:00Z"}}}}]} \ No newline at end of file +{"id":"251E9C0A-0BB3-4B1F-8BEB-381F155CB8C6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbDate":{"operation":"greater-or-equal","reference":"2023-08-09T00:00:00Z"}},"platform":{"fmspc":{"operation":"equal","reference":"self"}}}},{"servtd":{"migtdIdentity":{"isvsvn":{"operation":"greater-or-equal","reference":"self"}}}}]} \ No newline at end of file diff --git a/config/Azure/policy_reject_data_raw.json b/config/Azure/policy_reject_data_raw.json new file mode 100644 index 000000000..8b6380114 --- /dev/null +++ b/config/Azure/policy_reject_data_raw.json @@ -0,0 +1 @@ +{"id":"251E9C0A-0BB3-4B1F-8BEB-381F155CB8C6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbDate":{"operation":"greater-or-equal","reference":"2023-08-09T00:00:00Z"}},"platform":{"fmspc":{"operation":"equal","reference":"DEADBEEF0000"}}}},{"servtd":{"migtdIdentity":{"tcbDate":{"operation":"greater-or-equal","reference":"2026-04-03T00:00:00Z"}}}}]} \ No newline at end of file diff --git a/config/Azure/td_identity.json b/config/Azure/td_identity.json new file mode 100644 index 000000000..58fed0a9c --- /dev/null +++ b/config/Azure/td_identity.json @@ -0,0 +1 @@ +{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2026-05-20T22:49:55Z","nextUpdate":"2027-04-03T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2026-05-20T22:49:55Z","tcbStatus":"UpToDate"}]} \ No newline at end of file diff --git a/config/templates/policy_issuer_chain.pem b/config/templates/policy_issuer_chain.pem index 151d4abd6..8a43f97ec 100644 --- a/config/templates/policy_issuer_chain.pem +++ b/config/templates/policy_issuer_chain.pem @@ -1,46 +1,47 @@ -----BEGIN CERTIFICATE----- -MIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw +MIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw dDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy YTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV -TWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw -NTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50 +TWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy +MjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50 YSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ -bmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR -GSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3 -ahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/ -BAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW -gBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1 -0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia -Q9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc= +bmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl +Uy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb +tIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/ +BAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA +xB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG +CCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt +aFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim +3TOl4G9HofEZt+KxtJ2RtWDESw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw +MIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw XzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy YTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB -MB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx +MB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx CzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln VEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp -YXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo -8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1 -ooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S -UoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD -aAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN -hGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l -MSh0m8g8dWtL +YXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX +OeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4 +ARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd +/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD +aAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l +gSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d +zw3fC7CR1QR/ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw +MIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw XzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy YTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB -MB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx +MB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx CzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln VEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux -gnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox -86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD -VR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK -BggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm -XvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R -DrAL9xNFgVm3//brLnWNpVOtcw== +K4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4 +e4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa +avI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD +VR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK +BggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM +mtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7 +HFibzfq7pmApshWt7mQ80fRu/Q== -----END CERTIFICATE----- diff --git a/config/templates/policy_v2.json b/config/templates/policy_v2.json index efb9487c1..3f4f40f14 100644 --- a/config/templates/policy_v2.json +++ b/config/templates/policy_v2.json @@ -1 +1 @@ -{"id":"B87BFE45-9CC7-46F9-8F2C-A6CB55BF7101","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100E903D592DF599196522B27BF9AC5B6DAC650CC092E0E901B9D9DCA85595286E4D324400D022D6B5D5601C8172842D465023100D200B5F89F368BC875B6792AE553B7563E9B4DBFF15220BF04D0E06AA1E2E841A0B74CC118927D3BACB5F54B027C25AD"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw\nNTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR\nGSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3\nahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/\nBAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW\ngBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1\n0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia\nQ9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo\n8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1\nooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S\nUoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD\naAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN\nhGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l\nMSh0m8g8dWtL\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux\ngnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox\n86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD\nVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm\nXvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R\nDrAL9xNFgVm3//brLnWNpVOtcw==\n-----END CERTIFICATE-----\n","servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","issueDate":"2025-01-01T00:00:00Z","isvProdId":1,"mrSigner":"00000000000000000000000000000000","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"isvsvn":1,"tdMeasurements":{"mrtd":"0E200328149B9BAAFD0E68557A426EFF78553D13E2536862EDDD8299A80C986567A8E03CB86F7D3EC75E99F386C3490B","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"C3C3F42541603E01B85F8B5BD89B45A1B386CB76D56182F63AF73589F81B3280D35545FFD3BF3BDBD5649ABD2E3C3C3E"}}],"version":1},"signature":"306502305E23F4D150336BB6CD0C873C63AB7359556DF5260689324DD242EA0F3007A7C37BFADE5C099A3859D7F9C6978A29E077023100911C7AD3F666F8CE8659F7F4F9474CF9D557AEAEA647F3B9549FF434A6589E697D0588F7E82CF87F2F794FC0E305EC51"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw\nNTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR\nGSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3\nahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/\nBAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW\ngBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1\n0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia\nQ9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo\n8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1\nooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S\nUoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD\naAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN\nhGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l\nMSh0m8g8dWtL\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux\ngnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox\n86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD\nVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm\nXvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R\nDrAL9xNFgVm3//brLnWNpVOtcw==\n-----END CERTIFICATE-----\n"}} \ No newline at end of file +{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"}} \ No newline at end of file diff --git a/config/templates/policy_v2_signed.json b/config/templates/policy_v2_signed.json index 31bfc81a4..2edd0606a 100644 --- a/config/templates/policy_v2_signed.json +++ b/config/templates/policy_v2_signed.json @@ -1 +1 @@ -{"policyData":{"id":"B87BFE45-9CC7-46F9-8F2C-A6CB55BF7101","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100E903D592DF599196522B27BF9AC5B6DAC650CC092E0E901B9D9DCA85595286E4D324400D022D6B5D5601C8172842D465023100D200B5F89F368BC875B6792AE553B7563E9B4DBFF15220BF04D0E06AA1E2E841A0B74CC118927D3BACB5F54B027C25AD"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw\nNTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR\nGSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3\nahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/\nBAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW\ngBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1\n0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia\nQ9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo\n8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1\nooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S\nUoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD\naAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN\nhGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l\nMSh0m8g8dWtL\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux\ngnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox\n86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD\nVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm\nXvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R\nDrAL9xNFgVm3//brLnWNpVOtcw==\n-----END CERTIFICATE-----\n","servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","issueDate":"2025-01-01T00:00:00Z","isvProdId":1,"mrSigner":"00000000000000000000000000000000","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"isvsvn":1,"tdMeasurements":{"mrtd":"0E200328149B9BAAFD0E68557A426EFF78553D13E2536862EDDD8299A80C986567A8E03CB86F7D3EC75E99F386C3490B","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"C3C3F42541603E01B85F8B5BD89B45A1B386CB76D56182F63AF73589F81B3280D35545FFD3BF3BDBD5649ABD2E3C3C3E"}}],"version":1},"signature":"306502305E23F4D150336BB6CD0C873C63AB7359556DF5260689324DD242EA0F3007A7C37BFADE5C099A3859D7F9C6978A29E077023100911C7AD3F666F8CE8659F7F4F9474CF9D557AEAEA647F3B9549FF434A6589E697D0588F7E82CF87F2F794FC0E305EC51"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw\nNTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR\nGSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3\nahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/\nBAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW\ngBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1\n0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia\nQ9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo\n8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1\nooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S\nUoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD\naAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN\nhGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l\nMSh0m8g8dWtL\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux\ngnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox\n86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD\nVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm\nXvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R\nDrAL9xNFgVm3//brLnWNpVOtcw==\n-----END CERTIFICATE-----\n"}},"signature":"30640230474DB4EC90C4373CF6B1253CBC6618781C92DC2B8C18362E381FCDE805B8D2DB84E79442D6B72493D37AF7D47F27D86102304756D5C501FF43F97D8468D989B8D0C14C34BA3C1A80DAFF7FCC51789F1CFA9974C2E18E1FDAC23F2A496142E03E0AD3"} \ No newline at end of file +{"policyData":{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"}},"signature":"3065023100C621FF5BCB1C20AC294F2AE46BE90549D8C5CFB7FF1C156D9A58C7EFB4A525B88F4F1909769ECC906A7A7AA01BFDD0F5023034AD6F84B41DC0CD63D2603D3F7FA8FB8D5E17FD30D400C1D48AEAF9C688BD8C6E8AC64D833DF12DC910250A23601CA8"} \ No newline at end of file diff --git a/config/templates/servtd_collateral.json b/config/templates/servtd_collateral.json index 3ef094075..fdd106337 100644 --- a/config/templates/servtd_collateral.json +++ b/config/templates/servtd_collateral.json @@ -1 +1 @@ -{"majorVersion":1,"minorVersion":0,"servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100E903D592DF599196522B27BF9AC5B6DAC650CC092E0E901B9D9DCA85595286E4D324400D022D6B5D5601C8172842D465023100D200B5F89F368BC875B6792AE553B7563E9B4DBFF15220BF04D0E06AA1E2E841A0B74CC118927D3BACB5F54B027C25AD"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw\nNTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR\nGSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3\nahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/\nBAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW\ngBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1\n0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia\nQ9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo\n8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1\nooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S\nUoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD\naAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN\nhGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l\nMSh0m8g8dWtL\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux\ngnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox\n86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD\nVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm\nXvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R\nDrAL9xNFgVm3//brLnWNpVOtcw==\n-----END CERTIFICATE-----\n","servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","issueDate":"2025-01-01T00:00:00Z","isvProdId":1,"mrSigner":"00000000000000000000000000000000","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"isvsvn":1,"tdMeasurements":{"mrtd":"0E200328149B9BAAFD0E68557A426EFF78553D13E2536862EDDD8299A80C986567A8E03CB86F7D3EC75E99F386C3490B","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"C3C3F42541603E01B85F8B5BD89B45A1B386CB76D56182F63AF73589F81B3280D35545FFD3BF3BDBD5649ABD2E3C3C3E"}}],"version":1},"signature":"306502305E23F4D150336BB6CD0C873C63AB7359556DF5260689324DD242EA0F3007A7C37BFADE5C099A3859D7F9C6978A29E077023100911C7AD3F666F8CE8659F7F4F9474CF9D557AEAEA647F3B9549FF434A6589E697D0588F7E82CF87F2F794FC0E305EC51"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICaDCCAe6gAwIBAgIUI42jpwfmZAB+N0e+h+6KCfklh40wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcwMTEwNTA0NFoXDTI3MDcwMTEw\nNTA0NFowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABPwrt1m60ICixce/2ugR\nGSQhPzgWcbe9JYkFB49ttKJRcxluthFr1spPZerKDUwdvvGCHdoqxKT6itswbZS3\nahmVUhAsrXPDmKxDCTizZm7ceyRWZ1k7+wR3rlZTSMRoYqNSMFAwDgYDVR0PAQH/\nBAQDAgeAMB0GA1UdDgQWBBT157AdCLS2hROQ1D6welT+Ajy3TjAfBgNVHSMEGDAW\ngBRVgv61R6StRYHfVgRYfD1ejdJSgTAKBggqhkjOPQQDAwNoADBlAjASRh3kf2O1\n0EOhJiZEelug2E0+qWqN3AydrbGBn2ZJt5g5jUxhoXlcqXFPiBn83XECMQCn6Wia\nQ9PpGUg1E9K9sk22W55z8vDre3VyWkj4nJl4rvk208ugBLWrezdEHasLsOc=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUbqZePdS7UEe0psj4wUNa57MrET0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTMxMDYzMDEwNTA0NFowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdsL/cjUrCPa00GusnZsRjOxo\n8otNIO1a4Ls1rz5Ew7ilQ4X2WNWwNvmwaNY0qFc+MXXSnMY4Q6QmoJesSqCfp5J1\nooXjIB25lYdXl3bxCMrRmvNzDOWHSKrNkFBpm1p+o2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUVYL+tUekrUWB31YEWHw9Xo3S\nUoEwHwYDVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwCgYIKoZIzj0EAwMD\naAAwZQIwP0qNIE1ZMEKV309QREX+zoHgDYp1CgKrRPnCwZSLat80h7GTlYdc8aUN\nhGNhIlzjAjEA52OKlaqU1we3OPeoozPyE+H8gr6tRZSX9GhBVnC1yb/OBX5jLN3l\nMSh0m8g8dWtL\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTquwcbmxr8y1BBPK5eTmYdTB1MwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcwMTEwNTA0NFoXDTM2MDYyODEwNTA0NFowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEOApWwQJHtYcFaq0EHH058knEo3Hz6kMqHiuiaB9XUttM1PGvwrux\ngnxq1SNp8tfXDQlmjXP/m1TJ+BdFX+9cqSG26/W7doazDHW1MNRir4E/v4mMzIox\n86pnu7/7oTnvo1MwUTAdBgNVHQ4EFgQUCtxBCuwlgOzy1VZm81dXlo69pNgwHwYD\nVR0jBBgwFoAUCtxBCuwlgOzy1VZm81dXlo69pNgwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBGru+cELo1WJH/pxCN1q0adDrhJavW2yVm1A6UbZYm\nXvKKVqOsgSf/fhMRGb/htQ8CMBkFmbplQzY3SVlkTT8aBfNq3a1yNZJRw5HQUz9R\nDrAL9xNFgVm3//brLnWNpVOtcw==\n-----END CERTIFICATE-----\n"} \ No newline at end of file +{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"} \ No newline at end of file diff --git a/config/templates/tcb_mapping.json b/config/templates/tcb_mapping.json index 82e3fd452..6104aa184 100644 --- a/config/templates/tcb_mapping.json +++ b/config/templates/tcb_mapping.json @@ -1 +1 @@ -{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","issueDate":"2025-01-01T00:00:00Z","isvProdId":1,"mrSigner":"00000000000000000000000000000000","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"isvsvn":1,"tdMeasurements":{"mrtd":"0E200328149B9BAAFD0E68557A426EFF78553D13E2536862EDDD8299A80C986567A8E03CB86F7D3EC75E99F386C3490B","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"C3C3F42541603E01B85F8B5BD89B45A1B386CB76D56182F63AF73589F81B3280D35545FFD3BF3BDBD5649ABD2E3C3C3E"}}],"version":1} \ No newline at end of file +{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]} \ No newline at end of file diff --git a/config/templates/tcb_mapping_seed.json b/config/templates/tcb_mapping_seed.json new file mode 100644 index 000000000..44562f229 --- /dev/null +++ b/config/templates/tcb_mapping_seed.json @@ -0,0 +1 @@ +{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[]} diff --git a/config/templates/tcb_mapping_signed.json b/config/templates/tcb_mapping_signed.json index de339aed6..48fa4663a 100644 --- a/config/templates/tcb_mapping_signed.json +++ b/config/templates/tcb_mapping_signed.json @@ -1 +1 @@ -{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","issueDate":"2025-01-01T00:00:00Z","isvProdId":1,"mrSigner":"00000000000000000000000000000000","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"isvsvn":1,"tdMeasurements":{"mrtd":"0E200328149B9BAAFD0E68557A426EFF78553D13E2536862EDDD8299A80C986567A8E03CB86F7D3EC75E99F386C3490B","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"C3C3F42541603E01B85F8B5BD89B45A1B386CB76D56182F63AF73589F81B3280D35545FFD3BF3BDBD5649ABD2E3C3C3E"}}],"version":1},"signature":"306502305E23F4D150336BB6CD0C873C63AB7359556DF5260689324DD242EA0F3007A7C37BFADE5C099A3859D7F9C6978A29E077023100911C7AD3F666F8CE8659F7F4F9474CF9D557AEAEA647F3B9549FF434A6589E697D0588F7E82CF87F2F794FC0E305EC51"} \ No newline at end of file +{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"} \ No newline at end of file diff --git a/config/templates/td_identity.json b/config/templates/td_identity.json index bba297175..5f35f2f56 100644 --- a/config/templates/td_identity.json +++ b/config/templates/td_identity.json @@ -1 +1 @@ -{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]} \ No newline at end of file +{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]} \ No newline at end of file diff --git a/config/templates/td_identity_signed.json b/config/templates/td_identity_signed.json index 30b23e719..2a11b235f 100644 --- a/config/templates/td_identity_signed.json +++ b/config/templates/td_identity_signed.json @@ -1 +1 @@ -{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100E903D592DF599196522B27BF9AC5B6DAC650CC092E0E901B9D9DCA85595286E4D324400D022D6B5D5601C8172842D465023100D200B5F89F368BC875B6792AE553B7563E9B4DBFF15220BF04D0E06AA1E2E841A0B74CC118927D3BACB5F54B027C25AD"} \ No newline at end of file +{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"} \ No newline at end of file diff --git a/deps/td-shim-AzCVMEmu/td-shim-interface/src/file_ops.rs b/deps/td-shim-AzCVMEmu/td-shim-interface/src/file_ops.rs index 1327ebab5..df44b07c3 100644 --- a/deps/td-shim-AzCVMEmu/td-shim-interface/src/file_ops.rs +++ b/deps/td-shim-AzCVMEmu/td-shim-interface/src/file_ops.rs @@ -156,3 +156,18 @@ pub fn init_file_based_emulation_with_policy_chain( crate::td_uefi_pi::fv::load_policy_issuer_chain_from_file(policy_issuer_chain_path); policy_loaded && chain_loaded } + +/// Initialize policy-v2 emulation with the CoRIM-only release inputs +#[cfg(feature = "policy_v2")] +pub fn init_file_based_emulation_with_corim( + policy_path: &str, + servtd_signer_anchor_path: &str, + servtd_corim_path: &str, +) -> bool { + crate::td_uefi_pi::fv::set_file_reader(real_file_reader); + let policy_loaded = crate::td_uefi_pi::fv::load_policy_from_file(policy_path); + let anchor_loaded = + crate::td_uefi_pi::fv::load_servtd_signer_anchor_from_file(servtd_signer_anchor_path); + let corim_loaded = crate::td_uefi_pi::fv::load_servtd_corim_from_file(servtd_corim_path); + policy_loaded && anchor_loaded && corim_loaded +} diff --git a/deps/td-shim-AzCVMEmu/td-shim-interface/src/lib.rs b/deps/td-shim-AzCVMEmu/td-shim-interface/src/lib.rs index 90e80cae2..88604c1e6 100644 --- a/deps/td-shim-AzCVMEmu/td-shim-interface/src/lib.rs +++ b/deps/td-shim-AzCVMEmu/td-shim-interface/src/lib.rs @@ -41,12 +41,16 @@ pub mod td_uefi_pi; // Re-export key functions for convenience pub use td_uefi_pi::fv::{ - load_policy_from_file, load_root_ca_from_file, set_policy_data, set_root_ca_data, + load_policy_from_file, load_root_ca_from_file, load_servtd_corim_from_file, + load_servtd_signer_anchor_from_file, set_policy_data, set_root_ca_data, + set_servtd_corim_data, set_servtd_signer_anchor_data, }; #[cfg(feature = "policy_v2")] pub use td_uefi_pi::fv::load_policy_issuer_chain_from_file; #[cfg(feature = "policy_v2")] -pub use file_ops::init_file_based_emulation_with_policy_chain; +pub use file_ops::{ + init_file_based_emulation_with_corim, init_file_based_emulation_with_policy_chain, +}; pub use file_ops::init_file_based_emulation_with_real_files; diff --git a/deps/td-shim-AzCVMEmu/td-shim-interface/src/td_uefi_pi/fv.rs b/deps/td-shim-AzCVMEmu/td-shim-interface/src/td_uefi_pi/fv.rs index 366e1c36c..b319e11f8 100644 --- a/deps/td-shim-AzCVMEmu/td-shim-interface/src/td_uefi_pi/fv.rs +++ b/deps/td-shim-AzCVMEmu/td-shim-interface/src/td_uefi_pi/fv.rs @@ -4,11 +4,11 @@ // SPDX-License-Identifier: BSD-2-Clause-Patent //! Firmware Volume emulation -//! Provides file-based emulation for policy and root CA files in migtd +//! Provides file-based emulation for MigTD configuration-volume files use crate::td_uefi_pi::pi::fv::FV_FILETYPE_RAW; use core::ptr; -use core::sync::atomic::{AtomicBool, Ordering}; +use core::sync::atomic::{AtomicBool, AtomicU8, Ordering}; use r_efi::efi::Guid; // Static buffers to store emulated files @@ -25,7 +25,20 @@ static mut POLICY_ISSUER_CHAIN_BUFFER: [u8; 8192] = [0; 8192]; // 8KB for policy static mut POLICY_ISSUER_CHAIN_SIZE: usize = 0; static POLICY_ISSUER_CHAIN_INITIALIZED: AtomicBool = AtomicBool::new(false); -/// Known GUIDs for policy and root CA files in migtd +static mut SERVTD_SIGNER_ANCHOR_BUFFER: [u8; 48] = [0; 48]; +static mut SERVTD_SIGNER_ANCHOR_SIZE: usize = 0; +static SERVTD_SIGNER_ANCHOR_STATE: AtomicU8 = AtomicU8::new(FILE_UNINITIALIZED); + +const SERVTD_CORIM_BUFFER_SIZE: usize = 1024 * 1024; +static mut SERVTD_CORIM_BUFFER: [u8; SERVTD_CORIM_BUFFER_SIZE] = [0; SERVTD_CORIM_BUFFER_SIZE]; +static mut SERVTD_CORIM_SIZE: usize = 0; +static SERVTD_CORIM_STATE: AtomicU8 = AtomicU8::new(FILE_UNINITIALIZED); + +const FILE_UNINITIALIZED: u8 = 0; +const FILE_INITIALIZING: u8 = 1; +const FILE_READY: u8 = 2; + +/// Known GUIDs for configuration-volume files in MigTD const MIGTD_POLICY_FFS_GUID: Guid = Guid::from_fields( 0x0BE92DC3, 0x6221, @@ -54,6 +67,26 @@ pub const MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID: Guid = Guid::from_fields( &[0xD3, 0xEA, 0xB3, 0x9F, 0x8A, 0xEB], ); +// {2B9D5A84-6F3C-4E71-8A2D-0C7E1F4B6A93} +pub const MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID: Guid = Guid::from_fields( + 0x2B9D5A84, + 0x6F3C, + 0x4E71, + 0x8A, + 0x2D, + &[0x0C, 0x7E, 0x1F, 0x4B, 0x6A, 0x93], +); + +// {7E5B9C11-2D4A-4F6E-9B3C-1A2B3C4D5E6F} +pub const MIGTD_SERVTD_CORIM_FFS_GUID: Guid = Guid::from_fields( + 0x7E5B9C11, + 0x2D4A, + 0x4F6E, + 0x9B, + 0x3C, + &[0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F], +); + /// Set policy data for emulation pub fn set_policy_data(data: &[u8]) -> bool { unsafe { @@ -63,7 +96,7 @@ pub fn set_policy_data(data: &[u8]) -> bool { } let policy_size_ptr = ptr::addr_of_mut!(POLICY_SIZE); - (*policy_buffer_ptr)[..data.len()].copy_from_slice(data); + (&mut (*policy_buffer_ptr))[..data.len()].copy_from_slice(data); *policy_size_ptr = data.len(); } POLICY_INITIALIZED.store(true, Ordering::SeqCst); @@ -79,7 +112,7 @@ pub fn set_root_ca_data(data: &[u8]) -> bool { } let root_ca_size_ptr = ptr::addr_of_mut!(ROOT_CA_SIZE); - (*root_ca_buffer_ptr)[..data.len()].copy_from_slice(data); + (&mut (*root_ca_buffer_ptr))[..data.len()].copy_from_slice(data); *root_ca_size_ptr = data.len(); } ROOT_CA_INITIALIZED.store(true, Ordering::SeqCst); @@ -95,13 +128,67 @@ pub fn set_policy_issuer_chain_data(data: &[u8]) -> bool { } let chain_size_ptr = ptr::addr_of_mut!(POLICY_ISSUER_CHAIN_SIZE); - (*chain_buffer_ptr)[..data.len()].copy_from_slice(data); + (&mut (*chain_buffer_ptr))[..data.len()].copy_from_slice(data); *chain_size_ptr = data.len(); } POLICY_ISSUER_CHAIN_INITIALIZED.store(true, Ordering::SeqCst); true } +/// Set the 48-byte ServTD signer anchor for emulation +pub fn set_servtd_signer_anchor_data(data: &[u8]) -> bool { + if data.len() != 48 { + return false; + } + if SERVTD_SIGNER_ANCHOR_STATE + .compare_exchange( + FILE_UNINITIALIZED, + FILE_INITIALIZING, + Ordering::AcqRel, + Ordering::Acquire, + ) + .is_err() + { + return false; + } + + unsafe { + let anchor_buffer_ptr = ptr::addr_of_mut!(SERVTD_SIGNER_ANCHOR_BUFFER); + let anchor_size_ptr = ptr::addr_of_mut!(SERVTD_SIGNER_ANCHOR_SIZE); + (*anchor_buffer_ptr).copy_from_slice(data); + *anchor_size_ptr = data.len(); + } + SERVTD_SIGNER_ANCHOR_STATE.store(FILE_READY, Ordering::Release); + true +} + +/// Set the signed ServTD CoRIM for emulation +pub fn set_servtd_corim_data(data: &[u8]) -> bool { + if data.is_empty() || data.len() > SERVTD_CORIM_BUFFER_SIZE { + return false; + } + if SERVTD_CORIM_STATE + .compare_exchange( + FILE_UNINITIALIZED, + FILE_INITIALIZING, + Ordering::AcqRel, + Ordering::Acquire, + ) + .is_err() + { + return false; + } + + unsafe { + let corim_buffer_ptr = ptr::addr_of_mut!(SERVTD_CORIM_BUFFER); + let corim_size_ptr = ptr::addr_of_mut!(SERVTD_CORIM_SIZE); + (&mut (*corim_buffer_ptr))[..data.len()].copy_from_slice(data); + *corim_size_ptr = data.len(); + } + SERVTD_CORIM_STATE.store(FILE_READY, Ordering::Release); + true +} + // File reader function type type FileReader = fn(&str) -> Option<Vec<u8>>; @@ -155,12 +242,40 @@ pub fn load_policy_issuer_chain_from_file(path: &str) -> bool { false } -/// Get a file from firmware volume - emulated version supporting policy and root CA files +/// Load the ServTD signer anchor from a file path +pub fn load_servtd_signer_anchor_from_file(path: &str) -> bool { + unsafe { + let file_reader_ptr = ptr::addr_of!(FILE_READER); + if let Some(reader) = *file_reader_ptr { + if let Some(data) = reader(path) { + return set_servtd_signer_anchor_data(&data); + } + } + } + false +} + +/// Load the signed ServTD CoRIM from a file path +pub fn load_servtd_corim_from_file(path: &str) -> bool { + unsafe { + let file_reader_ptr = ptr::addr_of!(FILE_READER); + if let Some(reader) = *file_reader_ptr { + if let Some(data) = reader(path) { + return set_servtd_corim_data(&data); + } + } + } + false +} + +/// Get a file from the emulated firmware volume /// /// This implementation supports common files needed by migtd: /// - Policy files (using MIGTD_POLICY_FFS_GUID) /// - Root CA files (using MIGTD_ROOT_CA_FFS_GUID) /// - Policy issuer chain files (using MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID) +/// - ServTD signer anchor (using MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID) +/// - Signed ServTD CoRIM (using MIGTD_SERVTD_CORIM_FFS_GUID) /// /// Other files will return None pub fn get_file_from_fv( @@ -177,19 +292,37 @@ pub fn get_file_from_fv( unsafe { let policy_buffer_ptr = ptr::addr_of!(POLICY_BUFFER); let policy_size_ptr = ptr::addr_of!(POLICY_SIZE); - Some(&(*policy_buffer_ptr)[..*policy_size_ptr]) + Some(&(&(*policy_buffer_ptr))[..*policy_size_ptr]) } } else if file_name == MIGTD_ROOT_CA_FFS_GUID && ROOT_CA_INITIALIZED.load(Ordering::SeqCst) { unsafe { let root_ca_buffer_ptr = ptr::addr_of!(ROOT_CA_BUFFER); let root_ca_size_ptr = ptr::addr_of!(ROOT_CA_SIZE); - Some(&(*root_ca_buffer_ptr)[..*root_ca_size_ptr]) + Some(&(&(*root_ca_buffer_ptr))[..*root_ca_size_ptr]) } - } else if file_name == MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID && POLICY_ISSUER_CHAIN_INITIALIZED.load(Ordering::SeqCst) { + } else if file_name == MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID + && POLICY_ISSUER_CHAIN_INITIALIZED.load(Ordering::SeqCst) + { unsafe { let chain_buffer_ptr = ptr::addr_of!(POLICY_ISSUER_CHAIN_BUFFER); let chain_size_ptr = ptr::addr_of!(POLICY_ISSUER_CHAIN_SIZE); - Some(&(*chain_buffer_ptr)[..*chain_size_ptr]) + Some(&(&(*chain_buffer_ptr))[..*chain_size_ptr]) + } + } else if file_name == MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID + && SERVTD_SIGNER_ANCHOR_STATE.load(Ordering::Acquire) == FILE_READY + { + unsafe { + let anchor_buffer_ptr = ptr::addr_of!(SERVTD_SIGNER_ANCHOR_BUFFER); + let anchor_size_ptr = ptr::addr_of!(SERVTD_SIGNER_ANCHOR_SIZE); + Some(&(&(*anchor_buffer_ptr))[..*anchor_size_ptr]) + } + } else if file_name == MIGTD_SERVTD_CORIM_FFS_GUID + && SERVTD_CORIM_STATE.load(Ordering::Acquire) == FILE_READY + { + unsafe { + let corim_buffer_ptr = ptr::addr_of!(SERVTD_CORIM_BUFFER); + let corim_size_ptr = ptr::addr_of!(SERVTD_CORIM_SIZE); + Some(&(&(*corim_buffer_ptr))[..*corim_size_ptr]) } } else { None diff --git a/deps/td-shim-AzCVMEmu/tdx-tdcall/src/tdx_emu.rs b/deps/td-shim-AzCVMEmu/tdx-tdcall/src/tdx_emu.rs index 7b2b95f41..c82ee1d3a 100644 --- a/deps/td-shim-AzCVMEmu/tdx-tdcall/src/tdx_emu.rs +++ b/deps/td-shim-AzCVMEmu/tdx-tdcall/src/tdx_emu.rs @@ -72,7 +72,6 @@ pub enum EmuMigRequest { }, GetTDReport { request_id: u64, - reportdata: [u8; 64], }, EnableLogArea { request_id: u64, @@ -120,14 +119,9 @@ pub fn set_emulated_start_migration( log_max_level: 3, }); - // Step 2: Queue GetTDReport with default reportdata - let mut reportdata = [0u8; 64]; - reportdata[0..8].copy_from_slice(&request_id.to_le_bytes()); - reportdata[8..23].copy_from_slice(b"MIGTD_MIGRATION"); // 15 bytes - reportdata[23] = 0; // Null terminator + // Step 2: Queue GetTDReport set_emulated_mig_request(EmuMigRequest::GetTDReport { request_id: get_report_request_id, - reportdata, }); // Step 3: Queue the StartMigration request with original request_id @@ -137,12 +131,16 @@ pub fn set_emulated_start_migration( target_td_uuid, binding_handle, }); + + // Migration reads SERVTD_EXT just like rebinding. Populate the emulated + // target-TD fields so policy-v2 can authenticate init/current SVN order. + populate_servtd_fields(binding_handle, target_td_uuid); } /// Helper: Set a GetTDReport request /// Automatically queues EnableLogArea request first, then the report request /// Uses request_id for report, and request_id | 0x8000_0000_0000_0000 for EnableLogArea -pub fn set_emulated_get_report_data(request_id: u64, reportdata: [u8; 64]) { +pub fn set_emulated_get_td_report(request_id: u64) { // Use high-bit set for EnableLogArea to distinguish from main request let enable_log_request_id = request_id | 0x8000_0000_0000_0000; @@ -153,10 +151,7 @@ pub fn set_emulated_get_report_data(request_id: u64, reportdata: [u8; 64]) { }); // Then queue the GetTDReport request with original request_id - set_emulated_mig_request(EmuMigRequest::GetTDReport { - request_id, - reportdata, - }); + set_emulated_mig_request(EmuMigRequest::GetTDReport { request_id }); } /// Helper: Set an EnableLogArea request @@ -234,18 +229,12 @@ fn populate_servtd_fields(binding_handle: u64, target_td_uuid: [u64; 4]) { core::mem::size_of_val(&report.tdinfo), ) }; - let info_hash: [u8; 48] = Sha384::digest(td_info_bytes).into(); + // Per TDX module spec: init_servtd_info_hash = SHA384(TDINFO masked by + // servtd_attr). With servtd_attr=0 (production), no masking is applied. + let servtd_info_hash: [u8; 48] = Sha384::digest(td_info_bytes).into(); - const SERVTD_TYPE_MIGTD: u16 = 0; let servtd_attr: u64 = 0; - let mut buffer = [0u8; 48 + 2 + 8]; - buffer[..48].copy_from_slice(&info_hash); - buffer[48..50].copy_from_slice(&SERVTD_TYPE_MIGTD.to_le_bytes()); - buffer[50..58].copy_from_slice(&servtd_attr.to_le_bytes()); - - let servtd_info_hash: [u8; 48] = Sha384::digest(&buffer).into(); - let write_field = |field_base: u64, data: &[u8], elem_size: usize| { for (idx, chunk) in data.chunks(elem_size).enumerate() { let mut bytes = [0u8; 8]; @@ -571,7 +560,8 @@ pub fn tdvmcall_migtd_waitforrequest( const HEADER_LEN: usize = 12; // GHCI 1.5 header: 8-byte status + 4-byte length const START_MIGRATION_PAYLOAD_LEN: usize = 56; // MigtdMigrationInformation size - const REPORT_DATA_PAYLOAD_LEN: usize = 72; // ReportInfo size (8 + 64) + const GET_TD_REPORT_PAYLOAD_LEN: usize = 8; // ReportInfo size (request ID only) + const MIGTD_DATA_PAYLOAD_LEN: usize = 72; // MigtdDataInfo size (8 + 64) const ENABLE_LOG_AREA_PAYLOAD_LEN: usize = 16; // EnableLogAreaInfo size (8 + 1 + 7 reserved) // Take the first emulated request from the queue; if none, do not signal and let caller poll again @@ -635,19 +625,16 @@ pub fn tdvmcall_migtd_waitforrequest( migration_source ); } - EmuMigRequest::GetTDReport { - request_id, - reportdata, - } => { + EmuMigRequest::GetTDReport { request_id } => { // DataStatusOperation::GetTDReport = 3 let status = 0x0000_0000_0000_0301u64; // byte[0]=1 (success), byte[1]=3 (GetTDReport) - let length = REPORT_DATA_PAYLOAD_LEN as u32; + let length = GET_TD_REPORT_PAYLOAD_LEN as u32; - if data_buffer.len() < HEADER_LEN + REPORT_DATA_PAYLOAD_LEN { + if data_buffer.len() < HEADER_LEN + GET_TD_REPORT_PAYLOAD_LEN { error!( "waitforrequest buffer too small for GetTDReport: have={} need={}", data_buffer.len(), - HEADER_LEN + REPORT_DATA_PAYLOAD_LEN + HEADER_LEN + GET_TD_REPORT_PAYLOAD_LEN ); return Err(TdVmcallError::Other); } @@ -656,16 +643,14 @@ pub fn tdvmcall_migtd_waitforrequest( data_buffer[8..12].copy_from_slice(&length.to_le_bytes()); // Fill ReportInfo payload - let payload = &mut data_buffer[HEADER_LEN..HEADER_LEN + REPORT_DATA_PAYLOAD_LEN]; + let payload = &mut data_buffer[HEADER_LEN..HEADER_LEN + GET_TD_REPORT_PAYLOAD_LEN]; // mig_request_id payload[0..8].copy_from_slice(&request_id.to_le_bytes()); - // reportdata [u8; 64] - payload[8..72].copy_from_slice(&reportdata); log::info!( - "tdvmcall_migtd_waitforrequest: GetTDReport request_id={} reportdata[0..8]={:02x?}", - request_id, &reportdata[0..8] + "tdvmcall_migtd_waitforrequest: GetTDReport request_id={}", + request_id ); } EmuMigRequest::EnableLogArea { @@ -776,13 +761,13 @@ pub fn tdvmcall_migtd_waitforrequest( } => { // DataStatusOperation::GetMigtdData = 5 let status = 0x0000_0000_0000_0501u64; // byte[0]=1 (success), byte[1]=5 (GetMigtdData) - let length = REPORT_DATA_PAYLOAD_LEN as u32; + let length = MIGTD_DATA_PAYLOAD_LEN as u32; - if data_buffer.len() < HEADER_LEN + REPORT_DATA_PAYLOAD_LEN { + if data_buffer.len() < HEADER_LEN + MIGTD_DATA_PAYLOAD_LEN { error!( "waitforrequest buffer too small for GetMigtdData: have={} need={}", data_buffer.len(), - HEADER_LEN + REPORT_DATA_PAYLOAD_LEN + HEADER_LEN + MIGTD_DATA_PAYLOAD_LEN ); return Err(TdVmcallError::Other); } @@ -790,7 +775,7 @@ pub fn tdvmcall_migtd_waitforrequest( data_buffer[0..8].copy_from_slice(&status.to_le_bytes()); data_buffer[8..12].copy_from_slice(&length.to_le_bytes()); - let payload = &mut data_buffer[HEADER_LEN..HEADER_LEN + REPORT_DATA_PAYLOAD_LEN]; + let payload = &mut data_buffer[HEADER_LEN..HEADER_LEN + MIGTD_DATA_PAYLOAD_LEN]; // mig_request_id payload[0..8].copy_from_slice(&request_id.to_le_bytes()); diff --git a/doc/MigTD_Functionality_Summary.md b/doc/MigTD_Functionality_Summary.md new file mode 100644 index 000000000..6920f00c4 --- /dev/null +++ b/doc/MigTD_Functionality_Summary.md @@ -0,0 +1,344 @@ +# MigTD — Implemented Functionality Summary (Azure Build) + +A high-level summary of the **main functionalities** implemented in this MigTD +(Migration TD) codebase, focused on the **Azure TDX CVM build configuration**. +MigTD is a no_std Rust TDX **Service TD** that evaluates whether a migration +source and destination platform both satisfy the TD Migration Policy, then +securely transfers the **Migration Session Key (MSK)** between them so the VMM +can live-migrate a user TD. + +> **Focus / scope.** This document describes the **Azure build**, which uses: +> - **IGVM** image format +> - **`igvm-attest`** for quote retrieval (attestation) +> - **`vmcall-raw`** for the GHCI guest–host channel +> - **SPDM** as the mutual-attestation / secure-session protocol +> - **policy v2** (RTMR2-bound policyData + signed ServTD endorsements) +> +> Build feature set (`sh_script/Azure/Makefile`): +> `vmcall-raw, stack-guard, main, vmcall-interrupt, oneshot-apic, +> spdm_attestation, igvm-attest` built with `--image-format igvm --policy-v2`. +> +> Non-Azure options (RA-TLS, virtio/vsock transports, `bin` image format) are +> out of scope. The Azure one-hash JSON and CoRIM endorsement paths are covered. + +--- + +## 1. Overview & Role + +- MigTD runs as a TDX Service TD (`SERVTD_TYPE = 0`) bound to a user TD via + `TDH.SERVTD.BIND` / `TDH.SERVTD.PREBIND`. +- It is the migration-policy decision point: the source MigTD (MigTD-S) and the + destination MigTD (MigTD-D) **mutually remote-attest** each other over SPDM, + check each other against policy v2, and only then exchange the MSK. +- Built for `x86_64-unknown-none` on top of the **td-shim** payload framework and + packaged as an **IGVM** image for Azure. It can also be built as a normal + user-space app for Azure CVM emulation (**AzCVMEmu**). +- Entry point: `src/migtd/src/lib.rs` (`_start`) → runtime init → `main()` in + `src/migtd/src/bin/migtd/main.rs`. + +--- + +## 2. End-to-End Migration Flow + +Orchestrated in `src/migtd/src/bin/migtd/main.rs` and +`src/migtd/src/migration/session.rs`: + +1. **Boot & self-measurement** (`do_measurements`): read policyData and its + PEM-derived or direct signer anchor from the Configuration Firmware Volume + (CFV), verify inner endorsements, and extend RTMR1/RTMR2 through the CCEL + event log. +2. **VMM logging init** (`init_vmm_logger`, `create_logarea`): set up per-vCPU + log areas for the `vmcall-raw` channel. +3. **Wait for request** (`wait_for_request`): receive a request from the VMM over + the `vmcall-raw` GHCI channel. An async dispatcher supports up to **12 + concurrent** requests. +4. **Dispatch** by request type (see §3) — for a migration, `exchange_msk` sets + up the transport, performs the SPDM mutual attestation, negotiates the + migration version, and exchanges the MSK. +5. **Write MSK & report status** (`write_msk`, `report_status`): write the MSK + into the TDX module and report success/error back to the VMM. + +### MSK handling +- `MigrationSessionKey` = 4 × `u64`, **zeroize-on-drop** + (`src/migtd/src/migration/data.rs`). +- Read from the TDX module via `tdcall_servtd_rd` (`TDCS_FIELD_MIG_ENC_KEY`), + written via `tdcall_servtd_wr` (`TDCS_FIELD_MIG_DEC_KEY`) + (`session.rs: read_msk` / `write_msk`). +- **Migration version negotiation** (`exchange_info`, `cal_mig_version`, + `set_mig_version`) reads the TDX-module export/import min/max version fields and + computes a common version. The forward/backward MSK and versions are carried + inside the SPDM session. + +--- + +## 3. MigTD ↔ VMM Interface (`vmcall-raw` GHCI) + +Implemented in `src/migtd/src/migration/{data.rs, session.rs, event.rs}`: + +- Guest–host communication uses the **`vmcall-raw`** channel (TDVMCALL), with a + shared **request/response data buffer** (`RequestDataBuffer` / + `RequestDataBufferHeader { datastatus, length }`). +- Event-driven notification via `SetupEventNotifyInterrupt` (interrupt vector + `0x50`, `event.rs`). +- Request set (`WaitForRequestResponse`): + - `StartMigration` — run the MSK key-exchange flow. + - `StartRebinding` — approve rebinding the user TD to a new MigTD (policy v2). + - `GetTdReport` — return a TD report using MigTD's fixed report data; the + canonical request payload is the 8-byte migration request ID. + **REVERT_ME (OS-transition testing only):** temporarily also accept the + legacy 72-byte payload with a trailing 64-byte `REPORT_DATA`. That tail + is discarded silently, never stored or used to generate the report. + Remove this compatibility path once older test OS versions are retired. + - `EnableLogArea` — enable/raise the VMM log level for a request. + - `GetMigtdData` — return MigTD attestation data (policy v2). +- `ReportStatus` returns the per-request result (`ReportStatusResponse` carries + the pre-migration status + error code). +- **Guest-crash reporting**: fatal init/runtime failures call + `panic_with_guest_crash_reg_report`, surfacing a crash code/message to the VMM + via MSR (`driver/crash.rs`, `driver/vmcall_raw.rs`). +- HOB parsing for migration information and policy (`data.rs: read_mig_info`). + +--- + +## 4. Remote Attestation (`igvm-attest`) + +### Quote generation (`src/attestation/src/igvmattest.rs`, `quote.rs`) +- Produce a TD report (`tdcall_report`) over the report data, then obtain a quote + through the **IGVM attest** path: + - `get_quote_igvm` builds a `ServtdTdxQuoteHdr` + the TD report into a 16-page + shared request buffer and calls `servtd_get_quote` (GHCI `GetQuote` via + TDVMCALL); the VMM fills in the quote, which is then extracted. + - `get_quote_with_retry` retries `Busy` with exponential backoff. + +### Quote verification (`src/attestation/src/attest.rs`) +- Wraps the Intel attestation verification library via FFI. The Azure build (via + policy v2 → `attest-lib-ext`) uses **`verify_quote_integrity_ex`** with the + **collateral** (`QveCollateral`) sourced from **Azure THIM** + (`config/Azure/collateral_thim.json`). +- Verifies against the enrolled Intel SGX root CA public key + (`attestation::root_ca`), returning an 822-byte verified TD report block that + policy evaluation consumes. + +### Measurement & Event Log (`src/migtd/src/event_log.rs`) +- `write_tagged_event_log`: SHA-384 of measured data → `tdcall_extend_rtmr` → + append a tagged CCEL event. +- Measured items: the root+EKU **signer anchor** in RTMR1 and canonical + **`policyData`** in RTMR2. JSON packaging redacts the TCB mapping and mapping + issuer chain; CoRIM-only policyData is measured in full. +- `verify_event_log` replays the event log against the RTMRs from the verified + quote (bypassed under `AzCVMEmu` / `use-mock-quote` test builds). + +--- + +## 5. Mutual Attestation & Secure Session (**SPDM**) + +The `spdm_attestation` feature makes **SPDM** the mutual-attestation and +secure-session protocol that carries both the attestation evidence and the MSK +exchange (`src/migtd/src/spdm/`, `migration/spdm_session.rs`): + +- **SPDM 1.2** over `spdm-rs` (`spdmlib` with `spdm-ring`): ECDSA P-384 / + SHA-384 / SECP384R1 / AES-256-GCM, **mutual authentication**, key exchange, + public-key-ID auth, chunking. +- Requester = MigTD-S, Responder = MigTD-D, both driven through + `finalize_spdm_session` (60-second timeout). The SPDM transport is VMM-mediated + via `MigtdTransport` implementing `SpdmDeviceIo` over the `vmcall-raw` channel. +- Attestation material, policy, versions and keys are exchanged via + **vendor-defined messages (VDM)**: + - `ExchangePubKey` — provision peer public keys before attestation. + - `ExchangeMigrationAttestInfo` — exchange **quote**, **event log**, **policy + hash**, and **SERVTD_EXT**. The legacy Init_TDINFO wire field remains only + for framing compatibility and is ignored. + - `ExchangeMigrationInfo` — exchange migration export/import versions and the + **forward/backward Migration Session Key**. + - plus **rebind** variants for the `StartRebinding` flow. +- Security hygiene: the session is torn down on policy-hash mismatch and the + requester app-context buffer is zeroized on all paths. + +### Pre-session policy exchange +Because policy + issuer-chain data can exceed the secure-session message size, +they are exchanged up-front via `pre_session_data_exchange` +(`migration/pre_session_data.rs`, 60-second timeout) and then bound during SPDM +attestation. + +--- + +## 6. Migration Policy (v2) + +Implemented in `src/policy/` and `src/migtd/src/mig_policy.rs`; policyData is +enrolled into the image and measured into RTMR2 at boot. + +### What it enforces +- Platform/quote collateral: FMSPC, TCB info, TCB status & date, TCB evaluation + data number, PCK/root-CA CRLs, QE identity, TDX-module identity (from THIM + collateral). +- MigTD/ServTD identity: TD `ATTRIBUTES`, `XFAM`, `MRTD`, `MRCONFIGID`, + `MROWNER`, `MROWNERCONFIG`, `RTMR0–3` from the verified report. + +### Policy v2 structure & verification +- Canonical `policyData`, a PEM-derived or direct **RTMR1 signer anchor**, and + either signed JSON ServTD collateral or a signed TCB-mapping CoRIM. +- The legacy outer `policyData` signature is ignored. Runtime: + `init_policy` verifies RTMR2 integrity and inner JSON/CoRIM endorsements; + `authenticate_remote*` verifies quote/TDREPORT evidence, event-log integrity, + signer-anchor compatibility, and TCB relationships. +- **Measurement binding:** RTMR1 ← root+EKU signer anchor; RTMR2 ← canonical + `policyData`. JSON policyData redacts only `servtdTcbMapping` and + `servtdTcbMappingIssuerChain`; CoRIM-only policyData is measured in full. The + same bytes are reproduced offline by `migtd-hash --policy-v2`. +- Migration continuity: MigTD resolves the authenticated source's initial and + current `SERVTD_INFO_HASH` values through the source's verified one-hash + mapping and requires the mapped initial SVN not to exceed the current SVN. + There is no separate local TDINFO-to-policy-SVN startup check. +- See `doc/policy_v2.md` and `doc/policy_v2_measurements.md`. + +--- + +## 7. TD Binding, Pre-binding & Rebinding + +- **Binding / pre-binding** (`readme.md`): MigTD is bound to a user TD by process + ID (`TDH.SERVTD.BIND`) or pre-bound by `SERVTD_INFO_HASH` + (`TDH.SERVTD.PREBIND`). +- **`verify_servtd_attr`** validates `SERVTD_ATTR` against a hardcoded expected + value to defend against a malicious VMM. +- **SERVTD_EXT** (`migration/servtd_ext.rs`): optional extended Service-TD + binding info (gated on TDCS `ATTRIBUTES` bit 17) — init SERVTD info hash, init + attributes, CPUSVN, and TEE TCB SVN. +- **Rebinding** (`migration/rebinding.rs`): the `StartRebinding` flow approves + rebinding a user TD to a new MigTD on the destination using + `tdcall_servtd_rebind_approve` and a rebind accept token. + +--- + +## 8. Guest–Host Transport (`vmcall-raw`) + +- The migration channel uses the **`vmcall-raw`** transport — a raw migration + channel built directly on TDVMCALL/VMCALL (`src/devices/vmcall_raw`, + `migration/transport.rs`). +- A transport abstraction (`setup_transport` / `shutdown_transport`) keeps the + session code transport-agnostic; the Azure build selects `vmcall-raw` + (`VmcallRaw::new_with_mid(...).connect()`). +- An **8-second** connection timeout is enforced after a migration is triggered. + +--- + +## 9. Cryptography (`src/crypto`) + +- Provides the primitives used by SPDM and policy v2: **ECDSA P-384 / SHA-384** + sign/verify (via `ring`), **SHA-384** hashing, secure random. +- X.509 / PEM handling: PEM↔DER, minimal cert builder, chain split/validation, + signature verification, **COSE_Sign1 (ES384 + x5chain)** verification, and CRL + number parsing — used to validate signed ServTD endorsements and their + issuer chains. + +--- + +## 10. Device Drivers & Async Runtime + +- **Drivers** (`src/migtd/src/driver/`, `src/devices/`) relevant to the Azure + build: the **`vmcall-raw`** channel, the **APIC timer** with one-shot mode + (`oneshot-apic`, used when TSC-deadline is unavailable), the **system tick** + clock, and **guest-crash MSR reporting**. +- **Async runtime** (`src/async/async_runtime`, `src/async/async_io`): a tiny + single-threaded no_std executor (poll-based futures, `ArcWake`, task queue) + with `AsyncRead`/`AsyncWrite` traits and timeout combinators. It lets the + single-threaded firmware drive asynchronous migration I/O. Under AzCVMEmu a real + **tokio** runtime is used instead. + +--- + +## 11. Build, IGVM Image & Hashing + +- **`cargo image --image-format igvm`** builds the MigTD **IGVM** image and + enrolls policyData plus either a PEM policy issuer chain or a direct signer + anchor. CoRIM builds also enroll the signed mapping CoRIM. Policy v1 alone + uses the separate root-CA enrollment. Supports `--log-level` and `--debug`. +- The **Azure Makefile** (`sh_script/Azure/Makefile`) is the canonical build: + `cargo image --no-default-features --features + vmcall-raw,stack-guard,main,vmcall-interrupt,oneshot-apic,spdm_attestation,igvm-attest + --image-format igvm --policy-v2 ...`. +- **`cargo hash` / `migtd-hash --policy-v2`** computes `SERVTD_INFO_HASH` + (for pre-binding) and reproduces the RTMR2 canonical `policyData` digest for the + IGVM image. +- Hardening: **`stack-guard`** is enabled in the Azure build (with optional + `cet-shstk`). + +--- + +## 12. Developer Tools (`tools/`) + +- **migtd-hash** — compute MigTD measurements (`SERVTD_INFO_HASH`) and, in v2 + mode, the `tdinfo_hash` for `tcb_mapping.json`. +- **migtd-collateral-generator** — fetch platform collateral from **Azure THIM** + (or Intel PCS) and emit collateral JSON. +- **migtd-policy-generator** — generate v2 `policyData` by merging base policy + + platform collateral + ServTD collateral. +- **servtd-collateral-generator** — bundle signed ServTD identity + signed TCB + mapping + issuer chains. +- **json-signer** — sign / finalize / verify JSON for `policyData`, `tdIdentity`, + and `tdTcbMapping`. +- **migtd-policy-verifier** — verify Policy v2 JSON endorsements and signer + chains. + +--- + +## 13. AzCVMEmu Emulation Mode + +- Builds MigTD as a **standard Rust user-space app** that runs inside an Azure + TDX CVM for development/testing (`doc/AzCVMEmu.md`, + `src/migtd/src/bin/migtd/cvmemu.rs`). +- Replaces TDX payload/tdcall interfaces with `*-emu` shims, uses a tokio + runtime, and reads policy/root-CA from environment/files. +- Uses the same **`vmcall-raw`** transport as the production Azure build; supports + real or mocked (`use-mock-quote`, `test_mock_report`) attestation for + end-to-end flow testing. + +--- + +## 14. Testing & Quality + +- **Azure mock-quote test flow** (`sh_script/Azure/Makefile`, + `build_azure_mock_test.sh`): build IGVM variants with allow-all / bad-FMSPC + (reject) / mock-quote v2 policies to exercise accept and reject paths without a + real quoting service. +- **Unit tests** across crates, with coverage tooling + (`sh_script/unit_test_coverage.sh`). +- **Integration tests** (QEMU + pytest) and **fuzzing** harnesses for migtd, + policy, crypto, virtio, virtio-serial, vsock, and vmcall-raw. +- **Security** and **memory-usage** test documentation + (`doc/security_test.md`, `doc/memory_usage_test.md`). +- **Test bypass** `test_disable_ra_and_accept_all` exists for test images and is + **compile-time blocked** from combining with production attestation features + (`spdm_attestation` / `policy_v2`) in non-emulator builds. + +--- + +## 15. Configuration & Feature Flags + +### Azure config files (`config/Azure/`) +- `collateral_thim.json` — Azure THIM platform collateral. +- `policy_data_raw.json` / `policy_v2_signed.json` — v2 policy (raw / signed). +- `td_identity.json`, `tcb_mapping.json` — ServTD collateral inputs. +- `servtd_info.json` — TD config manifest used for hashing. + +### Azure build feature flags (`src/migtd/Cargo.toml`) +- `vmcall-raw` — GHCI / migration transport. +- `igvm-attest` — IGVM quote retrieval. +- `spdm_attestation` — SPDM mutual-attestation secure session. +- `policy_v2` — RTMR2-bound policyData + signed ServTD endorsement (also enables + `attestation/attest-lib-ext` collateral verification). +- `stack-guard`, `vmcall-interrupt`, `oneshot-apic`, `main` — hardening, event + interrupt, APIC one-shot timer, and the migration binary. + +--- + +## 16. Migration Error Codes (host-visible) + +| Code | Cause | +|:----:|-------| +| 1 | VMM-provided data not as expected | +| 3 | Out of memory | +| 4 | TDX module error (often mismatched `SERVTD_INFO_HASH`) | +| 5 | Failed to establish host communication channel | +| 6 | SPDM/secure-session error (e.g. remote quote verification or handshake aborted) | +| 7 | Unable to obtain the quote | +| 8 | Remote quote does not satisfy the migration policy | diff --git a/doc/code_coverage.md b/doc/code_coverage.md new file mode 100644 index 000000000..5bd534bc7 --- /dev/null +++ b/doc/code_coverage.md @@ -0,0 +1,177 @@ +# MigTD Code Coverage Proposal + +Status: **DRAFT for review.** Aggregation backend decided: **Codecov**. No implementation yet. + +This document proposes a per-PR code-coverage flow that combines unit tests and CI integration +tests into a single, line-by-line report, and outlines how to reach the production-only code paths +that only the real-hardware tests exercise. + +## 1. Current state + +Coverage exists only as **local, manual scripts** — nothing runs in CI, nothing is aggregated, +uploaded, or shown per-PR. + +| Asset | What it does | Gaps | +|---|---|---| +| [`sh_script/unit_test_coverage.sh`](../sh_script/unit_test_coverage.sh) | `RUSTFLAGS=-Cinstrument-coverage` + `cargo test -p policy -p migtd -p crypto -p virtio -p vsock` → `grcov -t html`. Source-based LLVM coverage. | Local only; HTML only (no lcov); default features only (misses `policy_v2` / `vmcall-raw` / `spdm` legs that `xtask lib-test` builds); not in CI. | +| [`sh_script/fuzzing.sh`](../sh_script/fuzzing.sh) `-c` | Per-fuzz-target grcov HTML. | Local only; fuzz-only. | + +CI test surfaces today (none produce coverage): + +- **[`library.yml`](../.github/workflows/library.yml)** → `cargo xtask lib-test`: unit tests across + crates and feature combos (migtd default / `policy_v2` / `main,policy_v2,vmcall-raw --lib`, + policy v1+v2, etc.). +- **[`integration-emu.yml`](../.github/workflows/integration-emu.yml)** → 13-leg matrix driving + [`migtdemu.sh`](../migtdemu.sh) (AzCVMEmu). Builds a **std host binary** + (`x86_64-unknown-linux-gnu`, no `--target`) and runs source+destination as ordinary Linux + processes with **mock quote / mock report**. Covers skip-RA, policy v2, IGVM-attest, SPDM, + rebind, key-rotation, mapping-rotation, quote-retry. +- **[`integration-tdx.yml`](../.github/workflows/integration-tdx.yml)** → `[self-hosted, tdx]` + runners; builds the **firmware image** (`cargo image`, no_std `x86_64-unknown-none`, `migtd.bin`) + and runs `pytest` inside real TD guests with **real attestation**. Marked "Optional/Broken", + `workflow_dispatch` only. + +## 2. Goals + +1. **Per-PR combined coverage** = unit tests ∪ CI integration tests, as one number + report. +2. Integration layer = the **AzCVMEmu** legs in `integration-emu.yml` — they run directly on the + build runner with a mock quote, so they are directly instrumentable. +3. Reach toward **production-only code paths** that AzCVMEmu + mock_report does **not** exercise + (real attestation / quote generation / TDX GHCI vmcalls / no_std firmware runtime) — these are + only hit by the **real-hardware TDX** tests. +4. **Line-by-line** visibility: which source lines are covered, plus PR **diff** coverage. +5. Must run **per-PR**, but a **minimal covering subset** of legs is acceptable if it yields the + same coverage (keep CI fast). +6. Prefer **GitHub-native** flow. **Decision: use Codecov** for aggregation/reporting. + +## 3. Technical foundation (verified) + +- Standardize on **source-based LLVM coverage** (`-Cinstrument-coverage`) — already the repo's + approach via grcov. +- The AzCVMEmu binary is a **std host build** → directly instrumentable. `migtdemu.sh` launches it + through `env "${kv[@]}" … "$binary"`, which **inherits** the parent environment, so exporting + `LLVM_PROFILE_FILE=…/%p-%m.profraw` makes **both** the source and destination processes emit + `.profraw` with **no script change**. +- Emit **LCOV** (`grcov … -t lcov`) as the interchange format → line-by-line in Codecov + local HTML. +- Merging reports from **different feature-variant builds** yields the **union** of covered lines — + exactly the "covered by all CI tests combined" semantic. Lines `cfg`-gated out of a given build + are simply absent from that report; a line counts as covered if **any** configuration hits it. +- The [`setup-build-environment`](../.github/actions/setup-build-environment/action.yml) action + installs Rust 1.88.0 + `rust-src` but **not** `llvm-tools-preview`/grcov ([`fuzz.yml`](../.github/workflows/fuzz.yml) + already adds `llvm-tools-preview`); coverage jobs must add both. + +## 4. Coverage by test layer + +### 4a. Unit tests — EASY +Enhance `unit_test_coverage.sh` to also emit `-t lcov`, and align its feature combos with +`xtask lib-test` (add `policy_v2` / `vmcall-raw` / `spdm` runs) so unit coverage reflects what CI +tests. Upload under flag **`unittests`**. + +### 4b. AzCVMEmu integration — EASY/MODERATE +Per selected leg: add `llvm-tools-preview` + grcov; build with `RUSTFLAGS=-Cinstrument-coverage`; +`export LLVM_PROFILE_FILE=$PWD/emu-cov/<leg>-%p-%m.profraw`; run the existing `test-command`; then + +```bash +grcov emu-cov --binary-path target/release/ -s . -t lcov \ + --ignore 'deps/*' --ignore 'target/*' -o emu-<leg>.lcov +``` + +Upload under flag **`integration`**. (Instrumentation forces a full instrumented rebuild of deps → +slower; see §6.) + +### 4c. Real-hardware TDX firmware — HARD (production-only paths) +**Why it matters:** real attestation, quote generation, TDX GHCI vmcalls, and the no_std firmware +runtime are **only** exercised here; AzCVMEmu + mock cannot cover them. + +**Why it's hard:** the firmware is `no_std`, `x86_64-unknown-none`, has **no filesystem** to write +`.profraw`, may never cleanly "exit", and is a **measured** image (instrumentation changes MRTD/RTMR). + +**Feasible approach — [`minicov`](https://github.com/Amanieu/minicov)** (the standard no_std coverage runtime): +1. Build the firmware with `-Cinstrument-coverage` and link the `minicov` no_std runtime. +2. Reserve a memory region / linker section for the LLVM counters in the firmware memory map. +3. Under a **test-only feature**, call `minicov::capture_coverage()` at end-of-test and stream the + buffer out-of-band over an existing channel (serial log / vsock), base64-encoded. +4. Host side: decode → reconstruct `.profraw` → grcov/llvm-cov → lcov. + +**Risks / caveats to weigh:** +- Firmware **memory-layout & size budget**: counter sections may not fit the fixed firmware layout. +- **Measurement change:** instrumenting changes MRTD, so attestation policy / pre-production certs + must be **regenerated to match the instrumented image** (the emu policy generator already does + this by hashing the actual image; real-HW needs equivalent handling). Otherwise the very + attestation path you want to cover will reject the image. +- **Cadence:** these run on self-hosted TDX and are currently optional/broken — they will not run on + every PR. + +**Recommended handling:** treat firmware coverage as a Codecov **carryforward flag** `hardware` — +when the hardware job doesn't run on a PR, Codecov carries the **last** hardware coverage forward so +the combined per-PR number still reflects production-path coverage without blocking the PR. + +## 5. Line-by-line coverage + +Yes, fully supported. `grcov -t lcov` (or `-t html`) gives per-line + branch data; **Codecov** +renders per-line covered/uncovered in the web UI **and** PR **diff coverage** (which changed lines +are covered). Locally, `grcov -t html` or `genhtml` produces a browsable line-by-line report. +With per-flag uploads (`unittests` / `integration` / `hardware`) you can also see which **layer** +covers a given line. + +## 6. Per-PR cost control & "minimal covering subset" + +Instrumented builds rebuild all deps (slower), and the emu matrix is 13 legs — instrumenting all of +them per-PR is heavy. Plan: + +1. Run a **one-time full-matrix** instrumented pass; compute each leg's **marginal** line contribution. +2. The 13 legs vary along a few axes — attestation mode (skip-ra / mock-report / igvm-attest / spdm), + policy (v1/v2), operation (migration / rebind / key-rotation / mapping-rotation), retry. A + **representative subset (~4–6 legs)** whose union ≈ the full union is very likely. +3. Run the **subset per-PR**; run the **full matrix nightly/weekly** (or on label) to detect drift. +4. Optionally isolate everything in a **dedicated `coverage.yml`** so instrumented rebuilds never + slow the existing fast PR matrix. + +## 7. Alternatives considered + +### Aggregation / reporting (decided: A — Codecov) +| Option | Pros | Cons | +|---|---|---| +| **A. Codecov flag-merge (+carryforward) — chosen** | GitHub-native; auto-merges matrix + unit + hardware uploads into one total with per-flag breakdown; per-line + PR diff coverage; carryforward solves "hardware not run every PR"; tokenless for public repo; historical trend UI | external service; fork PRs may need `CODECOV_TOKEN`; org must allow the Codecov app | +| B. Self-contained: artifacts + merge job + genhtml | no third party; data stays in GitHub; full control | must build/maintain merge, threshold, PR-comment, and carryforward-equivalent logic; no trend UI | +| C. Coveralls | similar to A; parallel/flag support | same external-service concerns; smaller feature set than Codecov flags/carryforward | +| D. ADO Cobertura + `PublishCodeCoverageResults@2` | native Coverage tab; merges multiple Cobertura; good if org mandates ADO | CI already lives in GitHub Actions → extra system; weaker per-PR GitHub annotations | + +### Coverage tooling sub-choice +| Option | Pros | Cons | +|---|---|---| +| **grcov** (current) | already used by repo scripts; consumes raw profraw from externally-launched processes (fits `migtdemu.sh`); lcov/html/cobertura | external binary to install | +| cargo-llvm-cov | great for `cargo test`/`cargo run`; one command | awkward for binaries launched by a shell script out-of-band (the emu case) | +| raw llvm-tools (`llvm-profdata`+`llvm-cov`) | no extra deps beyond `llvm-tools-preview` | more manual; grcov already wraps this | + +→ Keep **grcov** for uniformity (unit + emu + firmware-via-minicov all converge on profraw → lcov). + +### Firmware coverage sub-choice +| Option | Pros | Cons | +|---|---|---| +| **minicov no_std runtime** | purpose-built for bare-metal; capture + dump over serial/vsock | code changes (dep, linker section, test hook); measurement regen; size budget | +| RAM-dump hack of profile runtime | no extra crate | very invasive/custom; fragile | +| Skip firmware coverage | zero effort | loses production-only path coverage (the main reason hardware tests exist) | + +## 8. Recommendation (phased) + +- **Phase 1 (now — high ROI, low effort):** unit + a minimal emu subset → grcov `-t lcov` → + **Codecov** flags `unittests` + `integration`. Per-PR, line-by-line + diff coverage. Use a + dedicated `coverage.yml` (or extend existing workflows) running the subset per-PR, full matrix + nightly. +- **Phase 2 (later — high effort, high value):** firmware coverage on the self-hosted TDX runner via + **minicov**, uploaded under a **carryforward `hardware`** flag so production-only paths enrich the + combined number without running on every PR. +- **Phase 3 (tuning):** lock in the covering subset, set a coverage threshold / PR status, and decide + gating policy (informational vs blocking). + +Default tooling: **grcov → lcov → Codecov flag-merge**, reusing the repo's existing approach. + +## 9. Open questions for reviewers + +1. **Per-PR CI time budget** — is the instrumented subset acceptable inline, or should it live in a + separate `coverage.yml` workflow? +2. **Invest in firmware/minicov now or defer** to Phase 2? (Requires firmware code + measurement-regen work.) +3. **Gating policy** — informational coverage report vs a blocking threshold / diff-coverage gate? +4. **Codecov onboarding** — confirm the Codecov GitHub app is enabled for the org, and whether a + `CODECOV_TOKEN` secret is needed for fork PRs. diff --git a/doc/dependency_preparation.md b/doc/dependency_preparation.md new file mode 100644 index 000000000..6056ecc06 --- /dev/null +++ b/doc/dependency_preparation.md @@ -0,0 +1,56 @@ +# Dependency Preparation + +Run the repository preparation script after a fresh clone, submodule update, or +`git clean -fdx`: + +```bash +bash sh_script/preparation.sh +``` + +## Why the script patches `ring` + +Both `td-shim` and `spdm-rs` contain a `ring` submodule based on ring 0.17.14, +commit `2723abbca`. When they are built independently, each subproject prepares +its own copy. The MigTD workspace instead resolves every crates.io `ring` +dependency to the td-shim copy: + +```toml +[patch.crates-io] +ring = { path = "deps/td-shim/library/ring" } +``` + +Consequently, spdm-rs's own `[patch.crates-io]` entry for +`deps/spdm-rs/external/ring` does not select that copy during a top-level MigTD +build. The SPDM-specific changes must be applied to +`deps/td-shim/library/ring`, which is the copy Cargo compiles. + +Preparation happens in this order: + +1. `deps/td-shim/sh_script/preparation.sh` resets td-shim's ring and applies + its `x86_64-unknown-none` and CPU-feature patches. +2. MigTD applies spdm-rs patches `0003` and `0004` to that same ring tree. +3. `deps/spdm-rs/sh_script/pre-build.sh` prepares spdm-rs and its standalone + ring copy. + +The SPDM patches add APIs required to preserve intermediate SPDM context: + +- `EphemeralPrivateKey::export_private_key_bytes` and + `EphemeralPrivateKey::from_private_key_bytes` preserve an in-progress DHE + key exchange. +- `digest::Context::to_bytes` and `digest::Context::from_bytes` preserve + in-progress transcript hashes. + +Without these APIs, builds using `spdm_attestation` fail because spdmlib calls +methods absent from the selected ring source. + +## Why a ring upgrade does not remove the patches + +The serialization APIs are downstream spdm-rs extensions, not APIs in ring +0.17.14 or the upstream development branch. In particular, exporting an +ephemeral private key and serializing digest implementation state do not +naturally fit ring's public abstractions. + +Removing these preparation steps therefore requires either upstream support, +a single maintained ring fork shared by td-shim and spdm-rs, or an spdm-rs +checkpoint design that uses only upstream ring APIs. Merely changing the ring +version is not sufficient. diff --git a/doc/integration_test.md b/doc/integration_test.md index cc9518589..60507b9a1 100644 --- a/doc/integration_test.md +++ b/doc/integration_test.md @@ -6,6 +6,11 @@ git clone https://github.com/intel/MigTD.git git submodule update --init --recursive ./sh_script/preparation.sh ``` + +The preparation step patches the ring source selected by the MigTD workspace. +See [Dependency Preparation](dependency_preparation.md) for why this is +required. + ## Setup pytest environment Please use recommend configuration in [integration_test.py](../sh_script/test/integration_test.py). diff --git a/doc/policy_v2.md b/doc/policy_v2.md index 32e894d62..608114595 100644 --- a/doc/policy_v2.md +++ b/doc/policy_v2.md @@ -44,7 +44,7 @@ cargo build -p servtd-collateral-generator Result: `servtd_collateral.json` (contains signed `td identity` and `tcb mapping`, and their issuer chains). -## 3. Generate and Sign Policy +## 3. Generate Policy Generate a policy v2 JSON referencing: - Attestation collaterals (from step 1) @@ -60,14 +60,21 @@ cargo build -p migtd-policy-generator -o policy_v2.json ``` -Sign the policy: +For CoRIM-only enrollment, omit `--servtd-collateral` and pass +`--servtd-crl /path/to/servtd_signer_crl.pem`; the CRL is stored as measured +top-level `servtdCrl` and applies to the separately enrolled CoRIM `x5chain`. + +The legacy outer policy signature may still be emitted for compatibility: ```sh cargo build -p json-signer ./target/debug/json-signer --sign --name policyData --private-key /path/to/pkcs8 --input /path/to/policy_v2.json --output policy_v2_signed.json ``` -Result: `policy_v2_signed.json` (contains `policyData` and its signature). +Result: `policy_v2_signed.json` contains `policyData` and its legacy outer +signature. MigTD neither verifies nor otherwise uses that outer signature: +policyData integrity comes from RTMR2, while the inner JSON mapping/identity +signatures or CoRIM signature provide endorsement authenticity. ## 4. Build Final MigTD Image with Policy and Issuer Chain @@ -88,10 +95,28 @@ cargo image --policy-v2 \ ``` During startup: -- Policy issuer chain is measured (see measurement flow in [src/migtd/src/bin/migtd/main.rs](../src/migtd/src/bin/migtd/main.rs)). -- Policy integrity is verified with issuer chain and measured by RTMR and event log (`RawPolicyData::verify` in [src/policy/src/v2/policy.rs](../src/policy/src/v2/policy.rs)). +- MigTD derives the root+EKU signer anchor from the policy issuer chain and + measures that anchor into RTMR1. +- Canonical `policyData` is measured into RTMR2 after redacting only the JSON + TCB mapping and its issuer chain. +- Inner JSON signatures are verified, and each signer chain must resolve to + the RTMR1 anchor (`RawPolicyData::verify` in + [src/policy/src/v2/policy.rs](../src/policy/src/v2/policy.rs)). - Collaterals are used for quote verification and TCB evaluation. +For CoRIM-only packaging, enroll the precomputed signer anchor and signed +mapping CoRIM instead of the PEM policy issuer chain: + +```sh +cargo image --policy-v2 \ + --policy /path/to/policy_v2_corim.json \ + --signer-anchor /path/to/signer_anchor.bin \ + --servtd-corim /path/to/tcb_mapping.cose +``` + +The CoRIM-only policy omits `servtdCollateral`; its complete canonical +`policyData` is measured into RTMR2. + ## 5. Build Final MigTD Image with policy which contain updated TCD mapping ### Generate new key pair for policy signing ``` @@ -113,17 +138,29 @@ cargo build popd ``` -### Generate new measurement with updated TCB mapping +### Generate new measurement with cumulative TCB mapping + +Use the previous release's authority-maintained mapping signing payload as the +history source. `config/templates/tcb_mapping_seed.json` is only a +first-release seed. + ``` ./target/debug/migtd-hash --manifest config/servtd_info.json \ --image target/release/migtd.bin \ --policy-v2 \ - --update-tcb-mapping config/templates/tcb_mapping.json + --update-tcb-mapping release-N-1/tcb_mapping.json \ + --output-tcb-mapping release-N/tcb_mapping.json \ + --mapping-isvsvn <release-N-isvsvn> ``` +The updater preserves every historical hash, rejects attempts to reassign an +existing hash or lower the SVN for a new release, and sorts entries +deterministically before signing. Release revocation uses the servTD leaf +signer CRL; individual hash mappings are never removed. + ### Resign policy with generated keys ``` -bash sh_script/build_policy_v2.sh [preprod/prod] +bash sh_script/build_policy_v2.sh [preprod/prod] release-N/tcb_mapping.json ``` ### Rebuild migtd with new policy ``` @@ -136,5 +173,11 @@ cargo image --policy-v2 \ 1. Platform collaterals -> `collateral_*.json` 2. ServTD collateral -> sign -> `servtd_collateral_signed.json` -3. Policy generator -> `policy_v2.json` -> sign -> `policy_v2_signed.json` -4. Build image with signed policy + issuer chain -> `cargo image --policy-v2 --policy config/templates/policy_v2_signed.json --policy-issuer-chain config/templates/policy_issuer_chain.pem` +3. Policy generator -> `policy_v2.json`; an outer signature is optional and + ignored by MigTD. +4. Build a JSON image with policy + PEM signer chain, or a CoRIM-only image + with policy + direct signer anchor + signed CoRIM. + +See [tcb_mapping_design_proposal.md](./tcb_mapping_design_proposal.md) and +[policy_v2_measurements.md](./policy_v2_measurements.md) for the exact +measurement and one-hash contracts. diff --git a/doc/policy_v2_measurements.md b/doc/policy_v2_measurements.md new file mode 100644 index 000000000..4b57a562e --- /dev/null +++ b/doc/policy_v2_measurements.md @@ -0,0 +1,197 @@ +MigTD Policy v2 Measurements +============================ + +This document describes the implemented `MRTD` and `RTMR0..3` inputs for +Policy v2 images. The byte-level one-hash and endorsement contract is defined +in [tcb_mapping_design_proposal.md](./tcb_mapping_design_proposal.md). + +The runtime and offline calculator share the same policy helpers: + +- runtime: `src/migtd/src/bin/migtd/main.rs` +- canonical policy and signer anchor: `src/policy/src/v2/measurement.rs` +- offline reproduction: `tools/migtd-hash/src/lib.rs` + +## Summary + +| Register | Measured content | Measured by | +|---|---|---| +| `MRTD` | Initial td-shim BFV and MigTD payload pages, plus launch GPA layout | TDX module | +| `RTMR0` | One td-shim `EV_SEPARATOR` | td-shim | +| `RTMR1` | td-shim `EV_SEPARATOR`, then the Policy v2 signer anchor | td-shim, then MigTD | +| `RTMR2` | One extend over canonical Policy v2 `policyData` | MigTD | +| `RTMR3` | Nothing; remains zero in production | — | + +All registers use SHA-384. One runtime extend is: + +```text +RTMR_new = SHA384(RTMR_old || SHA384(measured_bytes)) +``` + +## MRTD + +The TDX module measures the initial private-page layout before the guest runs. +For every added page, `TDH.MEM.PAGE.ADD` records its GPA. Pages marked for +measurement also receive `TDH.MR.EXTEND` over their contents. + +MigTD's metadata marks: + +| Section | Content measured into MRTD? | +|---|---| +| td-shim BFV | Yes | +| MigTD payload | Yes | +| Configuration FV | No; GPA only | +| Temporary memory | No; GPA only | +| Permanent memory | Dynamically accepted, not initial content | + +The CFV holds policy and signer material but its content is not in MRTD. MigTD +measures the trust-relevant CFV inputs into RTMR1 and RTMR2 after launch. + +TDVF and IGVM package pages in different orders, so their MRTD values differ +even when their firmware and payload bytes match. Always calculate MRTD from +the exact image being deployed. + +## RTMR0 + +td-shim extends the four-byte separator payload `0x00000000` into RTMR0 before +transferring control to MigTD: + +```text +RTMR0 = SHA384(zeros(48) || SHA384(0x00000000)) +``` + +MigTD adds no other production event to RTMR0. + +## RTMR1 signer anchor + +td-shim first extends the same separator into RTMR1. MigTD then resolves the +Policy v2 signer anchor: + +```text +R = SHA384(DER(root certificate)) +A = SHA384( + "MIGTD-RTMR1-ANCHOR-V1" || 0x00 || + R || 0x00 || + leaf_EKU_OID_DER +) +RTMR1_final = extend(RTMR1_separator, A) +``` + +The event-log helper hashes `A` as part of the extend formula. + +The CFV can carry: + +- a PEM policy issuer chain, from which MigTD derives `A`; or +- a precomputed 48-byte `A`. + +`config::get_signer_anchor_source()` prefers the direct anchor. JSON packaging +normally uses the PEM chain; CoRIM-only packaging normally uses the direct +anchor. The two forms are measurement-equivalent when they represent the same +root and signer-purpose EKU. + +RTMR1 does **not** measure the complete issuer-chain bytes. Leaf-key and +intermediate-CA rotation under the same root+EKU leaves RTMR1 unchanged. + +## RTMR2 canonical policyData + +MigTD extends RTMR2 once with bytes returned by +`extract_canonical_policy_data_bytes`. + +Canonicalization sorts object keys recursively, preserves array order, and +removes insignificant whitespace. The helper accepts both a bare `policyData` +object and the legacy `{policyData, signature}` envelope. The outer signature +is ignored; RTMR2 provides integrity for measured policy content. + +### JSON collateral + +If `servtdCollateral` is present, the helper removes: + +```text +servtdCollateral.servtdTcbMapping +servtdCollateral.servtdTcbMappingIssuerChain +``` + +The mapping contains the circular `tdinfo_hash` and must be replaceable. Its +issuer-chain bytes are also replaceable, while policy verification requires +the chain's root+EKU identity to match the RTMR1 signer anchor. + +All other fields remain measured, including JSON `servtdIdentity`, its +signature, and `servtdIdentityIssuerChain`. Reissuing any of those bytes +changes RTMR2 and `tdinfo_hash`. + +### CoRIM-only collateral + +A CoRIM-only policy omits `servtdCollateral`. The helper then redacts nothing +and measures the complete canonical `policyData` object. The separately +enrolled signed CoRIM is unmeasured and authenticated through its ES384 +signature and RTMR1-bound `x5chain`. + +### Event log + +The digest records the full canonical bytes, while the tagged event payload is +the small policy version string. Peers recompute the canonical bytes with the +same helper and compare their hash with the event digest during replay. + +## RTMR3 + +No production MigTD event targets RTMR3, so it remains all zero. + +## Test-only measurement + +`test_disable_ra_and_accept_all` replaces the normal Policy v2 measurements +with a test-feature event in RTMR2. Such images do not have production RTMR1 +or RTMR2 values and must never be endorsed or released. + +## Offline reproduction + +Run `migtd-hash` against the final enrolled image: + +```sh +cargo run -p migtd-hash -- \ + --image target/release/migtd.igvm \ + --manifest config/Azure/servtd_info.json \ + --policy-v2 \ + --verbose +``` + +For a TDVF image, pass the `.bin` image instead. `migtd-hash`: + +1. derives MRTD using the selected image format; +2. seeds RTMR0 and RTMR1 with the td-shim separator; +3. resolves the PEM-derived or direct signer anchor and extends RTMR1; and +4. invokes the same canonical policy helper used at runtime and extends RTMR2. + +Do not copy fixed RTMR1, RTMR2, or `tdinfo_hash` values from documentation. +They depend on the final image, measured policy content, and signer anchor. + +## Release invariant + +The release pipeline must prove: + +```text +tdinfo_hash(before signed mapping enrollment) + == +tdinfo_hash(after signed mapping enrollment) +``` + +For JSON packaging, the pre-final policy contains an empty mapping sentinel. +For CoRIM-only packaging, `servtdCollateral` is absent. Enrolling the final +mapping or CoRIM must not change MRTD or any RTMR. + +Changes to measured policy content, the signer root/EKU, firmware, payload, or +launch layout must change the resulting `tdinfo_hash`. + +## Source and test index + +| Concern | Source | +|---|---| +| Runtime measurement order | `src/migtd/src/bin/migtd/main.rs::do_measurements` | +| Event IDs and register indices | `src/migtd/src/event_log.rs` | +| Canonical RTMR2 bytes | `src/policy/src/v2/measurement.rs::extract_canonical_policy_data_bytes` | +| RTMR1 anchor formula | `src/policy/src/v2/measurement.rs::compute_signer_anchor` | +| CFV anchor precedence | `src/migtd/src/config.rs::get_signer_anchor_source` | +| Offline reproduction | `tools/migtd-hash/src/lib.rs` | +| Mapping/identity verification | `src/policy/src/v2/policy.rs` | + +The measurement regression tests named in +[tcb_mapping_design_proposal.md](./tcb_mapping_design_proposal.md) pin the +redaction, canonicalization, CoRIM-only, and signer-anchor contracts. diff --git a/doc/release.md b/doc/release.md index 0a1d1b01e..0dfc0e256 100644 --- a/doc/release.md +++ b/doc/release.md @@ -37,6 +37,27 @@ 5. Create branch `v<major>.<minor>`. 6. Upload the release content to branch `v<major>.<minor>`. +### Cumulative MigTD SVN mapping + +The prior release's `tcb_mapping.json` signing payload is the +authority-maintained source of truth for supported MigTD releases. Generate +the next mapping with +`migtd-hash --update-tcb-mapping <prior> --output-tcb-mapping <next> +--mapping-isvsvn <svn>` so the new `tdinfo_hash` is added without dropping +historical hashes. The tool canonicalizes ordering for reproducible signing +input, rejects conflicting duplicate hashes, rejects attempts to reassign an +existing hash, and requires each new release SVN to be no lower than the +historical maximum. + +Historical hash assignments are never removed. Revoke a release by revoking +the mapping's leaf signer certificate through the servTD CRL. Never create a +release from `tcb_mapping_seed.json` after the first release, and never remove +an old mapping by replacing array index zero. + +The Azure and AzCVMEmu policy builders accept +`--tcb-mapping <prior-release-file>` and reuse an existing output mapping by +default. + ## Release Test Feature: 1. Migration Flow diff --git a/doc/reproducible_build.md b/doc/reproducible_build.md new file mode 100644 index 000000000..fc9febd77 --- /dev/null +++ b/doc/reproducible_build.md @@ -0,0 +1,153 @@ +# MigTD Reproducible Build: Support and Limitations + +This document summarizes what reproducible-build support exists in the MigTD +repository and the limitations that callers should be aware of. Because the +MigTD payload bytes feed into the measured firmware image, reproducibility +directly affects the resulting **MRTD** and therefore attestation / policy +matching across rebuilds. + +## What is implemented + +### Build-environment normalization (the actual mechanism) + +Reproducibility is achieved primarily by normalizing the build environment, not +by post-processing the binary. [`container/Dockerfile`](../container/Dockerfile) +pins everything that affects the output bytes: + +- Base image `ubuntu:26.04` referenced by digest. +- Rust toolchain `1.88.0` plus the `rust-src` component and the + `x86_64-unknown-none` target. +- `WORKDIR /root` and `git clone --recursive ... MigTD.git`, so the source is + always built as the **root** user from the path `/root/MigTD`. + +This forces the same system user and the same source-code path on every build, +which is the requirement called out in the README's *Reproducible Build* section +(see [`readme.md`](../readme.md)) and tracked in +[intel/MigTD#51](https://github.com/intel/MigTD/issues/51). + +[`sh_script/docker.sh`](../sh_script/docker.sh) builds and runs the container: + +``` +./sh_script/docker.sh -f container +``` + +### Dependency and toolchain pinning + +- `Cargo.lock` is committed and locks all transitive crate versions. +- `rust-toolchain` pins Rust `1.88.0`. +- [`doc/release.md`](./release.md) requires shipping `Cargo.lock` with every + release to lock the dependency versions. + +### Release profile (pinned, not a determinism mechanism) + +The release profile in [`Cargo.toml`](../Cargo.toml) uses `panic = "abort"`, +`opt-level = "z"`, and `lto = true`. These are size/`no_std` choices, **not** +reproducibility features; what matters for reproducibility is only that they are +fixed in committed `Cargo.toml` so every build uses identical flags. Any +consistent settings reproduce equally. + +### Native path independence via `--remap-path-prefix` (implemented) + +`xtask` sets `RUSTFLAGS` with `--remap-path-prefix` for both the `td-shim` and +`migtd` compilations (`xtask/src/build.rs`, `remap_rustflags`), mapping the +project root → `/migtd`, `CARGO_HOME` → `/cargo`, and `RUSTUP_HOME` → `/rustup`. +Every `cargo image` build (Linux TDVF and Azure IGVM) thus produces identical +bytes regardless of checkout path or user, so native builds no longer require the +fixed-path container. Verified: clean builds in two different paths matched — +Linux TDVF `e3c67e7b…`, Azure IGVM `2c74e32f…`, with 0 absolute paths embedded. + +### `td-shim-strip-info` tool + +`deps/td-shim/td-shim-tools/.../td-shim-strip-info` can zero out sources of +non-determinism: the PE `TimeDateStamp`, the PDB GUID, and (only with the `-s` / +`--strip_path` flag) embedded `CARGO_HOME`, `RUSTUP_HOME`, and Rust source +paths. It is invoked from +[`sh_script/build_final.sh`](../sh_script/build_final.sh). + +## Verification (empirical) + +Tested with toolchain 1.88.0, target `x86_64-unknown-none`, features +`main,stack-guard,vmcall-vsock,policy_v2`: + +| Test | Result | Verdict | +|------|--------|---------| +| Clean rebuild, same path | identical sha256 | deterministic | +| Rebuild after `touch` of a source file | identical sha256 | timestamp-independent | +| Build in a copied tree at a different path | sha256 **differs** | path-dependent | +| `td-shim-strip-info` without `-s` | bytes unchanged | no-op | +| `td-shim-strip-info` with `-s` | removed 56 items, 44 → 19 paths | partial strip | +| **Azure IGVM** (`build-igvm`), same path, two clean builds | identical sha256 | deterministic | +| **Azure IGVM** (`build-igvm`), different path | sha256 **differs** | path-dependent | + +The Azure rows use the full `build-igvm` feature set +(`vmcall-raw,stack-guard,main,vmcall-interrupt,oneshot-apic,spdm_attestation,igvm-attest`, +`--policy-v2 --debug --image-format igvm`): same-path clean rebuilds were byte-identical, +while a from-scratch build in a copied tree embedded `/tmp/...` source paths and differed. + +The same-path build embedded 44 absolute `/home/<user>/...` strings (both +`.cargo/registry/...` and `src/migtd/...`); the copied-tree build embedded the +new `/tmp/...` paths instead, producing different bytes. This confirms the core +path-dependence below. + +## Limitations + +1. **Path dependence — now resolved for `cargo image`.** The compiler embeds + absolute source / `CARGO_HOME` / `RUSTUP_HOME` paths, so historically identical + build user and path were mandatory (the container's job). `xtask` now applies + `--remap-path-prefix` (see above), so `cargo image` Linux/Azure builds are + byte-identical across paths. Raw `cargo build` invocations (e.g. test scripts) + outside `xtask` still embed real paths. See + [intel/MigTD#51](https://github.com/intel/MigTD/issues/51). + +2. **`td-shim-strip-info` is a no-op as invoked.** Its PE `TimeDateStamp`/PDB + branches only execute for `x86_64-unknown-uefi` targets or `.efi` / `.exe` + names, so they never apply to the ELF MigTD/td-shim binaries. The source-path + stripping (`-s`) *does* work on the ELF — a test run removed 56 items (44 → 19 + embedded paths) — but `build_final.sh` invokes the tool **without `-s`**, and + even with `-s` ~19 paths remain. As invoked, the tool reads and writes back the + ELF unchanged. + +3. **The documented production build never strips.** The canonical build command + `cargo image` (driven by `xtask`) does not invoke `td-shim-strip-info` at all. + +4. **Symbols are not stripped.** `strip = "symbols"` is intentionally not enabled + on `profile.release` due to stability concerns + (cf. confidential-containers/td-shim#272), so symbol and path information + remain in the binary. + +5. **No `SOURCE_DATE_EPOCH`.** `--remap-path-prefix` is now applied via `xtask`, + but `SOURCE_DATE_EPOCH` is still unset (no timestamp variance has been observed + for these ELF builds, so this is not currently a problem). + +6. **No CI verification.** No GitHub Actions workflow builds the Docker image or + diffs rebuilt artifacts, so reproducibility is not enforced automatically. + +## Impact on measurement + +The MigTD ELF payload is linked into the final firmware image and contributes to +the ordered measurement that produces **MRTD**. Any non-reproducible bytes +(embedded paths, symbols, timestamps) therefore change MRTD, which breaks +attestation and policy matching between independently produced builds. Using the +provided container to fix the user and path is what keeps MRTD stable across +rebuilds. + +## Recommended improvements + +**Bottom line: with the pinned container, the binary is already reproducible.** +Two clean builds at the same user/path/toolchain produced byte-identical IGVMs +(`c5db9998…`), and a touch-rebuild was identical too — the ELF has no build +timestamp, so the only variable is the build path/user, which the container +fixes (`root`, `/root/MigTD`, `/root/.cargo`, `/root/.rustup`). The items below +are therefore mostly for **native** (non-container) builds and for hardening. + +| # | Improvement | Docker | Native | Purpose | +|---|-------------|--------|--------|---------| +| 1 | `--remap-path-prefix` (root, CARGO_HOME, RUSTUP_HOME) via xtask | not needed | **DONE** | makes bytes path/user-independent | +| 2 | CI: build twice in two paths, diff sha256 | rebuild-twice check | path-diff check | enforces repro | +| 3 | `td-shim-strip-info -s` / strip `strip="symbols"` | optional | optional | reduces leaked paths/symbols, not repro | +| 4 | `SOURCE_DATE_EPOCH` / `TimeDateStamp=0` | not needed | not needed | no timestamp variance observed | + +**Why also support native builds?** So independent third parties can reproduce +and verify MRTD without replicating the exact `/root/MigTD` path, on any +machine/CI checkout dir; and to drop the hard dependency on the container. Only +#1 is needed for that — the rest is hardening. diff --git a/doc/rtmr1_signer_anchor_proposal.md b/doc/rtmr1_signer_anchor_proposal.md new file mode 100644 index 000000000..94fe5be0c --- /dev/null +++ b/doc/rtmr1_signer_anchor_proposal.md @@ -0,0 +1,153 @@ +RTMR1 Signer-Anchor Design and Signer Revocation +================================================ + +This document specifies the implemented Policy v2 signer identity measured in +RTMR1. RTMR2 and one-hash mapping behavior are defined in +[tcb_mapping_design_proposal.md](./tcb_mapping_design_proposal.md). + +## Signer identity + +MigTD identifies a policy/endorsement signer by: + +- the SHA-384 fingerprint of its root certificate; and +- one dedicated signer-purpose leaf EKU OID. + +Leaf public keys, leaf certificate bytes, subjects, and intermediate +certificate identities are not part of signer identity. This permits regional +leaf certificates and leaf/intermediate rotation under the same root+EKU. + +## Anchor formula + +Define `H(x) = SHA384(x)`: + +```text +R = H(DER(root certificate)) +A = H("MIGTD-RTMR1-ANCHOR-V1" || 0x00 || R || 0x00 || leaf_EKU_OID_DER) +``` + +After td-shim extends its separator event, MigTD extends `H(A)` into RTMR1 +through the event-log helper: + +```text +RTMR1_0 = zeros(48) +RTMR1_1 = H(RTMR1_0 || H(separator_event_payload)) +RTMR1_final = H(RTMR1_1 || H(A)) +``` + +Root or EKU changes alter RTMR1. Leaf-key and intermediate-CA rotation under +the same root+EKU do not. + +## Enrollment forms + +The CFV supports two mutually equivalent anchor sources. + +### PEM-derived anchor + +`MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID` carries a leaf-first PEM chain. MigTD +validates its anchor shape and derives `A` from the root DER and dedicated leaf +EKU. JSON collateral packaging uses this form because the same chain verifies +the inner JSON endorsements. + +### Direct anchor + +`MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID` carries the precomputed 48-byte `A`. +CoRIM-only packaging uses this form because the signed CoRIM already carries +the full signer chain in its COSE `x5chain`; duplicating that chain in the CFV +is unnecessary. + +`config::get_signer_anchor_source()` prefers the direct anchor slot if both +slots are populated. `policy::resolve_signer_anchor()` accepts either a +48-byte anchor or a PEM chain. `migtd-hash` follows the same precedence and +resolution rules. + +The standard build CLI accepts either: + +```text +--policy-issuer-chain <chain.pem> +--signer-anchor <anchor.bin> +``` + +At least one is required for Policy v2. The direct form is exactly 48 bytes. + +## Runtime trust binding + +The RTMR1 value and runtime verification enforce the same identity: + +| Element | RTMR1 | Runtime verification | +|---|---|---| +| Root certificate | SHA-384 fingerprint in `A` | Peer/endorsement chain must have the same root | +| Signer purpose | Dedicated leaf EKU in `A` | Leaf must assert an EKU that reproduces `A` | +| Leaf key and certificate | Not included | Signature and chain validity checked, identity not pinned | +| Intermediate identity | Not included | Chain signatures and CA constraints checked | + +JSON `servtdTcbMappingIssuerChain` bytes are redacted from RTMR2. The mapping +signature is accepted only when that chain resolves to the RTMR1 anchor. + +CoRIM `x5chain` is similarly verified and bound to RTMR1 before any +`SERVTD_INFO_HASH -> SVN` lookup is trusted. + +During pre-session exchange, a MigTD sends its anchor source: the direct +48-byte anchor when enrolled, otherwise its PEM issuer chain. The peer resolves +either representation to `A`, so the two packaging forms interoperate when +they share the same root+EKU. + +## Rotation properties + +| Change | RTMR1 changes? | Result | +|---|---:|---| +| Leaf key/certificate under same root+EKU | No | Rolling/regional rotation remains measurement-stable | +| Intermediate CA under same root+EKU | No | Intermediate rotation remains measurement-stable | +| Leaf subject | No | Subject is not signer identity | +| Root certificate | Yes | New trust anchor requires a new endorsement | +| Dedicated signer EKU | Yes | New signer purpose requires a new endorsement | + +The JSON mapping issuer-chain bytes are unmeasured so leaf/intermediate +rotation can accompany the same image hash. JSON TD Identity and its issuer +chain remain measured in RTMR2; rotating or reissuing those bytes changes the +image hash by design. + +## Security trade-off + +The anchor identifies an authorization domain, not one signing key. A stolen +leaf key using its existing certificate is indistinguishable with or without +the anchor. A compromised intermediate can also mint a new leaf under the same +root+EKU without changing `A`. + +Mitigations are: + +- strong HSM and quorum protection for root/intermediate/signing keys; +- certificate-chain signature and CA-constraint validation; +- a measured servTD signer CRL; and +- authority-controlled signer EKU issuance. + +## servTD signer CRL + +Policy v2 accepts a top-level `servtdCrl` that applies to JSON signer chains +and CoRIM `x5chain`. The legacy `servtdCollateral.servtdCrl` location remains +accepted. + +MigTD verifies the CRL signature against an issuing CA in the RTMR1-authorized +chain and rejects listed signer certificates. A configured +`servtd_crl_num` floor provides anti-rollback of the accepted CRL generation. +During peer authentication, the local policy's CRL is authoritative; a peer +cannot supply a different CRL to evade local revocation policy. + +The guest has no trusted wall clock, so it does not treat `nextUpdate` as an +in-guest freshness guarantee. Updating measured `servtdCrl` changes RTMR2 and +`tdinfo_hash`, requiring a new image endorsement. + +## Implementation references + +| Concern | Location | +|---|---| +| Anchor formula and PEM derivation | `src/policy/src/v2/measurement.rs` | +| CFV slots and precedence | `src/migtd/src/config.rs` | +| Runtime RTMR1 extend | `src/migtd/src/bin/migtd/main.rs` | +| Offline reproduction | `tools/migtd-hash/src/lib.rs` | +| JSON/CoRIM anchor binding | `src/policy/src/v2/policy.rs` | +| Peer chain comparison | `src/crypto/src/lib.rs` | +| Signer CRL enforcement | `src/policy/src/v2/policy.rs`, `src/crypto/src/crl.rs` | + +Anchor regression tests cover fixed inputs, root/EKU changes, leaf rotation, +direct-anchor resolution, JSON chain mismatch, CoRIM chain mismatch, and signer +revocation. diff --git a/doc/tcb_mapping_design_proposal.md b/doc/tcb_mapping_design_proposal.md new file mode 100644 index 000000000..764785e5b --- /dev/null +++ b/doc/tcb_mapping_design_proposal.md @@ -0,0 +1,239 @@ +One-Hash TCB Mapping Design +=========================== + +This document specifies the implemented Policy v2 design for binding a MigTD +release to an SVN with one composite measurement: + +```text +tdinfo_hash = SHA384(TDINFO) +``` + +For production MigTD, `SERVTD_ATTR == 0`, so this is also the value recorded by +the TDX module as `init_servtd_info_hash` and `cur_servtd_info_hash`. The signed +TCB mapping maps that complete 48-byte hash directly to MigTD SVN. + +The implementation sources of truth are: + +- `src/policy/src/v2/measurement.rs` +- `src/policy/src/v2/policy.rs` +- `src/policy/src/v2/servtd_collateral.rs` +- `src/policy/src/v2/servtd_corim.rs` +- `tools/migtd-hash/src/lib.rs` + +## Security goals + +The design provides these properties: + +1. **Complete release identity.** The mapping key covers `MRTD`, `RTMR0..3`, + and the other fields in `TDINFO`, rather than a subset of registers. +2. **No circular dependency.** The endorsement that contains `tdinfo_hash` is + excluded from the RTMR2 input used to compute that hash. +3. **Measured policy.** Migration rules, platform collateral, policy SVN, and + JSON TD Identity content are bound to RTMR2. +4. **Signer continuity with rotation.** Mapping and CoRIM signers must resolve + to the RTMR1 root+EKU signer anchor. Leaf and intermediate certificates may + rotate without changing the anchor. +5. **Authenticated init/current lookup.** The current hash resolves through + the authenticated source mapping. The initial hash resolves through the + source mapping or, when absent there, the authenticated destination mapping. + Conflicting assignments fail closed, and MigTD requires + `init SVN <= current SVN`. + +## Measurement layout + +| Register | Contents | +|---|---| +| `MRTD` | Measured td-shim BFV and MigTD payload pages, plus launch GPA layout | +| `RTMR0` | td-shim `EV_SEPARATOR` | +| `RTMR1` | td-shim `EV_SEPARATOR`, then the MigTD signer anchor | +| `RTMR2` | One extend over canonical Policy v2 `policyData` as defined below | +| `RTMR3` | Zero in production builds | + +`TDINFO` includes these registers and the remaining hardware-defined identity +fields. `migtd-hash` reproduces the same values from the final image. + +## RTMR1 signer anchor + +Define `H(x) = SHA384(x)`: + +```text +R = H(DER(root certificate)) +A = H("MIGTD-RTMR1-ANCHOR-V1" || 0x00 || R || 0x00 || leaf_EKU_OID_DER) +``` + +MigTD extends `H(A)` into RTMR1 through the event-log helper. The CFV supplies +the anchor source in either of two forms: + +- a PEM issuer chain, from which MigTD derives `A`; or +- a precomputed 48-byte `A`. + +The direct 48-byte slot takes precedence when both slots are populated. The +standard JSON packaging uses the PEM form. CoRIM-only packaging uses the direct +anchor so the image need not duplicate the CoRIM `x5chain`. + +Both forms produce the same RTMR1 when they represent the same root and signer +EKU. Root or EKU changes alter RTMR1; leaf-key and intermediate-CA rotation +under the same root+EKU do not. + +## RTMR2 canonical policyData + +RTMR2 receives exactly one extend over canonical JSON bytes. Canonicalization: + +- sorts object keys lexicographically at every level; +- preserves array order; +- emits no insignificant whitespace; and +- accepts either a bare `policyData` object or the legacy + `{ "policyData": ..., "signature": ... }` wrapper. + +The outer wrapper signature is ignored. Integrity of measured policy content +comes from RTMR2. + +### JSON collateral + +When `policyData.servtdCollateral` is present, the canonicalizer removes only: + +1. `servtdCollateral.servtdTcbMapping` +2. `servtdCollateral.servtdTcbMappingIssuerChain` + +`servtdTcbMapping` contains the circular `tdinfo_hash` and must remain +replaceable as the authority adds or removes release entries. The mapping +issuer-chain bytes are also replaceable; `RawPolicyData::verify` instead +requires that chain to resolve to the RTMR1 signer anchor. + +Every other `policyData` field is measured, including: + +- `version`, `id`, and `policySvn`; +- `policy`, `forwardPolicy`, and `backwardPolicy`; +- platform `collaterals`; +- `servtdCollateral` version fields; +- `servtdIdentity`, including its signature; +- `servtdIdentityIssuerChain`; and +- top-level `servtdCrl`. + +Measuring TD Identity prevents replacement with a different valid historical +identity without changing RTMR2 and therefore `tdinfo_hash`. + +When `servtdCollateral` exists, `servtdTcbMapping` must be its direct child. +Missing or malformed mapping structure fails closed so schema drift cannot +silently place mapping bytes into RTMR2. + +### CoRIM-only collateral + +CoRIM-only `policyData` omits `servtdCollateral`. There are no JSON endorsement +bytes to redact, so the complete canonical `policyData` object is measured. + +The separately enrolled `COSE_Sign1` CoRIM maps `SERVTD_INFO_HASH -> SVN`. Its +ES384 signature and embedded `x5chain` are verified, and the chain must resolve +to the same RTMR1 signer anchor. When a CoRIM is attached, it is the sole +servTD lookup authority; a missing hash does not fall back to JSON. + +## Signed mapping formats + +### JSON mapping + +Each mapping entry contains the complete hash: + +```text +svnMappings[].tdMeasurements.tdinfo_hash -> isvsvn +``` + +The JSON mapping signature is verified with +`servtdTcbMappingIssuerChain`, then that chain is bound to RTMR1 by its +root+EKU anchor. + +An optional JSON `servtdIdentity` translates the resolved SVN to +`tcbDate`/`tcbStatus`. It is not the source of release identity; the one-hash +mapping is. If policy uses those status/date axes, the identity must be +present. SVN-only policy works without it. + +### CoRIM mapping + +The CoRIM uses digest-selecting conditional endorsement series records: + +```text +SERVTD_INFO_HASH -> exact SVN +``` + +There is no CoRIM TD Identity document. CoRIM lookup supplies SVN only, so +CoRIM-compatible migration policy must not require JSON-only TD Identity +status/date values. + +## Release construction + +The release flow computes a stable hash without embedding that hash into its +own measurement: + +1. Build or enroll the final measured policy content and signer anchor. +2. Place an empty JSON mapping sentinel, or omit `servtdCollateral` for + CoRIM-only packaging. +3. Run `migtd-hash` on the resulting image to compute `tdinfo_hash`. +4. Add the hash-to-SVN entry to the authority-maintained cumulative JSON + mapping or signed CoRIM. New release SVNs must be no lower than all prior + release SVNs, and an existing hash assignment is immutable. +5. Enroll the signed endorsement. +6. Re-run `migtd-hash` and require the hash to be unchanged. + +The mapping must retain every historical initial hash. Hash assignments are +append-only and immutable. MigTD release revocation is performed by revoking +the mapping's leaf signer certificate through the locally authoritative +servTD CRL, not by removing an individual hash. + +Images built with `use-mock-quote` need both the synthetic report hash used by +peer evaluation and the final image hash used by `SERVTD_EXT` continuity. + +## Runtime verification + +After quote or TDREPORT authentication, MigTD: + +1. verifies event-log replay and the RTMR2 canonical policy digest; +2. verifies JSON/CoRIM signatures and signer-anchor binding; +3. requires the authenticated peer's signer anchor to equal the local anchor; +4. resolves the authenticated source's current report `tdinfo_hash` only + through the source mapping; +5. resolves `ServtdExt.init_servtd_info_hash` through the source mapping and + the authenticated local mapping; +6. rejects conflicting initial-hash assignments; +7. uses the local initial-hash assignment only when the source mapping misses; +8. rejects a miss from both mappings; and +9. requires `init SVN <= current SVN` before policy evaluation succeeds. + +This fallback supports returning a TD to its originating release or moving it +to a later cumulative release. It does not support arbitrary multi-hop +movement among historical builds whose mappings do not know the initial hash. +For example, with `V1={H1}`, `V2={H1,H2}`, and `V3={H1,H2,H3}`, a TD initialized +under V3 can move V3 -> V1 -> V3, but V1 -> V2 fails because neither endpoint +can authenticate H3. This is an intentional fail-closed availability +limitation. The legacy wire `init_td_info` field is retained for framing +compatibility but is ignored. + +## Replay and freshness model + +The measurement and endorsement layers provide different guarantees: + +- Changing measured `policyData`, including JSON TD Identity, changes RTMR2 + and `tdinfo_hash`; the changed image requires a matching endorsement. +- JSON mappings and CoRIMs are intentionally unmeasured and replaceable. + Their authenticity comes from signatures bound to the RTMR1 anchor. +- A mapping lookup miss fails closed. Cumulative mappings preserve all + historical initial hashes; individual hashes are never removed. +- MigTD has no trusted wall clock or persistent mapping-generation state. + Mapping publication order and rollback prevention are release-authority and + deployment responsibilities. Policy SVN/status floors and signer CRL + numbers enforce the configured acceptance baseline, but do not turn an + unmeasured mapping into a time-fresh object. + +## Regression tests + +`src/policy/src/v2/measurement.rs` pins the byte-level contract: + +- `extract_redacts_servtd_tcb_mapping` +- `extract_measures_servtd_identity` +- `extract_measures_identity_chain_but_redacts_mapping_chain` +- `extract_redacts_servtd_tcb_mapping_issuer_chain` +- `extract_allows_missing_servtd_collateral` +- `extract_sample_policy_canonical_bytes` +- `extract_canonical_bytes_do_not_contain_field_name` + +Policy tests additionally cover signer-anchor mismatch, CoRIM-only policy, +fail-closed mapping misses, asymmetric source lookup, leaf rotation, and signer +revocation. The EMU matrix exercises JSON and CoRIM migration/rebinding paths. diff --git a/migtdemu.sh b/migtdemu.sh index 49b422316..c2a4a084c 100755 --- a/migtdemu.sh +++ b/migtdemu.sh @@ -28,6 +28,7 @@ USE_POLICY_V2=false MOCK_QUOTE_FILE="" # Optional mock quote file path EXPLICIT_POLICY_FILE=false EXPLICIT_POLICY_ISSUER_CHAIN=false +USE_CORIM_ONLY=false USE_MOCK_QUOTE_RETRY=false DEFAULT_RUST_BACKTRACE="1" # Default RUST_LOG: verbose in debug, info in release; can be overridden by env @@ -56,13 +57,19 @@ show_usage() { echo " --policy-file FILE Set policy file path (default: config/policy.json)" echo " --root-ca-file FILE Set root CA file path (default: config/Intel_SGX_Provisioning_Certification_RootCA.cer)" echo " --policy-issuer-chain-file FILE Set policy issuer chain file path (required when using --policy-v2)" + echo " --servtd-signer-anchor-file FILE Set the 48-byte signer anchor for a CoRIM-only policy" + echo " --servtd-corim-file FILE Set the signed TCB-mapping CoRIM for a CoRIM-only policy" echo " --src-policy-file FILE Set source-specific policy file (overrides --policy-file for source)" echo " --src-policy-issuer-chain-file FILE Set source-specific policy issuer chain file" + echo " --src-servtd-signer-anchor-file FILE Set source-specific signer anchor" + echo " --src-servtd-corim-file FILE Set source-specific signed TCB-mapping CoRIM" echo " --dst-policy-file FILE Set destination-specific policy file (overrides --policy-file for destination)" echo " --dst-policy-issuer-chain-file FILE Set destination-specific policy issuer chain file" + echo " --dst-servtd-signer-anchor-file FILE Set destination-specific signer anchor" + echo " --dst-servtd-corim-file FILE Set destination-specific signed TCB-mapping CoRIM" echo " --debug Build in debug mode (default: release)" echo " --release Build in release mode (default)" - echo " --policy-v2 Enable policy v2 support (requires --policy-file and --policy-issuer-chain-file to be specified)" + echo " --policy-v2 Enable policy v2 support" echo " --skip-ra Skip remote attestation (uses mock TD reports/quotes for non-TDX environments)" echo " --mock-report Use mock report data for RA and policy v2 (non-TDX, but full attestation flow)" echo " --mock-quote-file FILE Path to mock quote file (used with --mock-report, defaults to output_data_v4.bin)" @@ -86,8 +93,8 @@ show_usage() { echo " - Mock report mode (--mock-report) uses the test_mock_report feature to generate mock" echo " TD reports/quotes but still performs the full attestation flow. This is useful for" echo " testing attestation logic without requiring real TDX hardware." - echo " - When using --policy-v2, you must explicitly specify a policy file with --policy-file and" - echo " a policy issuer chain file with --policy-issuer-chain-file. You can use the provided" + echo " - When using --policy-v2, specify a policy file plus either an issuer chain or both" + echo " CoRIM-only inputs (--servtd-signer-anchor-file and --servtd-corim-file). You can use the provided" echo " example files in config/AzCVMEmu. Some reference values in those files for the ServTD may become" echo " outdated over time. Use ./sh_script/build_AzCVMEmu_policy_and_test.sh to generate updated policy" echo " and issuer chain files." @@ -222,10 +229,16 @@ DEST_PORT="$DEFAULT_DEST_PORT" POLICY_FILE="$DEFAULT_POLICY_FILE" ROOT_CA_FILE="$DEFAULT_ROOT_CA_FILE" POLICY_ISSUER_CHAIN_FILE="" # No default - mandatory when using --policy-v2 +SERVTD_SIGNER_ANCHOR_FILE="" +SERVTD_CORIM_FILE="" SRC_POLICY_FILE="" # Per-side overrides (optional) SRC_POLICY_ISSUER_CHAIN_FILE="" +SRC_SERVTD_SIGNER_ANCHOR_FILE="" +SRC_SERVTD_CORIM_FILE="" DST_POLICY_FILE="" DST_POLICY_ISSUER_CHAIN_FILE="" +DST_SERVTD_SIGNER_ANCHOR_FILE="" +DST_SERVTD_CORIM_FILE="" BUILD_MODE="$DEFAULT_BUILD_MODE" NUM_CPUS="$DEFAULT_NUM_CPUS" OPERATION="$DEFAULT_OPERATION" @@ -267,20 +280,48 @@ while [[ $# -gt 0 ]]; do EXPLICIT_POLICY_ISSUER_CHAIN=true shift 2 ;; + --servtd-signer-anchor-file) + SERVTD_SIGNER_ANCHOR_FILE="$2" + shift 2 + ;; + --servtd-corim-file) + SERVTD_CORIM_FILE="$2" + shift 2 + ;; --src-policy-file) SRC_POLICY_FILE="$2" + EXPLICIT_POLICY_FILE=true shift 2 ;; --src-policy-issuer-chain-file) SRC_POLICY_ISSUER_CHAIN_FILE="$2" + EXPLICIT_POLICY_ISSUER_CHAIN=true + shift 2 + ;; + --src-servtd-signer-anchor-file) + SRC_SERVTD_SIGNER_ANCHOR_FILE="$2" + shift 2 + ;; + --src-servtd-corim-file) + SRC_SERVTD_CORIM_FILE="$2" shift 2 ;; --dst-policy-file) DST_POLICY_FILE="$2" + EXPLICIT_POLICY_FILE=true shift 2 ;; --dst-policy-issuer-chain-file) DST_POLICY_ISSUER_CHAIN_FILE="$2" + EXPLICIT_POLICY_ISSUER_CHAIN=true + shift 2 + ;; + --dst-servtd-signer-anchor-file) + DST_SERVTD_SIGNER_ANCHOR_FILE="$2" + shift 2 + ;; + --dst-servtd-corim-file) + DST_SERVTD_CORIM_FILE="$2" shift 2 ;; --debug) @@ -365,6 +406,13 @@ if [[ "$OPERATION" == "rebind-prepare" || "$OPERATION" == "rebind-finalize" ]]; USE_POLICY_V2=true fi +if [[ -n "$SERVTD_SIGNER_ANCHOR_FILE" || -n "$SERVTD_CORIM_FILE" || + -n "$SRC_SERVTD_SIGNER_ANCHOR_FILE" || -n "$SRC_SERVTD_CORIM_FILE" || + -n "$DST_SERVTD_SIGNER_ANCHOR_FILE" || -n "$DST_SERVTD_CORIM_FILE" ]]; then + USE_CORIM_ONLY=true + USE_POLICY_V2=true +fi + # Automatically enable mock-report mode when mock-quote-file is specified if [[ -n "$MOCK_QUOTE_FILE" && "$USE_MOCK_REPORT" != true ]]; then echo -e "${YELLOW}Note: --mock-quote-file specified, automatically enabling --mock-report${NC}" @@ -415,6 +463,14 @@ if [[ "$RUN_BOTH" != true ]]; then fi fi +if [[ "$RUN_BOTH" == true ]]; then + ACTIVE_SIDES=(SRC DST) +elif [[ "$ROLE" == "source" ]]; then + ACTIVE_SIDES=(SRC) +else + ACTIVE_SIDES=(DST) +fi + # Change to MigTD directory cd "$(dirname "$0")" @@ -456,6 +512,16 @@ if [[ "$USE_POLICY_V2" == true && "$USE_MOCK_REPORT" == true && "$EXPLICIT_POLIC POLICY_ISSUER_CHAIN_FILE="./config/AzCVMEmu/policy_issuer_chain.pem" fi +# Resolve per-side policy and collateral files (fall back to shared values) +EFFECTIVE_SRC_POLICY_FILE="${SRC_POLICY_FILE:-$POLICY_FILE}" +EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE="${SRC_POLICY_ISSUER_CHAIN_FILE:-$POLICY_ISSUER_CHAIN_FILE}" +EFFECTIVE_SRC_SERVTD_SIGNER_ANCHOR_FILE="${SRC_SERVTD_SIGNER_ANCHOR_FILE:-$SERVTD_SIGNER_ANCHOR_FILE}" +EFFECTIVE_SRC_SERVTD_CORIM_FILE="${SRC_SERVTD_CORIM_FILE:-$SERVTD_CORIM_FILE}" +EFFECTIVE_DST_POLICY_FILE="${DST_POLICY_FILE:-$POLICY_FILE}" +EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE="${DST_POLICY_ISSUER_CHAIN_FILE:-$POLICY_ISSUER_CHAIN_FILE}" +EFFECTIVE_DST_SERVTD_SIGNER_ANCHOR_FILE="${DST_SERVTD_SIGNER_ANCHOR_FILE:-$SERVTD_SIGNER_ANCHOR_FILE}" +EFFECTIVE_DST_SERVTD_CORIM_FILE="${DST_SERVTD_CORIM_FILE:-$SERVTD_CORIM_FILE}" + # Validate policy v2 requirements if [[ "$USE_POLICY_V2" == true ]]; then if [[ "$POLICY_FILE" == "$DEFAULT_POLICY_FILE" && -z "$SRC_POLICY_FILE" && -z "$DST_POLICY_FILE" ]]; then @@ -463,19 +529,22 @@ if [[ "$USE_POLICY_V2" == true ]]; then echo -e "${YELLOW}Example: $0 --policy-v2 --policy-file ./config/AzCVMEmu/policy_v2_signed.json --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem --debug --both${NC}" >&2 exit 1 fi - if [[ -z "$POLICY_ISSUER_CHAIN_FILE" && -z "$SRC_POLICY_ISSUER_CHAIN_FILE" && -z "$DST_POLICY_ISSUER_CHAIN_FILE" ]]; then - echo -e "${RED}Error: When using --policy-v2, you must specify a policy issuer chain file with --policy-issuer-chain-file${NC}" >&2 - echo -e "${YELLOW}Example: $0 --policy-v2 --policy-file ./config/AzCVMEmu/policy_v2_signed.json --policy-issuer-chain-file ./config/AzCVMEmu/policy_issuer_chain.pem --debug --both${NC}" >&2 - exit 1 - fi + for side in "${ACTIVE_SIDES[@]}"; do + eval "chain=\$EFFECTIVE_${side}_POLICY_ISSUER_CHAIN_FILE" + eval "anchor=\$EFFECTIVE_${side}_SERVTD_SIGNER_ANCHOR_FILE" + eval "corim=\$EFFECTIVE_${side}_SERVTD_CORIM_FILE" + if [[ -n "$anchor" || -n "$corim" ]]; then + if [[ -z "$anchor" || -z "$corim" ]]; then + echo -e "${RED}Error: ${side} signer anchor and signed CoRIM must be specified together${NC}" >&2 + exit 1 + fi + elif [[ -z "$chain" ]]; then + echo -e "${RED}Error: ${side} policy v2 requires an issuer chain or both CoRIM-only inputs${NC}" >&2 + exit 1 + fi + done fi -# Resolve per-side policy files (fall back to shared values) -EFFECTIVE_SRC_POLICY_FILE="${SRC_POLICY_FILE:-$POLICY_FILE}" -EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE="${SRC_POLICY_ISSUER_CHAIN_FILE:-$POLICY_ISSUER_CHAIN_FILE}" -EFFECTIVE_DST_POLICY_FILE="${DST_POLICY_FILE:-$POLICY_FILE}" -EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE="${DST_POLICY_ISSUER_CHAIN_FILE:-$POLICY_ISSUER_CHAIN_FILE}" - # Build features string based on configuration build_features_string() { local features="AzCVMEmu" @@ -494,6 +563,10 @@ build_features_string() { features="$features,mock_quote_retry" fi + if [[ "$USE_CORIM_ONLY" == true ]]; then + features="$features,servtd_corim" + fi + if [[ -n "$EXTRA_FEATURES" ]]; then features="$features,$EXTRA_FEATURES" fi @@ -515,11 +588,22 @@ else fi # Check if configuration files exist -check_file "$EFFECTIVE_SRC_POLICY_FILE" "Source Policy" -check_file "$EFFECTIVE_DST_POLICY_FILE" "Destination Policy" +for side in "${ACTIVE_SIDES[@]}"; do + eval "policy=\$EFFECTIVE_${side}_POLICY_FILE" + check_file "$policy" "$side Policy" +done if [[ "$USE_POLICY_V2" == true ]]; then - check_file "$EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE" "Source Policy Issuer Chain" - check_file "$EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE" "Destination Policy Issuer Chain" + for side in "${ACTIVE_SIDES[@]}"; do + eval "chain=\$EFFECTIVE_${side}_POLICY_ISSUER_CHAIN_FILE" + eval "anchor=\$EFFECTIVE_${side}_SERVTD_SIGNER_ANCHOR_FILE" + eval "corim=\$EFFECTIVE_${side}_SERVTD_CORIM_FILE" + if [[ -n "$anchor" ]]; then + check_file "$anchor" "$side ServTD Signer Anchor" + check_file "$corim" "$side Signed ServTD CoRIM" + else + check_file "$chain" "$side Policy Issuer Chain" + fi + done else check_file "$ROOT_CA_FILE" "Root CA" fi @@ -561,9 +645,17 @@ run_cmd() { esac done if $USE_SUDO; then - sudo env "${env_kv[@]}" $TASKSET_CMD "$@" + sudo env \ + -u MIGTD_POLICY_ISSUER_CHAIN_FILE \ + -u MIGTD_SERVTD_SIGNER_ANCHOR_FILE \ + -u MIGTD_SERVTD_CORIM_FILE \ + "${env_kv[@]}" $TASKSET_CMD "$@" else - env "${env_kv[@]}" $TASKSET_CMD "$@" + env \ + -u MIGTD_POLICY_ISSUER_CHAIN_FILE \ + -u MIGTD_SERVTD_SIGNER_ANCHOR_FILE \ + -u MIGTD_SERVTD_CORIM_FILE \ + "${env_kv[@]}" $TASKSET_CMD "$@" fi } @@ -631,7 +723,12 @@ elif [[ -n "$SRC_POLICY_FILE" || -n "$DST_POLICY_FILE" ]]; then echo " Dest policy file: $EFFECTIVE_DST_POLICY_FILE" echo " Dest issuer chain: $EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE" else - echo " Policy issuer chain file: $POLICY_ISSUER_CHAIN_FILE" + if [[ "$USE_CORIM_ONLY" == true ]]; then + echo " ServTD signer anchor: $SERVTD_SIGNER_ANCHOR_FILE" + echo " Signed ServTD CoRIM: $SERVTD_CORIM_FILE" + else + echo " Policy issuer chain file: $POLICY_ISSUER_CHAIN_FILE" + fi fi if [[ -n "$MOCK_QUOTE_FILE" ]]; then @@ -672,7 +769,12 @@ if [[ "$RUN_BOTH" == true ]]; then DEST_OUT_LOG="dest_${OPERATION}_out.log" # Build environment variable list for destination - DEST_ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_DST_POLICY_FILE" "MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE" "MIGTD_LOG_FILE=$DEST_LOG_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + DEST_ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_DST_POLICY_FILE" "MIGTD_LOG_FILE=$DEST_LOG_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + if [[ -n "$EFFECTIVE_DST_SERVTD_SIGNER_ANCHOR_FILE" ]]; then + DEST_ENV_VARS+=("MIGTD_SERVTD_SIGNER_ANCHOR_FILE=$EFFECTIVE_DST_SERVTD_SIGNER_ANCHOR_FILE" "MIGTD_SERVTD_CORIM_FILE=$EFFECTIVE_DST_SERVTD_CORIM_FILE") + else + DEST_ENV_VARS+=("MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE") + fi if [[ "$USE_POLICY_V2" != true ]]; then DEST_ENV_VARS+=("MIGTD_ROOT_CA_FILE=$ROOT_CA_FILE") fi @@ -714,7 +816,12 @@ if [[ "$RUN_BOTH" == true ]]; then SRC_LOG_FILE="migtd_${OPERATION}_source.log" # Build environment variable list for source - SRC_ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_SRC_POLICY_FILE" "MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE" "MIGTD_LOG_FILE=$SRC_LOG_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + SRC_ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_SRC_POLICY_FILE" "MIGTD_LOG_FILE=$SRC_LOG_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + if [[ -n "$EFFECTIVE_SRC_SERVTD_SIGNER_ANCHOR_FILE" ]]; then + SRC_ENV_VARS+=("MIGTD_SERVTD_SIGNER_ANCHOR_FILE=$EFFECTIVE_SRC_SERVTD_SIGNER_ANCHOR_FILE" "MIGTD_SERVTD_CORIM_FILE=$EFFECTIVE_SRC_SERVTD_CORIM_FILE") + else + SRC_ENV_VARS+=("MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE") + fi if [[ "$USE_POLICY_V2" != true ]]; then SRC_ENV_VARS+=("MIGTD_ROOT_CA_FILE=$ROOT_CA_FILE") fi @@ -774,9 +881,19 @@ else # Build environment variable list (use per-side values based on role) if [[ "$ROLE" == "source" ]]; then - ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_SRC_POLICY_FILE" "MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_SRC_POLICY_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + if [[ -n "$EFFECTIVE_SRC_SERVTD_SIGNER_ANCHOR_FILE" ]]; then + ENV_VARS+=("MIGTD_SERVTD_SIGNER_ANCHOR_FILE=$EFFECTIVE_SRC_SERVTD_SIGNER_ANCHOR_FILE" "MIGTD_SERVTD_CORIM_FILE=$EFFECTIVE_SRC_SERVTD_CORIM_FILE") + else + ENV_VARS+=("MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_SRC_POLICY_ISSUER_CHAIN_FILE") + fi else - ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_DST_POLICY_FILE" "MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + ENV_VARS=("MIGTD_POLICY_FILE=$EFFECTIVE_DST_POLICY_FILE" "RUST_BACKTRACE=$RUST_BACKTRACE" "RUST_LOG=$RUST_LOG") + if [[ -n "$EFFECTIVE_DST_SERVTD_SIGNER_ANCHOR_FILE" ]]; then + ENV_VARS+=("MIGTD_SERVTD_SIGNER_ANCHOR_FILE=$EFFECTIVE_DST_SERVTD_SIGNER_ANCHOR_FILE" "MIGTD_SERVTD_CORIM_FILE=$EFFECTIVE_DST_SERVTD_CORIM_FILE") + else + ENV_VARS+=("MIGTD_POLICY_ISSUER_CHAIN_FILE=$EFFECTIVE_DST_POLICY_ISSUER_CHAIN_FILE") + fi fi if [[ "$USE_POLICY_V2" != true ]]; then ENV_VARS+=("MIGTD_ROOT_CA_FILE=$ROOT_CA_FILE") diff --git a/sh_script/Azure/Dockerfile b/sh_script/Azure/Dockerfile new file mode 100644 index 000000000..b8e256b22 --- /dev/null +++ b/sh_script/Azure/Dockerfile @@ -0,0 +1,59 @@ +# Reproducible build environment for the MigTD **Azure IGVM** image. +# +# This image only provides the toolchain; the source tree is supplied at run +# time by sh_script/Azure/docker_build_igvm.sh, which runs the Azure Makefile +# (`make build-igvm-all`) inside a container and extracts target/release/migtd.igvm. +# +# The base image is pinned by digest to the SAME ubuntu release used by +# container/Dockerfile. This is deliberate: the IGVM payload statically links +# the `ring` crate whose C sources are compiled by the image's clang/llvm, so +# the exact compiler build (frozen by the digest) is what makes the resulting +# IGVM bit-for-bit reproducible. See readme.md "Reproducible Build" and +# doc/reproducible_build.md. +FROM ubuntu:26.04@sha256:53958ec7b67c2c9355df922dd08dbf0360611f8c3cdb656875e81873db9ffdba + +# Adding rust binaries to PATH. +ENV PATH="$PATH:/root/.cargo/bin" +ENV RUST_TOOLCHAIN=1.88.0 +WORKDIR /root + +# Install all build dependencies in one layer. +# - clang/llvm/nasm : compile and assemble the `ring` crypto crate +# - ocaml/ocamlbuild/automake/autoconf/libtool/cmake/perl/make/libssl-dev : +# build the SGX/DCAP attestation library (deps/linux-sgx) pulled in by the +# `igvm-attest` build (attestation/build.rs only skips it under feature "test") +# - git : required by sh_script/preparation.sh to (re)patch the `ring` submodule +# DEBIAN_FRONTEND is set for tzdata. Use HTTPS because GitHub-hosted runners +# may not allow package downloads over port 80, and retry transient failures. +# The minimal Ubuntu image has no CA bundle, so bootstrap ca-certificates with +# TLS peer verification disabled; APT still verifies the signed Ubuntu index +# and package before the remaining downloads use fully verified HTTPS. +RUN sed -i \ + -e 's|http://archive.ubuntu.com|https://archive.ubuntu.com|g' \ + -e 's|http://security.ubuntu.com|https://security.ubuntu.com|g' \ + /etc/apt/sources.list.d/ubuntu.sources && \ + apt-get -o Acquire::Retries=5 -o Acquire::https::Timeout=30 \ + -o Acquire::https::Verify-Peer=false update && \ + DEBIAN_FRONTEND="noninteractive" apt-get \ + -o Acquire::Retries=5 -o Acquire::https::Timeout=30 \ + -o Acquire::https::Verify-Peer=false \ + install --no-install-recommends -y ca-certificates && \ + apt-get -o Acquire::Retries=5 -o Acquire::https::Timeout=30 update && \ + DEBIAN_FRONTEND="noninteractive" apt-get \ + -o Acquire::Retries=5 -o Acquire::https::Timeout=30 \ + install --no-install-recommends -y \ + build-essential unzip curl gcc git libssl-dev pkg-config ssh \ + clang llvm nasm \ + ocaml ocamlbuild wget libtool autoconf autotools-dev automake cmake perl \ + python3 python3-pip python-is-python3 jq \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Install rustup and the pinned Rust toolchain, plus the bare-metal target and +# rust-src component used by `cargo image`. +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain "${RUST_TOOLCHAIN}" --profile minimal && \ + rustup component add rust-src && \ + rustup target add x86_64-unknown-none + +# The build script copies the MigTD source tree here at run time. +RUN mkdir -p /root/MigTD +WORKDIR /root/MigTD diff --git a/sh_script/Azure/Makefile b/sh_script/Azure/Makefile index 5644111c6..9cab2164d 100644 --- a/sh_script/Azure/Makefile +++ b/sh_script/Azure/Makefile @@ -1,22 +1,28 @@ # # Copyright (C) 2011-2021 Intel Corporation. All rights reserved. # +# all targets in this Makefile are for building IGVM images for testing only. +# +# For a pinned, reproducible build of these targets inside Docker (recommended +# for release artifacts), use the wrapper: +# ./docker_build_igvm.sh # build the local tree's IGVM +# ./docker_build_igvm.sh --help # options (target, --clone, output dir) IGVM_FILE ?= target/release/migtd.igvm LOG_LEVEL ?= trace # Common features for IGVM images IGVM_FEATURES_BASE ?= vmcall-raw,stack-guard,main,vmcall-interrupt,oneshot-apic,spdm_attestation -IGVM_FEATURES_GET_QUOTE ?= $(IGVM_FEATURES_BASE),igvm-attest -# test_disable_ra_and_accept_all feature disables remote attestation and skips policy verification, bypassing RATLS security -# test feature skips the compilation of attestation library when the remote attestation is not enabled or needed -IGVM_FEATURES_DISABLE_RA_AND_ACCEPT_ALL ?= $(IGVM_FEATURES_BASE),test_disable_ra_and_accept_all +IGVM_FEATURES_GET_QUOTE = $(IGVM_FEATURES_BASE),igvm-attest +IGVM_FEATURES_MOCK_QUOTE = $(IGVM_FEATURES_BASE),use-mock-quote +IGVM_FEATURES_GET_QUOTE_TEST = $(IGVM_FEATURES_GET_QUOTE),test-get-quote IGVM_MANIFEST ?= config/Azure/servtd_info.json -.PHONY: generate-hash-accept build-igvm-accept build-igvm-accept-all -.PHONY: pre-build build-igvm generate-hash build-igvm-all -.PHONY: build-igvm-reject build-igvm-reject-all -.PHONY: generate-hash-verbose generate-hash-accept-verbose -.PHONY: build-igvm-get-quote build-igvm-get-quote-all generate-hash-get-quote +.PHONY: pre-build generate-hash generate-hash-v2 generate-hash-v2-verbose generate-hash-verbose +.PHONY: generate-hash-accept generate-hash-get-quote +.PHONY: generate-policy-accept build-igvm-accept build-igvm-accept-all +.PHONY: generate-policy-reject build-igvm-reject build-igvm-reject-all test-reject +.PHONY: build-igvm build-igvm-all build-igvm-v2-mock +.PHONY: build-igvm-get-quote build-igvm-get-quote-all .PHONY: build-igvm-mock-quote generate-policy-mock-quote .PHONY: build-igvm-mock-quote-allow-all generate-policy-mock-quote-allow-all @@ -25,12 +31,13 @@ IGVM_MANIFEST ?= config/Azure/servtd_info.json help: @echo "Available targets:" @echo " build-igvm-all - Build IGVM" - @echo " build-igvm-accept-all - Build IGVM with disabled RA and accept all policy with TLS" - @echo " build-igvm-reject - Build IGVM with v1 policy which will be rejected because on empty quote generation." - @echo " build-igvm-reject-all - Build IGVM with v1 policy which will be rejected because on empty quote generation." - @echo " build-igvm-get-quote-all - Build IGVM with v2 policy which will call getquote durining initialization." + @echo " build-igvm-accept-all - Build IGVM with allow-all v2 policy using mock quote data" + @echo " build-igvm-reject-all - Build IGVM with bad-FMSPC v2 policy (migration will be rejected)" + @echo " build-igvm-get-quote-all - Build IGVM with v2 policy to test the getquote during initialization.(no successful migration expected)" @echo " build-igvm-mock-quote - Build IGVM with v2 policy using mock quote data for testing." @echo " build-igvm-mock-quote-allow-all - Build IGVM with allow-all v2 policy using mock quote data." + @echo "" + @echo "Reproducible Docker build (wraps the above): ./docker_build_igvm.sh --help" pre-build: @if ! command -v rustc >/dev/null 2>&1 || ! rustc --version | grep -q "1.88.0"; then \ @@ -50,49 +57,102 @@ pre-build: chmod +x ../../sh_script/preparation.sh cd ../../ && ./sh_script/preparation.sh -build-igvm-accept: - cd ../../ && cargo image --no-default-features --features $(IGVM_FEATURES_DISABLE_RA_AND_ACCEPT_ALL) \ - --log-level $(LOG_LEVEL) --image-format igvm --output $(IGVM_FILE) --debug +# --- Hash generation (shared) --- + +generate-hash: + cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --manifest $(IGVM_MANIFEST) --policy-v2 + +generate-hash-verbose: + cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --manifest $(IGVM_MANIFEST) --verbose --policy-v2 -generate-hash-accept: - cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --test-disable-ra-and-accept-all \ - --manifest $(IGVM_MANIFEST) +generate-hash-v2: generate-hash -generate-hash-accept-verbose: - cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --test-disable-ra-and-accept-all \ - --verbose +generate-hash-accept: generate-hash-v2 -build-igvm-accept-all: pre-build build-igvm-accept generate-hash-accept +generate-hash-get-quote: generate-hash-v2 -generate-hash: - cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --manifest $(IGVM_MANIFEST) +generate-hash-v2-verbose: generate-hash-verbose + +# --- Default (same as get-quote, kept for pipeline) --- build-igvm: cd ../../ && cargo image --no-default-features --features $(IGVM_FEATURES_GET_QUOTE) --log-level $(LOG_LEVEL) \ - --image-format igvm --output $(IGVM_FILE) --debug + --image-format igvm --output $(IGVM_FILE) --debug \ + --policy-v2 --policy config/templates/policy_v2_signed.json \ + --policy-issuer-chain config/templates/policy_issuer_chain.pem \ + --root-ca config/Intel_SGX_Provisioning_Certification_RootCA_preproduction.cer -build-igvm-all: pre-build build-igvm generate-hash +build-igvm-all: pre-build build-igvm generate-hash-v2 -build-igvm-reject: - cd ../../ && cargo image --no-default-features --features $(IGVM_FEATURES_BASE) --log-level $(LOG_LEVEL) \ - --image-format igvm --output $(IGVM_FILE) --debug +# --- Shared v2 mock-quote IGVM build (used by accept, reject, mock-quote targets) --- -build-igvm-reject-all: pre-build build-igvm-reject generate-hash +build-igvm-v2-mock: + ./build_mock_quote_igvm.sh $(MOCK_POLICY_ARGS) \ + --log-level $(LOG_LEVEL) \ + --output $(IGVM_FILE) -generate-hash-verbose: - cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --verbose --manifest $(IGVM_MANIFEST) +# --- Accept-all (allow-all v2 policy + mock quote) --- -build-igvm-get-quote: - cd ../../ && cargo image --no-default-features --features $(IGVM_FEATURES_GET_QUOTE) --log-level $(LOG_LEVEL) \ +generate-policy-accept: + chmod +x ./build_azure_mock_test.sh + ./build_azure_mock_test.sh --allow-all + @if [ $$? -ne 0 ]; then \ + echo "Failed to generate allow-all policy with mock report"; \ + exit 1; \ + fi + +build-igvm-accept: pre-build + $(MAKE) build-igvm-v2-mock MOCK_POLICY_ARGS=--allow-all + +build-igvm-accept-all: build-igvm-accept generate-hash-v2 + +# --- Reject-all (bad-FMSPC v2 policy + mock quote) --- + +generate-policy-reject: + chmod +x ./build_azure_mock_test.sh + ./build_azure_mock_test.sh --reject --skip-test + @if [ $$? -ne 0 ]; then \ + echo "Failed to generate reject policy with mock report"; \ + exit 1; \ + fi + +build-igvm-reject: pre-build + $(MAKE) build-igvm-v2-mock MOCK_POLICY_ARGS=--reject + +build-igvm-reject-all: build-igvm-reject test-reject generate-hash-v2 + +test-reject: + @echo "Running reject test (expecting migration failure with code 8)..." + cd ../../ && ./migtdemu.sh --policy-v2 \ + --policy-file config/Azure/policy_v2_signed.json \ + --policy-issuer-chain-file config/Azure/policy_issuer_chain.pem \ + --mock-report --both --no-sudo --log-level info; \ + EXIT_CODE=$$?; \ + if [ $$EXIT_CODE -eq 0 ]; then \ + echo "ERROR: Migration succeeded but should have been rejected!"; \ + exit 1; \ + fi; \ + if grep -q "code.* 8\|code: 8" migtd_migration_source.log 2>/dev/null; then \ + echo "✓ Reject test passed: migration correctly rejected with code 8"; \ + else \ + echo "ERROR: Migration failed but not with expected code 8"; \ + grep -i "failed\|error" migtd_migration_source.log 2>/dev/null | tail -5; \ + exit 1; \ + fi + +# --- Get-quote (v2 policy with real quote) --- + +# For testing getquote during initialization, no successful migration is expected. +build-igvm-get-quote: pre-build + cd ../../ && cargo image --no-default-features --features $(IGVM_FEATURES_GET_QUOTE_TEST) --log-level $(LOG_LEVEL) \ --image-format igvm --output $(IGVM_FILE) --debug \ --policy-v2 --policy config/templates/policy_v2_signed.json \ --policy-issuer-chain config/templates/policy_issuer_chain.pem \ --root-ca config/Intel_SGX_Provisioning_Certification_RootCA_preproduction.cer -generate-hash-get-quote: - cd ../../ && cargo run -p migtd-hash -- --image $(IGVM_FILE) --manifest $(IGVM_MANIFEST) --policy-v2 +build-igvm-get-quote-all: build-igvm-get-quote generate-hash-v2 -build-igvm-get-quote-all: pre-build build-igvm-get-quote generate-hash-get-quote +# --- Mock-quote (v2 policy + mock quote for testing) --- generate-policy-mock-quote: chmod +x ./build_azure_mock_test.sh @@ -102,15 +162,10 @@ generate-policy-mock-quote: exit 1; \ fi -build-igvm-mock-quote: pre-build generate-policy-mock-quote - cd ../../ && cargo image --policy-v2 --debug \ - --image-format igvm \ - --no-default-features \ - --features $(IGVM_FEATURES_BASE),use-mock-quote \ - --log-level $(LOG_LEVEL) \ - --policy-issuer-chain config/Azure/policy_issuer_chain.pem \ - --policy config/Azure/policy_v2_signed.json \ - --output $(IGVM_FILE) +build-igvm-mock-quote: pre-build + $(MAKE) build-igvm-v2-mock + +# --- Mock-quote allow-all --- generate-policy-mock-quote-allow-all: chmod +x ./build_azure_mock_test.sh @@ -120,13 +175,5 @@ generate-policy-mock-quote-allow-all: exit 1; \ fi -build-igvm-mock-quote-allow-all: pre-build generate-policy-mock-quote-allow-all - cd ../../ && cargo image --policy-v2 --debug \ - --image-format igvm \ - --no-default-features \ - --features $(IGVM_FEATURES_BASE),use-mock-quote \ - --log-level $(LOG_LEVEL) \ - --policy-issuer-chain config/Azure/policy_issuer_chain.pem \ - --policy config/Azure/policy_v2_signed.json \ - --output $(IGVM_FILE) - +build-igvm-mock-quote-allow-all: pre-build + $(MAKE) build-igvm-v2-mock MOCK_POLICY_ARGS=--allow-all diff --git a/sh_script/Azure/build_azure_mock_test.sh b/sh_script/Azure/build_azure_mock_test.sh index 5b1061c1d..32381bd90 100755 --- a/sh_script/Azure/build_azure_mock_test.sh +++ b/sh_script/Azure/build_azure_mock_test.sh @@ -85,6 +85,7 @@ TOOLS_DIR="$PROJECT_ROOT/target/release" # Input Files POLICY_DATA_RAW="$SOURCE_MATERIAL_DIR/policy_data_raw.json" POLICY_ALLOW_ALL_DATA_RAW="$SOURCE_MATERIAL_DIR/policy_allow_all_data_raw.json" +POLICY_REJECT_DATA_RAW="$SOURCE_MATERIAL_DIR/policy_reject_data_raw.json" TD_IDENTITY_TEMPLATE="$SOURCE_MATERIAL_DIR/td_identity.json" TCB_MAPPING_TEMPLATE="$SOURCE_MATERIAL_DIR/tcb_mapping.json" COLLATERALS_FILE="$SOURCE_MATERIAL_DIR/collateral_thim.json" @@ -141,6 +142,7 @@ generate_certificates() { local cert_validity_days="${3:-365}" local root_ca_subject="${4:-/CN=MigTD Root CA/O=Microsoft Corporation}" local leaf_subject="${5:-/CN=MigTD Policy Issuer/O=Microsoft Corporation}" + local signer_eku_oid="${MIGTD_SIGNER_EKU_OID:-1.3.6.1.4.1.32473.1.1}" # Validate key type first if [ "$key_type" != "P384" ]; then @@ -191,7 +193,7 @@ generate_certificates() { -days $cert_validity_days \ -$hash_algo \ -extensions v3_ca \ - -extfile <(echo -e "[v3_ca]\nkeyUsage = digitalSignature") + -extfile <(printf '[v3_ca]\nkeyUsage = digitalSignature\nextendedKeyUsage = %s\n' "$signer_eku_oid") # Create certificate chain (leaf + root) echo "7. Creating certificate chain..." @@ -201,12 +203,107 @@ generate_certificates() { rm -f "$output_dir/policy_signing.csr" } +validate_rotated_leaf_certificates() { + local source_dir="$1" + local rotated_dir="$2" + local source_subject rotated_subject + local source_eku rotated_eku + + if ! cmp -s "$source_dir/root_ca.pem" "$rotated_dir/root_ca.pem"; then + echo "Error: Rotated leaf does not use the original root CA." >&2 + exit 1 + fi + + source_subject=$(openssl x509 -in "$source_dir/policy_signing.pem" \ + -noout -subject -nameopt RFC2253) + rotated_subject=$(openssl x509 -in "$rotated_dir/policy_signing.pem" \ + -noout -subject -nameopt RFC2253) + if [ "$source_subject" != "$rotated_subject" ]; then + echo "Error: Rotated leaf Subject Name differs from the original." >&2 + exit 1 + fi + + source_eku=$(openssl x509 -in "$source_dir/policy_signing.pem" \ + -noout -ext extendedKeyUsage) + rotated_eku=$(openssl x509 -in "$rotated_dir/policy_signing.pem" \ + -noout -ext extendedKeyUsage) + if [ "$source_eku" != "$rotated_eku" ]; then + echo "Error: Rotated leaf extended key usage differs from the original." >&2 + exit 1 + fi + + if cmp -s \ + <(openssl pkey -in "$source_dir/policy_signing.key" -pubout 2>/dev/null) \ + <(openssl pkey -in "$rotated_dir/policy_signing.key" -pubout 2>/dev/null); then + echo "Error: Rotated leaf reused the original public key." >&2 + exit 1 + fi +} + +generate_rotated_leaf_certificates() { + local source_dir="$1" + local output_dir="$2" + local curve_name + local hash_algo + local leaf_subject="/CN=MigTD Policy Issuer/O=Microsoft Corporation" + local signer_eku_oid="${MIGTD_SIGNER_EKU_OID:-1.3.6.1.4.1.32473.1.1}" + + for file in root_ca.key root_ca.pem policy_signing.key policy_signing.pem; do + if [ ! -f "$source_dir/$file" ]; then + echo "Error: Cannot rotate leaf; missing $source_dir/$file" >&2 + exit 1 + fi + done + + mkdir -p "$output_dir" + cp "$source_dir/root_ca.key" "$output_dir/root_ca.key" + cp "$source_dir/root_ca.pem" "$output_dir/root_ca.pem" + + curve_name=$(get_curve_name "P384") + hash_algo=$(get_hash_algorithm "P384") + + echo "Generating rotated policy signing private key..." + openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:$curve_name \ + -out "$output_dir/policy_signing.key" + openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt \ + -in "$output_dir/policy_signing.key" \ + -out "$output_dir/policy_signing_pkcs8.key" + openssl req -new \ + -key "$output_dir/policy_signing.key" \ + -out "$output_dir/policy_signing.csr" \ + -subj "$leaf_subject" + openssl x509 -req \ + -in "$output_dir/policy_signing.csr" \ + -CA "$output_dir/root_ca.pem" \ + -CAkey "$output_dir/root_ca.key" \ + -CAcreateserial \ + -out "$output_dir/policy_signing.pem" \ + -days 365 \ + -$hash_algo \ + -extensions v3_ca \ + -extfile <(printf '[v3_ca]\nkeyUsage = digitalSignature\nextendedKeyUsage = %s\n' "$signer_eku_oid") + cat "$output_dir/policy_signing.pem" "$output_dir/root_ca.pem" \ + > "$output_dir/policy_issuer_chain.pem" + rm -f "$output_dir/policy_signing.csr" + + validate_rotated_leaf_certificates "$source_dir" "$output_dir" +} + # Parse command line arguments USE_MOCK_REPORT=false MOCK_QUOTE_FILE="" FETCH_COLLATERALS=false AZURE_REGION="useast" ALLOW_ALL=false +REJECT=false +CERT_DIR_OVERRIDE="" +SERVTD_CERT_DIR_OVERRIDE="" +ROTATE_LEAF_FROM="" +MEASURED_IMAGE="" +MEASURED_MANIFEST="$PROJECT_ROOT/config/Azure/servtd_info.json" +RETAIN_MOCK_REPORT_MAPPING=false +POLICY_SVN_OVERRIDE="" +TCB_MAPPING_INPUT="" while [[ $# -gt 0 ]]; do case $1 in @@ -224,6 +321,10 @@ while [[ $# -gt 0 ]]; do ALLOW_ALL=true shift ;; + --reject) + REJECT=true + shift + ;; --fetch-collaterals) FETCH_COLLATERALS=true shift @@ -232,16 +333,76 @@ while [[ $# -gt 0 ]]; do AZURE_REGION="$2" shift 2 ;; + --cert-dir) + CERT_DIR_OVERRIDE="$2" + shift 2 + ;; + --rotate-leaf-from) + ROTATE_LEAF_FROM="$2" + shift 2 + ;; + --servtd-cert-dir) + SERVTD_CERT_DIR_OVERRIDE="$2" + shift 2 + ;; + --measured-image) + MEASURED_IMAGE="$2" + shift 2 + ;; + --measured-manifest) + MEASURED_MANIFEST="$2" + shift 2 + ;; + --retain-mock-report-mapping) + RETAIN_MOCK_REPORT_MAPPING=true + shift + ;; + --policy-svn) + POLICY_SVN_OVERRIDE="$2" + shift 2 + ;; + --tcb-mapping) + TCB_MAPPING_INPUT="$2" + shift 2 + ;; -h|--help) echo "Usage: $0 [OPTIONS]" echo echo "Options:" echo " --output-dir DIR Output directory for generated files (default: config/Azure)" echo " --allow-all Use allow-all policy rules (no TCB/platform/servtd checks)" + echo " --reject Use reject policy (bad FMSPC — migration will be rejected)" echo " --skip-test Skip running the MigTD test at the end" echo " --fetch-collaterals Fetch fresh collaterals from Azure THIM before generating policy" echo " --azure-region REGION Azure region for THIM (useast, westus, northeurope)" echo " (default: useast, applies with --fetch-collaterals)" + echo " --cert-dir DIR Reuse (or persist) the signing key + issuer chain in DIR" + echo " instead of a throwaway temp dir. If DIR already contains" + echo " a key + issuer chain, they are reused as-is (no new" + echo " certs generated, private key NOT deleted at the end)." + echo " Needed for a stable RTMR1 across multiple invocations," + echo " e.g. the two-phase measure-then-bind tcb_mapping flow." + echo " --rotate-leaf-from DIR Generate/reuse a new policy leaf key in --cert-dir," + echo " signed by DIR's root CA with the same leaf Subject Name." + echo " --servtd-cert-dir DIR Sign TD identity and TCB mapping collateral with DIR's" + echo " existing key/chain while the outer policy uses --cert-dir." + echo " This supports policy-leaf-only key rotation." + echo " --measured-image IGVM Add the REAL tdinfo_hash of an already-built MigTD IGVM" + echo " to the cumulative TCB mapping, instead of using" + echo " the mock report's synthetic values. Pairs with --cert-dir" + echo " in a two-phase build: (1) build a placeholder-policy image" + echo " with a persistent cert dir, (2) re-run with --measured-image" + echo " pointing at that image + the same --cert-dir to bind the real" + echo " measurements into the signed tcb_mapping/policy." + echo " --measured-manifest FILE Manifest used to measure --measured-image (default:" + echo " config/Azure/servtd_info.json)" + echo " --retain-mock-report-mapping Retain the synthetic mock-report tdinfo_hash" + echo " alongside --measured-image. Required for images" + echo " built with use-mock-quote, whose policy evaluation" + echo " resolves peer TCB metadata from the mock report." + echo " --policy-svn SVN Override policySvn before signing (test/release staging)" + echo " --tcb-mapping FILE Previous authority-maintained mapping to extend" + echo " (default: existing output, then config/Azure)" echo " -h, --help Show this help message" echo echo "Examples:" @@ -261,6 +422,11 @@ while [[ $# -gt 0 ]]; do esac done +if [ "$RETAIN_MOCK_REPORT_MAPPING" = true ] && [ -z "$MEASURED_IMAGE" ]; then + echo -e "${RED}--retain-mock-report-mapping requires --measured-image${NC}" >&2 + exit 1 +fi + echo "Configuration:" echo " Project root: $PROJECT_ROOT" echo " Source material: $SOURCE_MATERIAL_DIR" @@ -271,16 +437,28 @@ echo " Fetch collaterals: $FETCH_COLLATERALS" if [ "$FETCH_COLLATERALS" = true ]; then echo " Azure region: $AZURE_REGION" fi +if [ -n "$POLICY_SVN_OVERRIDE" ]; then + echo " Policy SVN override: $POLICY_SVN_OVERRIDE" +fi echo # Ensure output directory exists mkdir -p "$OUTPUT_DIR" +if [ -n "$CERT_DIR_OVERRIDE" ]; then + CERT_DIR="$CERT_DIR_OVERRIDE" + PRIVATE_KEY="$CERT_DIR/policy_signing_pkcs8.key" +fi +SERVTD_CERT_DIR="${SERVTD_CERT_DIR_OVERRIDE:-$CERT_DIR}" +SERVTD_PRIVATE_KEY="$SERVTD_CERT_DIR/policy_signing_pkcs8.key" mkdir -p "$CERT_DIR" # Select which policy data file to use if [ "$ALLOW_ALL" = true ]; then ACTIVE_POLICY_DATA_RAW="$POLICY_ALLOW_ALL_DATA_RAW" echo -e "${YELLOW}Using allow-all policy rules (no TCB/platform/servtd checks)${NC}" +elif [ "$REJECT" = true ]; then + ACTIVE_POLICY_DATA_RAW="$POLICY_REJECT_DATA_RAW" + echo -e "${YELLOW}Using reject policy (bad FMSPC — migration will be rejected)${NC}" else ACTIVE_POLICY_DATA_RAW="$POLICY_DATA_RAW" fi @@ -293,12 +471,21 @@ if [ ! -f "$TD_IDENTITY_TEMPLATE" ]; then fi if [ ! -f "$TCB_MAPPING_TEMPLATE" ]; then echo -e "${YELLOW}Generating default tcb_mapping.json template${NC}" - printf '{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","mrSigner":"%s","isvProdId":1,"svnMappings":[{"tdMeasurements":{"mrtd":"%s","rtmr0":"%s","rtmr1":"%s"},"isvsvn":1}]}' \ - "$(printf '0%.0s' {1..96})" "$(printf '0%.0s' {1..96})" "$(printf '0%.0s' {1..96})" "$(printf '0%.0s' {1..96})" > "$TCB_MAPPING_TEMPLATE" + cp "$PROJECT_ROOT/config/templates/tcb_mapping_seed.json" "$TCB_MAPPING_TEMPLATE" +fi + +if [[ -n "$TCB_MAPPING_INPUT" && "$TCB_MAPPING_INPUT" != /* ]]; then + TCB_MAPPING_INPUT="$PROJECT_ROOT/$TCB_MAPPING_INPUT" +fi +TCB_MAPPING_SOURCE="$TCB_MAPPING_TEMPLATE" +if [ -n "$TCB_MAPPING_INPUT" ]; then + TCB_MAPPING_SOURCE="$TCB_MAPPING_INPUT" +elif [ -f "$OUTPUT_DIR/tcb_mapping.json" ]; then + TCB_MAPPING_SOURCE="$OUTPUT_DIR/tcb_mapping.json" fi # Verify input files exist -for file in "$ACTIVE_POLICY_DATA_RAW"; do +for file in "$ACTIVE_POLICY_DATA_RAW" "$TCB_MAPPING_SOURCE"; do if [ ! -f "$file" ]; then echo -e "${RED}Error: Required input file not found: $file${NC}" >&2 exit 1 @@ -374,6 +561,9 @@ cargo build --release -p servtd-collateral-generator 2>&1 | grep -E "(Compiling| echo "Building migtd-policy-generator..." cargo build --release -p migtd-policy-generator 2>&1 | grep -E "(Compiling|Finished|error)" || true +echo "Building migtd-hash..." +cargo build --release -p migtd-hash 2>&1 | grep -E "(Compiling|Finished|error)" || true + # Verify tools exist # Note: azcvm-extract-report is in a different location if [ ! -f "$PROJECT_ROOT/deps/td-shim-AzCVMEmu/azcvm-extract-report/target/release/azcvm-extract-report" ]; then @@ -381,7 +571,7 @@ if [ ! -f "$PROJECT_ROOT/deps/td-shim-AzCVMEmu/azcvm-extract-report/target/relea exit 1 fi -for tool in json-signer servtd-collateral-generator migtd-policy-generator; do +for tool in json-signer servtd-collateral-generator migtd-policy-generator migtd-hash; do if [ ! -f "$TOOLS_DIR/$tool" ]; then echo -e "${RED}Error: Tool '$tool' not found at $TOOLS_DIR/$tool${NC}" >&2 exit 1 @@ -428,6 +618,23 @@ MRSIGNER=$(jq -r '.mrsigner // "000000000000000000000000000000000000000000000000 ISV_PROD_ID=$(jq -r '.isvProdId // 0' "$REPORT_DATA_FILE") ISVSVN=$(jq -r '.isvsvn // 1' "$REPORT_DATA_FILE") +# Select the source for the current release's tdinfo_hash. TD identity fields +# continue to come from the report; only the TCB mapping uses the measured +# image when requested. +MAPPING_MEASUREMENT_ARGS=(--from-report "$REPORT_DATA_FILE") +if [ -n "$MEASURED_IMAGE" ]; then + # Resolve to absolute paths since we're running from $TEMP_DIR. + MEASURED_IMAGE_ABS="$MEASURED_IMAGE" + [[ "$MEASURED_IMAGE_ABS" = /* ]] || MEASURED_IMAGE_ABS="$PROJECT_ROOT/$MEASURED_IMAGE" + MEASURED_MANIFEST_ABS="$MEASURED_MANIFEST" + [[ "$MEASURED_MANIFEST_ABS" = /* ]] || MEASURED_MANIFEST_ABS="$PROJECT_ROOT/$MEASURED_MANIFEST" + MAPPING_MEASUREMENT_ARGS=( + --manifest "$MEASURED_MANIFEST_ABS" + --image "$MEASURED_IMAGE_ABS" + ) + echo -e "${YELLOW}Using real tdinfo_hash measured from: $MEASURED_IMAGE${NC}" +fi + echo "Extracted measurements:" echo " MRTD: ${MRTD:0:32}..." echo " RTMR0: ${RTMR0:0:32}..." @@ -441,30 +648,79 @@ echo # Make sure no ending newline is added (important for signing) # echo -e "${BLUE}=== Step 3: Updating TD Identity Template ===${NC}" -# Set tcbDate and issueDate to current time so they satisfy the policy's -# servtd tcbDate reference (which uses an absolute date). -CURRENT_UTC=$(date -u +"%Y-%m-%dT%H:%M:%SZ") +# Conditionally update tcbDate and issueDate only when they are behind the +# policy's servtd tcbDate reference (greater-or-equal check). +POLICY_TCB_REF=$(jq -r ' + [.policy[] | .servtd.migtdIdentity.tcbDate.reference // empty] | + map(select(. != "")) | max // empty +' "$ACTIVE_POLICY_DATA_RAW" 2>/dev/null) + +DATE_UPDATES="" +if [ -n "$POLICY_TCB_REF" ]; then + CURRENT_UTC=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + TEMPLATE_TCB_DATE=$(jq -r '.tcbLevels[0].tcbDate' "$TD_IDENTITY_TEMPLATE") + TEMPLATE_ISSUE_DATE=$(jq -r '.issueDate' "$TD_IDENTITY_TEMPLATE") + if [[ "$TEMPLATE_TCB_DATE" < "$POLICY_TCB_REF" ]]; then + DATE_UPDATES="$DATE_UPDATES | .tcbLevels[0].tcbDate = \"$CURRENT_UTC\"" + echo -e " Updating tcbDate: $TEMPLATE_TCB_DATE -> $CURRENT_UTC (reference: $POLICY_TCB_REF)" + fi + if [[ "$TEMPLATE_ISSUE_DATE" < "$POLICY_TCB_REF" ]]; then + DATE_UPDATES="$DATE_UPDATES | .issueDate = \"$CURRENT_UTC\"" + echo -e " Updating issueDate: $TEMPLATE_ISSUE_DATE -> $CURRENT_UTC (reference: $POLICY_TCB_REF)" + fi +fi + jq -c ".xfam = \"$XFAM\" | .attributes = \"$ATTRIBUTES\" | .mrConfigId = \"$MR_CONFIG_ID\" | \ .mrOwner = \"$MR_OWNER\" | .mrOwnerConfig = \"$MR_OWNER_CONFIG\" | .mrsigner = \"$MRSIGNER\" | \ -.isvProdId = $ISV_PROD_ID | .tcbLevels[0].tcb.isvsvn = $ISVSVN | \ -.tcbLevels[0].tcbDate = \"$CURRENT_UTC\" | .issueDate = \"$CURRENT_UTC\"" \ +.isvProdId = $ISV_PROD_ID | .tcbLevels[0].tcb.isvsvn = $ISVSVN $DATE_UPDATES" \ "$TD_IDENTITY_TEMPLATE" | tr -d '\n' > "$TD_IDENTITY_UPDATED" echo -e "${GREEN}✓ TD Identity updated: $TD_IDENTITY_UPDATED${NC}" echo # -# Step 4: Update tcb_mapping.json with extracted measurements +# Step 4: Update the cumulative tcb_mapping.json with the v2 tdinfo_hash # Make sure no ending newline is added (important for signing) # -echo -e "${BLUE}=== Step 4: Updating TCB Mapping Template ===${NC}" -jq -c ".svnMappings[0].tdMeasurements.mrtd = \"$MRTD\" | \ -.svnMappings[0].tdMeasurements.rtmr0 = \"$RTMR0\" | \ -.svnMappings[0].tdMeasurements.rtmr1 = \"$RTMR1\" | \ -.svnMappings[0].isvsvn = $ISVSVN" \ -"$TCB_MAPPING_TEMPLATE" | tr -d '\n' > "$TCB_MAPPING_UPDATED" +# The Rust helper retains all supported historical hashes, replaces the +# current hash by key, rejects conflicting duplicates, applies only explicit +# revocations, and emits deterministic compact JSON for signing. It computes +# the hash through the same migtd-hash path used by the release pipeline. +# +echo -e "${BLUE}=== Step 4: Updating Cumulative TCB Mapping ===${NC}" + +TDINFO_HASH_FILE="$TEMP_DIR/tdinfo_hash.hex" +MAPPING_UPDATE_SOURCE="$TCB_MAPPING_SOURCE" +if [ "$RETAIN_MOCK_REPORT_MAPPING" = true ]; then + MOCK_MAPPING_UPDATED="$TEMP_DIR/tcb_mapping_with_mock_report.json" + MOCK_TDINFO_HASH_FILE="$TEMP_DIR/mock_tdinfo_hash.hex" + "$TOOLS_DIR/migtd-hash" \ + --policy-v2 \ + --from-report "$REPORT_DATA_FILE" \ + --output-tdinfo-hash "$MOCK_TDINFO_HASH_FILE" \ + --update-tcb-mapping "$TCB_MAPPING_SOURCE" \ + --output-tcb-mapping "$MOCK_MAPPING_UPDATED" \ + --mapping-isvsvn "$ISVSVN" + MAPPING_UPDATE_SOURCE="$MOCK_MAPPING_UPDATED" + MOCK_TDINFO_HASH=$(tr 'a-z' 'A-Z' < "$MOCK_TDINFO_HASH_FILE") + echo -e " retaining mock-report tdinfo_hash = $MOCK_TDINFO_HASH" +fi +MAPPING_UPDATE_ARGS=( + --update-tcb-mapping "$MAPPING_UPDATE_SOURCE" + --output-tcb-mapping "$TCB_MAPPING_UPDATED" + --mapping-isvsvn "$ISVSVN" +) +"$TOOLS_DIR/migtd-hash" \ + --policy-v2 \ + "${MAPPING_MEASUREMENT_ARGS[@]}" \ + --output-tdinfo-hash "$TDINFO_HASH_FILE" \ + "${MAPPING_UPDATE_ARGS[@]}" +# Uppercase to match the convention used by signed policies. +TDINFO_HASH=$(tr 'a-z' 'A-Z' < "$TDINFO_HASH_FILE") echo -e "${GREEN}✓ TCB Mapping updated: $TCB_MAPPING_UPDATED${NC}" +echo -e " history source = $TCB_MAPPING_SOURCE" +echo -e " tdinfo_hash = $TDINFO_HASH" echo # @@ -481,9 +737,24 @@ echo # Step 5: Generate certificates and signing key # echo -e "${BLUE}=== Step 5: Generating Certificates ===${NC}" -generate_certificates "$CERT_DIR" "P384" 365 +if [ -n "$ROTATE_LEAF_FROM" ] && + [ -f "$PRIVATE_KEY" ] && + [ -f "$CERT_DIR/policy_issuer_chain.pem" ]; then + echo "Reusing rotated certificate chain + signing key in: $CERT_DIR" + validate_rotated_leaf_certificates "$ROTATE_LEAF_FROM" "$CERT_DIR" +elif [ -n "$ROTATE_LEAF_FROM" ]; then + generate_rotated_leaf_certificates "$ROTATE_LEAF_FROM" "$CERT_DIR" +elif [ -n "$CERT_DIR_OVERRIDE" ] && [ -f "$PRIVATE_KEY" ] && [ -f "$CERT_DIR/policy_issuer_chain.pem" ]; then + echo "Reusing existing certificate chain + signing key in: $CERT_DIR" +else + generate_certificates "$CERT_DIR" "P384" 365 +fi echo -e "${GREEN}✓ Certificates generated in: $CERT_DIR${NC}" +if [ ! -f "$SERVTD_PRIVATE_KEY" ] || [ ! -f "$SERVTD_CERT_DIR/policy_issuer_chain.pem" ]; then + echo "Error: ServTD signing key/chain not found in: $SERVTD_CERT_DIR" >&2 + exit 1 +fi echo # @@ -493,7 +764,7 @@ echo -e "${BLUE}=== Step 6: Signing TD Identity ===${NC}" "$TOOLS_DIR/json-signer" \ --sign \ --name "tdIdentity" \ - --private-key "$PRIVATE_KEY" \ + --private-key "$SERVTD_PRIVATE_KEY" \ --input "$TD_IDENTITY_UPDATED" \ --output "$TD_IDENTITY_SIGNED" @@ -507,7 +778,7 @@ echo -e "${BLUE}=== Step 7: Signing TCB Mapping ===${NC}" "$TOOLS_DIR/json-signer" \ --sign \ --name "tdTcbMapping" \ - --private-key "$PRIVATE_KEY" \ + --private-key "$SERVTD_PRIVATE_KEY" \ --input "$TCB_MAPPING_UPDATED" \ --output "$TCB_MAPPING_SIGNED" @@ -518,8 +789,8 @@ echo # Step 8: Generate servtd_collateral.json # echo -e "${BLUE}=== Step 8: Generating ServTD Collateral ===${NC}" -IDENTITY_CHAIN="$CERT_DIR/policy_issuer_chain.pem" -MAPPING_CHAIN="$CERT_DIR/policy_issuer_chain.pem" +IDENTITY_CHAIN="$SERVTD_CERT_DIR/policy_issuer_chain.pem" +MAPPING_CHAIN="$SERVTD_CERT_DIR/policy_issuer_chain.pem" "$TOOLS_DIR/servtd-collateral-generator" \ --identity "$TD_IDENTITY_SIGNED" \ @@ -541,6 +812,14 @@ echo -e "${BLUE}=== Step 9: Merging Policy Data ===${NC}" --servtd-collateral "$SERVTD_COLLATERAL" \ --output "$POLICY_DATA_MERGED" +if [ -n "$POLICY_SVN_OVERRIDE" ]; then + POLICY_DATA_WITH_SVN="$TEMP_DIR/policy_data_with_svn.json" + jq -c --argjson svn "$POLICY_SVN_OVERRIDE" \ + '.policySvn = $svn' \ + "$POLICY_DATA_MERGED" | tr -d '\n' > "$POLICY_DATA_WITH_SVN" + mv "$POLICY_DATA_WITH_SVN" "$POLICY_DATA_MERGED" +fi + echo -e "${GREEN}✓ Policy data merged: $POLICY_DATA_MERGED${NC}" echo @@ -571,7 +850,9 @@ echo # Step 12: Securely delete private key # echo -e "${BLUE}=== Step 12: Cleaning Up Private Key ===${NC}" -if [ -f "$PRIVATE_KEY" ]; then +if [ -n "$CERT_DIR_OVERRIDE" ]; then + echo -e "${YELLOW}Keeping private key (--cert-dir reuse requested): $PRIVATE_KEY${NC}" +elif [ -f "$PRIVATE_KEY" ]; then shred -u "$PRIVATE_KEY" 2>/dev/null || rm -f "$PRIVATE_KEY" echo -e "${GREEN}✓ Private key securely deleted${NC}" fi diff --git a/sh_script/Azure/build_mock_quote_igvm.sh b/sh_script/Azure/build_mock_quote_igvm.sh new file mode 100755 index 000000000..2f89066c0 --- /dev/null +++ b/sh_script/Azure/build_mock_quote_igvm.sh @@ -0,0 +1,174 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +OUTPUT_IMAGE="$PROJECT_ROOT/target/release/migtd.igvm" +POLICY_DIR="$PROJECT_ROOT/config/Azure" +MANIFEST="$PROJECT_ROOT/config/Azure/servtd_info.json" +LOG_LEVEL="trace" +POLICY_ARGS=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --allow-all|--reject) + POLICY_ARGS+=("$1") + shift + ;; + --output) + OUTPUT_IMAGE="$2" + shift 2 + ;; + --policy-dir) + POLICY_DIR="$2" + shift 2 + ;; + --log-level) + LOG_LEVEL="$2" + shift 2 + ;; + -h|--help) + echo "Usage: $0 [--allow-all|--reject] [--output IGVM] [--policy-dir DIR]" + exit 0 + ;; + *) + echo "Unknown option: $1" >&2 + exit 2 + ;; + esac +done + +[[ "$OUTPUT_IMAGE" = /* ]] || OUTPUT_IMAGE="$PROJECT_ROOT/$OUTPUT_IMAGE" +[[ "$POLICY_DIR" = /* ]] || POLICY_DIR="$PROJECT_ROOT/$POLICY_DIR" + +WORK_DIR="$(mktemp -d)" +CERT_DIR="$WORK_DIR/certs" +BASE_POLICY="$WORK_DIR/base-policy.json" +GENERATED_POLICY="$WORK_DIR/generated-policy.json" +POLICY_DATA_RAW="$WORK_DIR/policy-data-raw.json" +COLLATERALS="$WORK_DIR/collaterals.json" +SERVTD_COLLATERAL="$WORK_DIR/servtd-collateral.json" +SERVTD_CRL="$WORK_DIR/servtd-crl.pem" +MERGED_POLICY_DATA="$WORK_DIR/merged-policy-data.json" +MAPPING_HISTORY="$WORK_DIR/tcb-mapping-history.json" + +cleanup() { + rm -rf "$WORK_DIR" +} +trap cleanup EXIT + +mkdir -p "$POLICY_DIR" "$(dirname "$OUTPUT_IMAGE")" +jq -c \ + --arg issue_date "$(date -u --date='1 day ago' +"%Y-%m-%dT%H:%M:%SZ")" \ + --arg next_update "$(date -u --date='365 days' +"%Y-%m-%dT%H:%M:%SZ")" \ + '.issueDate = $issue_date | .nextUpdate = $next_update' \ + "$PROJECT_ROOT/config/templates/tcb_mapping_seed.json" > "$MAPPING_HISTORY" + +"$SCRIPT_DIR/build_azure_mock_test.sh" \ + --skip-test \ + --output-dir "$POLICY_DIR" \ + --cert-dir "$CERT_DIR" \ + --tcb-mapping "$MAPPING_HISTORY" \ + "${POLICY_ARGS[@]}" +cp "$POLICY_DIR/policy_v2_signed.json" "$BASE_POLICY" + +( + cd "$PROJECT_ROOT" + cargo image --policy-v2 --debug \ + --image-format igvm \ + --no-default-features \ + --features vmcall-raw,stack-guard,main,vmcall-interrupt,oneshot-apic,spdm_attestation,use-mock-quote \ + --log-level "$LOG_LEVEL" \ + --policy-issuer-chain "$POLICY_DIR/policy_issuer_chain.pem" \ + --policy "$BASE_POLICY" \ + --output "$OUTPUT_IMAGE" +) + +HASH_BIN="$PROJECT_ROOT/target/release/migtd-hash" +BEFORE_HASH="$("$HASH_BIN" \ + --manifest "$MANIFEST" \ + --image "$OUTPUT_IMAGE" \ + --policy-v2 | tail -n1 | tr -d '[:space:]' | tr '[:lower:]' '[:upper:]')" + +"$SCRIPT_DIR/build_azure_mock_test.sh" \ + --skip-test \ + --output-dir "$POLICY_DIR" \ + --cert-dir "$CERT_DIR" \ + --tcb-mapping "$MAPPING_HISTORY" \ + --measured-image "$OUTPUT_IMAGE" \ + --measured-manifest "$MANIFEST" \ + --retain-mock-report-mapping \ + "${POLICY_ARGS[@]}" +cp "$POLICY_DIR/policy_v2_signed.json" "$GENERATED_POLICY" + +jq -c \ + '.policyData | del(.collaterals, .servtdCollateral, .servtdCrl)' \ + "$BASE_POLICY" > "$POLICY_DATA_RAW" +jq -c '.policyData.collaterals' "$BASE_POLICY" > "$COLLATERALS" +jq -c --slurpfile generated "$GENERATED_POLICY" \ + '.policyData.servtdCollateral + | .servtdTcbMapping = + $generated[0].policyData.servtdCollateral.servtdTcbMapping' \ + "$BASE_POLICY" > "$SERVTD_COLLATERAL" + +GENERATOR_ARGS=( + v2 + --policy-data "$POLICY_DATA_RAW" + --collaterals "$COLLATERALS" + --servtd-collateral "$SERVTD_COLLATERAL" + --output "$MERGED_POLICY_DATA" +) +if jq -e '.policyData.servtdCrl | type == "string"' "$BASE_POLICY" >/dev/null; then + jq -r '.policyData.servtdCrl' "$BASE_POLICY" > "$SERVTD_CRL" + GENERATOR_ARGS+=(--servtd-crl "$SERVTD_CRL") +fi +"$PROJECT_ROOT/target/release/migtd-policy-generator" "${GENERATOR_ARGS[@]}" +"$PROJECT_ROOT/target/release/json-signer" \ + --sign \ + --name policyData \ + --private-key "$CERT_DIR/policy_signing_pkcs8.key" \ + --input "$MERGED_POLICY_DATA" \ + --output "$POLICY_DIR/policy_v2_signed.json" + +( + cd "$PROJECT_ROOT/deps/td-shim" + CC=clang AR=llvm-ar cargo run \ + -p td-shim-tools \ + --bin td-shim-enroll \ + --features=enroller -- \ + "$OUTPUT_IMAGE" \ + -f 0BE92DC3-6221-4C98-87C1-8EEFFD70DE5A \ + "$POLICY_DIR/policy_v2_signed.json" \ + 3F2FB27A-9596-431C-A68D-D3EAB39F8AEB \ + "$POLICY_DIR/policy_issuer_chain.pem" \ + -o "$OUTPUT_IMAGE" +) + +AFTER_HASH="$("$HASH_BIN" \ + --manifest "$MANIFEST" \ + --image "$OUTPUT_IMAGE" \ + --policy-v2 | tail -n1 | tr -d '[:space:]' | tr '[:lower:]' '[:upper:]')" +[[ "$AFTER_HASH" == "$BEFORE_HASH" ]] || { + echo "Mock mapping enrollment changed the runtime TD Info Hash." >&2 + exit 1 +} + +mapfile -t MAPPED_HASHES < <( + jq -r \ + '.policyData.servtdCollateral.servtdTcbMapping.tdTcbMapping.svnMappings[] + .tdMeasurements.tdinfo_hash' \ + "$POLICY_DIR/policy_v2_signed.json" +) +[[ "${#MAPPED_HASHES[@]}" -ge 2 ]] || { + echo "Mock-quote policy must contain synthetic and runtime hashes." >&2 + exit 1 +} +printf '%s\n' "${MAPPED_HASHES[@]}" | grep -Fqx "$AFTER_HASH" || { + echo "Mock-quote policy does not contain the final runtime TD Info Hash." >&2 + exit 1 +} + +echo "Built mock-quote IGVM: $OUTPUT_IMAGE" +echo "Runtime TD Info Hash: $AFTER_HASH" +printf 'Mapped TD Info Hash: %s\n' "${MAPPED_HASHES[@]}" diff --git a/sh_script/Azure/docker_build_igvm.sh b/sh_script/Azure/docker_build_igvm.sh new file mode 100755 index 000000000..2dfaf30f7 --- /dev/null +++ b/sh_script/Azure/docker_build_igvm.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash +# +# Build the MigTD **Azure IGVM** image inside a pinned, reproducible Docker +# container and extract the resulting `migtd.igvm` plus its measurements. +# +# It builds the toolchain image from sh_script/Azure/Dockerfile (same pinned +# ubuntu base as container/Dockerfile, so the clang/llvm that compiles `ring` +# is frozen and the IGVM is reproducible), then runs the Azure Makefile target +# inside a throw-away container. +# +# Two source modes: +# local (default) : your current working tree (minus target/ and .git) is +# copied in and built with `make build-igvm generate-hash-v2`. +# The tree must already be prepared (submodules initialised +# and sh_script/preparation.sh applied) -- it normally is if +# you have built MigTD before. If not, use --clone. +# --clone [REF] : a pristine `git clone --recursive` is done inside the +# container and built with `make build-igvm-all` (runs the +# full preparation). Most reproducible; ignores local edits. +# +# Usage: +# sh_script/Azure/docker_build_igvm.sh [options] +# +# Options: +# -t, --target <make-target> Makefile target(s) to run (overrides the mode +# default). e.g. build-igvm-mock-quote-allow-all +# -o, --output <dir> Output directory (default: sh_script/Azure/output) +# --image <name:tag> Builder image tag (default: migtd-igvm-build:latest) +# --clone [REF] Build a fresh recursive clone instead of the +# local tree (optionally checkout REF / commit). +# --repo <url> Repo URL for --clone (default: intel/MigTD). +# --rebuild-image Force rebuild of the builder image. +# --no-cache Pass --no-cache to `docker build`. +# -h, --help Show this help. +# +# Examples: +# # Build the IGVM from your current checkout +# sh_script/Azure/docker_build_igvm.sh +# +# # Reproducible build of a specific upstream commit +# sh_script/Azure/docker_build_igvm.sh --clone <commit-sha> +# +# # Build the allow-all mock-quote test IGVM +# sh_script/Azure/docker_build_igvm.sh -t build-igvm-mock-quote-allow-all +# +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +REPO_ROOT=$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || (cd "$SCRIPT_DIR/../.." && pwd)) + +IMAGE="migtd-igvm-build:latest" +MODE="local" +REF="" +REPO_URL="https://github.com/intel/MigTD.git" +TARGET="" +OUTPUT="$SCRIPT_DIR/output" +REBUILD_IMAGE=0 +DOCKER_BUILD_ARGS=() + +err() { echo -e "\e[1;31mERROR:\e[0m $*" >&2; } +info() { echo -e "\e[1;34m[*]\e[0m $*"; } + +usage() { sed -n '2,/^set -euo/p' "${BASH_SOURCE[0]}" | sed '$d; s/^#\?//'; } + +while [ $# -gt 0 ]; do + case "$1" in + -t|--target) TARGET="$2"; shift 2;; + -o|--output) OUTPUT="$2"; shift 2;; + --image) IMAGE="$2"; shift 2;; + --clone) MODE="clone"; + if [ "${2-}" ] && [[ "$2" != -* ]]; then REF="$2"; shift; fi + shift;; + --repo) REPO_URL="$2"; shift 2;; + --rebuild-image) REBUILD_IMAGE=1; shift;; + --no-cache) DOCKER_BUILD_ARGS+=(--no-cache); shift;; + -h|--help) usage; exit 0;; + *) err "Unknown option: $1"; usage; exit 1;; + esac +done + +command -v docker >/dev/null 2>&1 || { err "docker is not installed or not on PATH."; exit 1; } + +# Default Makefile target depends on the source mode. +if [ -z "$TARGET" ]; then + if [ "$MODE" = "clone" ]; then TARGET="build-igvm-all"; else TARGET="build-igvm generate-hash-v2"; fi +fi + +# Sanity check for local mode: the tree must be prepared. +if [ "$MODE" = "local" ]; then + if [ ! -f "$REPO_ROOT/deps/td-shim/Cargo.toml" ] || [ ! -f "$REPO_ROOT/deps/spdm-rs/Cargo.toml" ]; then + err "Submodules are not initialised in $REPO_ROOT." + err "Run: git submodule update --init --recursive && ./sh_script/preparation.sh" + err "or build a pristine tree with: $0 --clone" + exit 1 + fi +fi + +mkdir -p "$OUTPUT" + +# 1) Build (or reuse) the pinned builder image. +if [ "$REBUILD_IMAGE" -eq 1 ] || ! docker image inspect "$IMAGE" >/dev/null 2>&1; then + info "Building builder image: $IMAGE" + docker build "${DOCKER_BUILD_ARGS[@]}" -t "$IMAGE" -f "$SCRIPT_DIR/Dockerfile" "$SCRIPT_DIR" +else + info "Reusing builder image: $IMAGE (use --rebuild-image to refresh)" +fi + +# 2) Generate the in-container build script for the chosen mode. +WORK="$(mktemp -d)" +cleanup() { + if [ -n "${CID-}" ]; then docker rm -f "$CID" >/dev/null 2>&1 || true; fi + rm -rf "$WORK" +} +trap cleanup EXIT + +if [ "$MODE" = "clone" ]; then + { + echo 'set -euxo pipefail' + echo 'rm -rf /root/MigTD && git clone --recursive '"$REPO_URL"' /root/MigTD' + echo 'cd /root/MigTD' + if [ -n "$REF" ]; then + echo 'git -c advice.detachedHead=false checkout '"$REF"' && git submodule update --init --recursive' + fi + echo 'cd sh_script/Azure && make '"$TARGET" + } > "$WORK/_build.sh" +else + { + echo 'set -euxo pipefail' + # The local tree is copied without .git, but ring/build.rs uses the + # presence of deps/td-shim/library/ring/.git to decide whether to + # generate prefix_symbols.h + perlasm/nasm from source (the path a real + # `git clone --recursive` takes). Recreate that marker so the local + # build matches the clone build. build.rs only tests existence, so the + # marker content is irrelevant. + echo 'echo gitlink > /root/MigTD/deps/td-shim/library/ring/.git' + # Mark this no-Git copy as an ephemeral source export so attestation + # pruning can run without weakening checkout safety checks. + echo 'export MIGTD_SOURCE_EXPORT=1' + echo 'cd /root/MigTD/sh_script/Azure && make '"$TARGET" + } > "$WORK/_build.sh" +fi + +# 3) Create the container, inject source (+ build script), run, extract. +CID=$(docker create -w /root/MigTD "$IMAGE" bash /root/_build.sh) +docker cp "$WORK/_build.sh" "$CID:/root/_build.sh" + +if [ "$MODE" = "local" ]; then + info "Copying local working tree into container (excluding target/ and .git)" + tar -C "$REPO_ROOT" \ + --exclude='./target' --exclude='*/target' \ + --exclude='.git' \ + --exclude='./sh_script/Azure/output' \ + -cf - . | docker cp - "$CID:/root/MigTD" +fi + +info "Building Azure IGVM (mode: $MODE, target: $TARGET)" +set +e +docker start -a "$CID" 2>&1 | tee "$OUTPUT/build.log" +rc=${PIPESTATUS[0]} +set -e +if [ "$rc" -ne 0 ]; then + err "Build failed (exit $rc). See $OUTPUT/build.log" + exit "$rc" +fi + +# 4) Extract artifacts. +info "Extracting artifacts to $OUTPUT" +docker cp "$CID:/root/MigTD/target/release/migtd.igvm" "$OUTPUT/migtd.igvm" +( cd "$OUTPUT" && sha256sum migtd.igvm | tee migtd.igvm.sha256 ) +# The MRTD/RTMR measurements are emitted by `generate-hash` into the build log. +grep -iE 'MR_TD|MRTD|RTMR|measurement|servtd|SHA384|hash' "$OUTPUT/build.log" \ + > "$OUTPUT/migtd.igvm.measurements.txt" 2>/dev/null || true + +info "Done. Artifacts in $OUTPUT:" +ls -l "$OUTPUT" diff --git a/sh_script/build_AzCVMEmu_policy_and_test.sh b/sh_script/build_AzCVMEmu_policy_and_test.sh index 20136887b..bfcd2c918 100755 --- a/sh_script/build_AzCVMEmu_policy_and_test.sh +++ b/sh_script/build_AzCVMEmu_policy_and_test.sh @@ -37,6 +37,9 @@ # # Skip the integration test at the end # ./sh_script/build_AzCVMEmu_policy_and_test.sh --skip-test # +# # Also emit CoRIM-only artifacts for the canonical mock report +# ./sh_script/build_AzCVMEmu_policy_and_test.sh --mock-report --corim-only +# # # Custom output directory # ./sh_script/build_AzCVMEmu_policy_and_test.sh --output-dir /path/to/output # @@ -192,6 +195,10 @@ POLICY_DATA_RAW="$SOURCE_MATERIAL_DIR/policy_v2_raw.json" TD_IDENTITY_TEMPLATE="$SOURCE_MATERIAL_DIR/td_identity.json" TCB_MAPPING_TEMPLATE="$SOURCE_MATERIAL_DIR/tcb_mapping.json" COLLATERALS_FILE="$SOURCE_MATERIAL_DIR/collateral_azure_thim.json" +CORIM_FIXTURE_DIR="$SOURCE_MATERIAL_DIR/corim" +CORIM_FIXTURE="$CORIM_FIXTURE_DIR/tcb_mapping.cose" +CORIM_SIGNER_ANCHOR_FIXTURE="$CORIM_FIXTURE_DIR/signer_anchor.bin" +CORIM_MOCK_TDINFO_HASH="1ADC25055B5188A615FF0A2B4781C0E1F38D4369CA688C775EE321E142FBE4534C14EDE61D9C570967996F6C8E8F5F76" # Intermediate files REPORT_DATA_FILE="$TEMP_DIR/report_data.json" @@ -210,9 +217,15 @@ OUTPUT_POLICY_B="$OUTPUT_DIR/policy_v2_signed_b.json" OUTPUT_POLICY_PM_B="$OUTPUT_DIR/policy_v2_signed_pm_b.json" # Variant B with policy + tcb_mapping + td_identity leaf certs all rotated OUTPUT_POLICY_PMI_B="$OUTPUT_DIR/policy_v2_signed_pmi_b.json" +# Variant "a" whose collaterals carry a signer CRL that REVOKES the tcb-mapping +# signer leaf — used by the revocation e2e test (verify() must fail closed). +OUTPUT_POLICY_REVOKED="$OUTPUT_DIR/policy_v2_signed_revoked.json" OUTPUT_CERT_CHAIN="$OUTPUT_DIR/policy_issuer_chain.pem" OUTPUT_CERT_CHAIN_A="$OUTPUT_DIR/policy_issuer_chain_a.pem" OUTPUT_CERT_CHAIN_B="$OUTPUT_DIR/policy_issuer_chain_b.pem" +OUTPUT_CORIM_POLICY="$OUTPUT_DIR/policy_v2_corim.json" +OUTPUT_CORIM="$OUTPUT_DIR/tcb_mapping_corim.cose" +OUTPUT_CORIM_SIGNER_ANCHOR="$OUTPUT_DIR/servtd_signer_anchor.bin" CERT_DIR="$TEMP_DIR/certs" PRIVATE_KEY="$CERT_DIR/policy_signing_pkcs8.key" PRIVATE_KEY_A="$CERT_DIR/policy_signing_a_pkcs8.key" @@ -262,6 +275,7 @@ generate_certificates() { local cert_validity_days="${3:-365}" local root_ca_subject="${4:-/CN=MigTD Root CA/O=Intel Corporation}" local leaf_subject="${5:-/CN=MigTD Policy Issuer/O=Intel Corporation}" + local signer_eku_oid="${MIGTD_SIGNER_EKU_OID:-1.3.6.1.4.1.32473.1.1}" # Validate key type first if [ "$key_type" != "P384" ]; then @@ -295,10 +309,22 @@ generate_certificates() { # - identity_signing_{a,b} : signs td_identity (embedded in servtd_collateral) # Variant "a" uses the same logical leaf for all three; variant "b" rotates # one or more of them depending on the test mode. + # + # All signer leaves carry the same single dedicated EKU. The default uses + # the RFC 5612 documentation PEN; production issuers must override + # MIGTD_SIGNER_EKU_OID with their allocated signer-purpose OID. + # + # `RawPolicyData::verify` binds both the + # embedded servtdTcbMappingIssuerChain and the (optional) servtdIdentityIssuerChain + # to the same RTMR1 signer anchor as the CFV mapping-signer chain; + # since the anchor is SHA384(root fingerprint + leaf EKU), all signers MUST + # share root + leaf EKU or verification fails closed + # with PolicyError::SignerAnchorMismatch. Rotating the identity key (variant + # "b") keeps the same EKU, so the anchor stays stable. for family_subject in \ "policy_signing:/CN=MigTD Policy Issuer/O=Intel Corporation" \ "mapping_signing:/CN=MigTD TCB Mapping Issuer/O=Intel Corporation" \ - "identity_signing:/CN=MigTD TD Identity Issuer/O=Intel Corporation"; do + "identity_signing:/CN=MigTD TCB Mapping Issuer/O=Intel Corporation"; do local family="${family_subject%%:*}" local subject="${family_subject#*:}" # Default to the script's leaf_subject for the policy family to preserve @@ -336,7 +362,7 @@ generate_certificates() { -days $cert_validity_days \ -$hash_algo \ -extensions v3_ca \ - -extfile <(echo -e "[v3_ca]\nkeyUsage = digitalSignature") + -extfile <(printf '[v3_ca]\nkeyUsage = digitalSignature\nextendedKeyUsage = %s\n' "$signer_eku_oid") cat "$output_dir/${family}_${suffix}.pem" "$output_dir/root_ca.pem" \ > "$output_dir/${family_chain_prefix}_${suffix}.pem" @@ -350,12 +376,51 @@ generate_certificates() { cp "$output_dir/policy_issuer_chain_a.pem" "$output_dir/policy_issuer_chain.pem" } +# Generate two servtd signer CRLs, both signed by the shared root CA: +# servtd_crl_empty.pem : revokes nothing (crlNumber 0x1000) +# servtd_crl_revoked.pem : revokes the mapping_signing_a leaf (crlNumber 0x1001) +# The CRL issuer (root CA subject) matches the root cert present in every +# mapping/identity signer chain, so crypto::verify_signer_chain_not_revoked can +# authenticate it and check the leaf serials. +generate_servtd_crls() { + local cert_dir="$1" + local hash_algo="sha384" + local cadir="$cert_dir/crl_ca" + + mkdir -p "$cadir" + : > "$cadir/index.txt" + echo 1000 > "$cadir/crlnumber" + cat > "$cadir/ca.cnf" <<EOF +[ca] +default_ca = CA_default +[CA_default] +database = $cadir/index.txt +crlnumber = $cadir/crlnumber +default_md = $hash_algo +default_crl_days = 3650 +EOF + + # Empty CRL (crlNumber 0x1000). + openssl ca -config "$cadir/ca.cnf" -gencrl \ + -keyfile "$cert_dir/root_ca.key" -cert "$cert_dir/root_ca.pem" \ + -out "$cert_dir/servtd_crl_empty.pem" 2>/dev/null + + # Revoke the mapping_signing_a leaf, then regenerate (crlNumber 0x1001). + openssl ca -config "$cadir/ca.cnf" -revoke "$cert_dir/mapping_signing_a.pem" \ + -keyfile "$cert_dir/root_ca.key" -cert "$cert_dir/root_ca.pem" 2>/dev/null + openssl ca -config "$cadir/ca.cnf" -gencrl \ + -keyfile "$cert_dir/root_ca.key" -cert "$cert_dir/root_ca.pem" \ + -out "$cert_dir/servtd_crl_revoked.pem" 2>/dev/null +} + # Parse command line arguments USE_MOCK_REPORT=false MOCK_QUOTE_FILE="" FETCH_COLLATERALS=false AZURE_REGION="useast" EXTRA_FEATURES="" +TCB_MAPPING_INPUT="" +GENERATE_CORIM_ONLY=false while [[ $# -gt 0 ]]; do case $1 in @@ -369,6 +434,9 @@ while [[ $# -gt 0 ]]; do OUTPUT_CERT_CHAIN="$OUTPUT_DIR/policy_issuer_chain.pem" OUTPUT_CERT_CHAIN_A="$OUTPUT_DIR/policy_issuer_chain_a.pem" OUTPUT_CERT_CHAIN_B="$OUTPUT_DIR/policy_issuer_chain_b.pem" + OUTPUT_CORIM_POLICY="$OUTPUT_DIR/policy_v2_corim.json" + OUTPUT_CORIM="$OUTPUT_DIR/tcb_mapping_corim.cose" + OUTPUT_CORIM_SIGNER_ANCHOR="$OUTPUT_DIR/servtd_signer_anchor.bin" shift 2 ;; --skip-test) @@ -379,6 +447,10 @@ while [[ $# -gt 0 ]]; do USE_MOCK_REPORT=true shift ;; + --corim-only) + GENERATE_CORIM_ONLY=true + shift + ;; --mock-quote-file) MOCK_QUOTE_FILE="$2" shift 2 @@ -395,6 +467,10 @@ while [[ $# -gt 0 ]]; do EXTRA_FEATURES="$2" shift 2 ;; + --tcb-mapping) + TCB_MAPPING_INPUT="$2" + shift 2 + ;; -h|--help) echo "Usage: $0 [OPTIONS]" echo @@ -402,11 +478,14 @@ while [[ $# -gt 0 ]]; do echo " --output-dir DIR Output directory for generated files (default: config/AzCVMEmu)" echo " --skip-test Skip running the MigTD test at the end" echo " --mock-report Use mock report data with test_mock_report feature" + echo " --corim-only Also generate CoRIM-only policy/runtime inputs" echo " --mock-quote-file FILE Path to mock quote file (--mock-report will be turned on)" echo " --fetch-collaterals Fetch fresh collaterals from Azure THIM before generating policy" echo " --azure-region REGION Azure region for THIM (useast, westus, northeurope)" echo " (default: useast, applies with --fetch-collaterals)" echo " --extra-features FEATURES Extra cargo features to add (e.g., 'igvm-attest')" + echo " --tcb-mapping FILE Previous authority-maintained mapping to extend" + echo " (default: existing output, then config/AzCVMEmu)" echo " -h, --help Show this help message" echo echo "Examples:" @@ -416,6 +495,9 @@ while [[ $# -gt 0 ]]; do echo " # Mock report mode (uses test_mock_report feature):" echo " $0 --mock-report" echo + echo " # Mock report mode with CoRIM-only release inputs:" + echo " $0 --mock-report --corim-only" + echo echo " # Mock report mode with custom quote file:" echo " $0 --mock-quote-file ./config/AzCVMEmu/az_migtd_quote.blob" echo @@ -448,6 +530,7 @@ echo " Source material: $SOURCE_MATERIAL_DIR" echo " Output directory: $OUTPUT_DIR" echo " Temp directory: $TEMP_DIR" echo " Mock report mode: $USE_MOCK_REPORT" +echo " Generate CoRIM-only artifacts: $GENERATE_CORIM_ONLY" if [[ -n "$MOCK_QUOTE_FILE" ]]; then echo " Mock quote file: $MOCK_QUOTE_FILE" fi @@ -461,13 +544,31 @@ echo mkdir -p "$OUTPUT_DIR" mkdir -p "$CERT_DIR" +if [[ -n "$TCB_MAPPING_INPUT" && "$TCB_MAPPING_INPUT" != /* ]]; then + TCB_MAPPING_INPUT="$PROJECT_ROOT/$TCB_MAPPING_INPUT" +fi +TCB_MAPPING_SOURCE="$TCB_MAPPING_TEMPLATE" +if [ -n "$TCB_MAPPING_INPUT" ]; then + TCB_MAPPING_SOURCE="$TCB_MAPPING_INPUT" +elif [ -f "$OUTPUT_DIR/tcb_mapping.json" ]; then + TCB_MAPPING_SOURCE="$OUTPUT_DIR/tcb_mapping.json" +fi + # Verify input files exist -for file in "$POLICY_DATA_RAW" "$TD_IDENTITY_TEMPLATE" "$TCB_MAPPING_TEMPLATE"; do +for file in "$POLICY_DATA_RAW" "$TD_IDENTITY_TEMPLATE" "$TCB_MAPPING_SOURCE"; do if [ ! -f "$file" ]; then echo -e "${RED}Error: Required input file not found: $file${NC}" >&2 exit 1 fi done +if [ "$GENERATE_CORIM_ONLY" = true ]; then + for file in "$CORIM_FIXTURE" "$CORIM_SIGNER_ANCHOR_FIXTURE"; do + if [ ! -f "$file" ]; then + echo -e "${RED}Error: Required CoRIM fixture not found: $file${NC}" >&2 + exit 1 + fi + done +fi # # Step 0: Fetch fresh collaterals from Azure THIM (optional) @@ -550,6 +651,12 @@ if ! cargo build --release -p migtd-policy-generator; then exit 1 fi +echo "Building migtd-hash..." +if ! cargo build --release -p migtd-hash; then + echo -e "${RED}Error: Failed to build migtd-hash${NC}" >&2 + exit 1 +fi + # Verify tools exist # azcvm-extract-report may be emitted either to the local crate target/ or the # workspace target/ when CARGO_TARGET_DIR is set. @@ -564,7 +671,7 @@ else exit 1 fi -for tool in json-signer servtd-collateral-generator migtd-policy-generator; do +for tool in json-signer servtd-collateral-generator migtd-policy-generator migtd-hash; do if [ ! -f "$TOOLS_DIR/$tool" ]; then echo -e "${RED}Error: Tool '$tool' not found at $TOOLS_DIR/$tool${NC}" >&2 exit 1 @@ -650,28 +757,98 @@ echo # Make sure no ending newline is added (important for signing) # echo -e "${BLUE}=== Step 3: Updating TD Identity Template ===${NC}" +# Conditionally update tcbDate and issueDate only when they are behind the +# policy's servtd tcbDate reference (greater-or-equal check). +POLICY_TCB_REF=$(jq -r ' + [.policy[] | .servtd.migtdIdentity.tcbDate.reference // empty] | + map(select(. != "")) | max // empty +' "$POLICY_DATA_RAW" 2>/dev/null) + +DATE_UPDATES="" +if [ -n "$POLICY_TCB_REF" ]; then + CURRENT_UTC=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + TEMPLATE_TCB_DATE=$(jq -r '.tcbLevels[0].tcbDate' "$TD_IDENTITY_TEMPLATE") + TEMPLATE_ISSUE_DATE=$(jq -r '.issueDate' "$TD_IDENTITY_TEMPLATE") + if [[ "$TEMPLATE_TCB_DATE" < "$POLICY_TCB_REF" ]]; then + DATE_UPDATES="$DATE_UPDATES | .tcbLevels[0].tcbDate = \"$CURRENT_UTC\"" + echo -e " Updating tcbDate: $TEMPLATE_TCB_DATE -> $CURRENT_UTC (reference: $POLICY_TCB_REF)" + fi + if [[ "$TEMPLATE_ISSUE_DATE" < "$POLICY_TCB_REF" ]]; then + DATE_UPDATES="$DATE_UPDATES | .issueDate = \"$CURRENT_UTC\"" + echo -e " Updating issueDate: $TEMPLATE_ISSUE_DATE -> $CURRENT_UTC (reference: $POLICY_TCB_REF)" + fi +fi + jq -c ".xfam = \"$XFAM\" | .attributes = \"$ATTRIBUTES\" | .mrConfigId = \"$MR_CONFIG_ID\" | \ .mrOwner = \"$MR_OWNER\" | .mrOwnerConfig = \"$MR_OWNER_CONFIG\" | .mrsigner = \"$MRSIGNER\" | \ -.isvProdId = $ISV_PROD_ID | .tcbLevels[0].tcb.isvsvn = $ISVSVN" \ +.isvProdId = $ISV_PROD_ID | .tcbLevels[0].tcb.isvsvn = $ISVSVN $DATE_UPDATES" \ "$TD_IDENTITY_TEMPLATE" | tr -d '\n' > "$TD_IDENTITY_UPDATED" echo -e "${GREEN}✓ TD Identity updated: $TD_IDENTITY_UPDATED${NC}" echo # -# Step 4: Update tcb_mapping.json with extracted measurements +# Step 4: Update the cumulative tcb_mapping.json with the v2 tdinfo_hash # Make sure no ending newline is added (important for signing) # -echo -e "${BLUE}=== Step 4: Updating TCB Mapping Template ===${NC}" -jq -c ".svnMappings[0].tdMeasurements.mrtd = \"$MRTD\" | \ -.svnMappings[0].tdMeasurements.rtmr0 = \"$RTMR0\" | \ -.svnMappings[0].tdMeasurements.rtmr1 = \"$RTMR1\" | \ -.svnMappings[0].isvsvn = $ISVSVN" \ -"$TCB_MAPPING_TEMPLATE" | tr -d '\n' > "$TCB_MAPPING_UPDATED" +# The Rust helper retains all supported historical hashes, replaces the +# current hash by key, rejects conflicting duplicates and non-monotonic SVN +# assignments, and emits deterministic compact JSON for signing. The +# --from-report path remains byte-identical to the release pipeline. +# +echo -e "${BLUE}=== Step 4: Updating Cumulative TCB Mapping ===${NC}" + +TDINFO_HASH_FILE="$TEMP_DIR/tdinfo_hash.hex" +MAPPING_UPDATE_ARGS=( + --update-tcb-mapping "$TCB_MAPPING_SOURCE" + --output-tcb-mapping "$TCB_MAPPING_UPDATED" + --mapping-isvsvn "$ISVSVN" +) +"$TOOLS_DIR/migtd-hash" \ + --policy-v2 \ + --from-report "$REPORT_DATA_FILE" \ + --output-tdinfo-hash "$TDINFO_HASH_FILE" \ + "${MAPPING_UPDATE_ARGS[@]}" +# Uppercase to match the convention used by signed policies. +TDINFO_HASH=$(tr 'a-z' 'A-Z' < "$TDINFO_HASH_FILE") echo -e "${GREEN}✓ TCB Mapping updated: $TCB_MAPPING_UPDATED${NC}" +echo -e " history source = $TCB_MAPPING_SOURCE" +echo -e " tdinfo_hash = $TDINFO_HASH" echo +# +# Step 4b: Generate CoRIM-only runtime inputs for the canonical mock report +# +if [ "$GENERATE_CORIM_ONLY" = true ]; then + echo -e "${BLUE}=== Step 4b: Generating CoRIM-only Runtime Inputs ===${NC}" + if [ "$TDINFO_HASH" != "$CORIM_MOCK_TDINFO_HASH" ]; then + echo -e "${RED}Error: CoRIM fixture is for canonical mock tdinfo_hash $CORIM_MOCK_TDINFO_HASH, got $TDINFO_HASH${NC}" >&2 + exit 1 + fi + + CORIM_POLICY_DATA_RAW="$TEMP_DIR/policy_v2_corim_raw.json" + CORIM_POLICY_DATA_MERGED="$TEMP_DIR/policy_v2_corim_merged.json" + jq -c '.policy += [{"servtd":{"migtdIdentity":{"isvsvn":{"operation":"greater-or-equal","reference":"self"}}}}]' \ + "$POLICY_DATA_RAW" > "$CORIM_POLICY_DATA_RAW" + "$TOOLS_DIR/migtd-policy-generator" v2 \ + --policy-data "$CORIM_POLICY_DATA_RAW" \ + --collaterals "$COLLATERALS_FILE" \ + --output "$CORIM_POLICY_DATA_MERGED" + jq -c '{policyData:.}' "$CORIM_POLICY_DATA_MERGED" > "$OUTPUT_CORIM_POLICY" + + if jq -e '.policyData | has("servtdCollateral")' "$OUTPUT_CORIM_POLICY" >/dev/null; then + echo -e "${RED}Error: Generated CoRIM-only policy unexpectedly contains servtdCollateral${NC}" >&2 + exit 1 + fi + cp "$CORIM_FIXTURE" "$OUTPUT_CORIM" + cp "$CORIM_SIGNER_ANCHOR_FIXTURE" "$OUTPUT_CORIM_SIGNER_ANCHOR" + echo -e "${GREEN}✓ CoRIM-only policy: $OUTPUT_CORIM_POLICY${NC}" + echo -e "${GREEN}✓ Signed TCB-mapping CoRIM: $OUTPUT_CORIM${NC}" + echo -e "${GREEN}✓ ServTD signer anchor: $OUTPUT_CORIM_SIGNER_ANCHOR${NC}" + echo +fi + # # Step 5: Generate certificates and signing key # @@ -681,6 +858,15 @@ generate_certificates "$CERT_DIR" "P384" 365 echo -e "${GREEN}✓ Certificates generated in: $CERT_DIR${NC}" echo +# +# Step 5b: Generate servtd signer CRLs (embedded per-variant into servtdCollateral) +# +echo -e "${BLUE}=== Step 5b: Generating Signer CRLs ===${NC}" +generate_servtd_crls "$CERT_DIR" + +echo -e "${GREEN}✓ Signer CRLs generated (empty + mapping-leaf-revoked)${NC}" +echo + # # Steps 6-10: Sign all policy variants # @@ -706,6 +892,7 @@ build_signed_policy_variant() { local mapping_suffix="$3" # a or b local policy_suffix="$4" # a or b local output_policy="$5" + local servtd_crl_file="${6:-}" # optional PEM CRL to embed in servtdCollateral local identity_key="$CERT_DIR/identity_signing_${identity_suffix}_pkcs8.key" local mapping_key="$CERT_DIR/mapping_signing_${mapping_suffix}_pkcs8.key" @@ -734,11 +921,16 @@ build_signed_policy_variant() { --input "$TCB_MAPPING_UPDATED" \ --output "$tcb_mapping_signed" + local servtd_crl_arg=() + if [ -n "$servtd_crl_file" ]; then + servtd_crl_arg=(--servtd-crl "$servtd_crl_file") + fi "$TOOLS_DIR/servtd-collateral-generator" \ --identity "$td_identity_signed" \ --identity-chain "$identity_chain" \ --mapping "$tcb_mapping_signed" \ --mapping-chain "$mapping_chain" \ + "${servtd_crl_arg[@]}" \ --output "$servtd_collateral" "$TOOLS_DIR/migtd-policy-generator" v2 \ @@ -758,10 +950,14 @@ build_signed_policy_variant() { } echo -e "${BLUE}=== Step 6-10: Building Signed Policy Variants ===${NC}" -build_signed_policy_variant "a" a a a "$OUTPUT_POLICY_A" -build_signed_policy_variant "b" a a b "$OUTPUT_POLICY_B" -build_signed_policy_variant "pm_b" a b b "$OUTPUT_POLICY_PM_B" -build_signed_policy_variant "pmi_b" b b b "$OUTPUT_POLICY_PMI_B" +build_signed_policy_variant "a" a a a "$OUTPUT_POLICY_A" "$CERT_DIR/servtd_crl_empty.pem" +build_signed_policy_variant "b" a a b "$OUTPUT_POLICY_B" "$CERT_DIR/servtd_crl_empty.pem" +build_signed_policy_variant "pm_b" a b b "$OUTPUT_POLICY_PM_B" "$CERT_DIR/servtd_crl_empty.pem" +build_signed_policy_variant "pmi_b" b b b "$OUTPUT_POLICY_PMI_B" "$CERT_DIR/servtd_crl_empty.pem" +# Revocation variant: same signers as "a", but its servtdCollateral carries a +# servtdCrl that revokes the tcb-mapping signer leaf, so RawPolicyData::verify() +# fails closed (PolicyError::SignerRevoked). +build_signed_policy_variant "revoked" a a a "$OUTPUT_POLICY_REVOKED" "$CERT_DIR/servtd_crl_revoked.pem" # Also keep a default signed policy (variant a) for backward compat cp "$OUTPUT_POLICY_A" "$OUTPUT_POLICY" @@ -773,8 +969,15 @@ echo # Step 11: Copying Certificate Chains to output directory # echo -e "${BLUE}=== Step 11: Copying Certificate Chains ===${NC}" -cp "$CERT_DIR/policy_issuer_chain_a.pem" "$OUTPUT_CERT_CHAIN_A" -cp "$CERT_DIR/policy_issuer_chain_b.pem" "$OUTPUT_CERT_CHAIN_B" +# The CFV MIGTD_POLICY_ISSUER_CHAIN slot carries the **TCB-mapping** issuer +# chain. RTMR1 measures the root+leaf-EKU signer anchor derived from that chain, +# and RawPolicyData::verify() binds +# the embedded servtdTcbMappingIssuerChain to that same anchor, so the CFV chain +# and the embedded mapping chain MUST share root + leaf signer EKU. The old +# policy_signing family only signed the (now-removed) outer policy signature and +# is no longer the RTMR1 anchor. +cp "$CERT_DIR/mapping_issuer_chain_a.pem" "$OUTPUT_CERT_CHAIN_A" +cp "$CERT_DIR/mapping_issuer_chain_b.pem" "$OUTPUT_CERT_CHAIN_B" cp "$OUTPUT_CERT_CHAIN_A" "$OUTPUT_CERT_CHAIN" echo -e "${GREEN}✓ Certificate chain A: $OUTPUT_CERT_CHAIN_A${NC}" @@ -811,6 +1014,11 @@ echo " 📄 Policy (default): $OUTPUT_POLICY" echo " 📄 Cert chain (a): $OUTPUT_CERT_CHAIN_A" echo " 📄 Cert chain (b): $OUTPUT_CERT_CHAIN_B" echo " 📄 Cert chain (default): $OUTPUT_CERT_CHAIN" +if [ "$GENERATE_CORIM_ONLY" = true ]; then + echo " 📄 CoRIM-only policy: $OUTPUT_CORIM_POLICY" + echo " 📄 Signed TCB CoRIM: $OUTPUT_CORIM" + echo " 📄 ServTD signer anchor: $OUTPUT_CORIM_SIGNER_ANCHOR" +fi echo if [ "$USE_MOCK_REPORT" = true ]; then @@ -828,7 +1036,7 @@ fi echo # -# Step 13: Test the policy (optional) +# Step 13: Test the policy - migration flow (optional) # # Pass --skip-policy-generation: this script already generated the policy # files, so migtdemu.sh must not re-run the generator (which would clobber @@ -849,7 +1057,7 @@ if [[ -n "$EXTRA_FEATURES" ]]; then fi if [ -z "$SKIP_TEST" ]; then - echo -e "${BLUE}=== Step 13: Testing Policy ===${NC}" + echo -e "${BLUE}=== Step 13: Testing Policy (migration) ===${NC}" if [ "$USE_MOCK_REPORT" = true ]; then echo "Running with mock report mode: $TEST_CMD" echo -e "${YELLOW}Note: Using test_mock_report feature for mock TD reports/quotes${NC}" @@ -861,19 +1069,65 @@ if [ -z "$SKIP_TEST" ]; then cd "$PROJECT_ROOT" if $TEST_CMD; then echo - echo -e "${GREEN}✓✓✓ SUCCESS: Policy validation and key exchange completed! ✓✓✓${NC}" + echo -e "${GREEN}✓✓✓ SUCCESS: Migration policy validation and key exchange completed! ✓✓✓${NC}" else echo - echo -e "${YELLOW}⚠ Test failed. Check the output above for errors.${NC}" + echo -e "${YELLOW}⚠ Migration test failed. Check the output above for errors.${NC}" echo "You can manually test with:" echo " $TEST_CMD" exit 1 fi else - echo -e "${YELLOW}Test skipped. To test manually, run:${NC}" + echo -e "${YELLOW}Migration test skipped. To test manually, run:${NC}" echo " $TEST_CMD" fi +# +# Step 14: Test the policy - prepare-rebind flow (optional) +# +# Runs the rebind-prepare operation which performs the rebinding handshake +# (TLS, token exchange, and approval) using the same policy variants. +REBIND_TEST_CMD="./migtdemu.sh --operation rebind-prepare --src-policy-file $OUTPUT_POLICY_A --src-policy-issuer-chain-file $OUTPUT_CERT_CHAIN_A --dst-policy-file $OUTPUT_POLICY_B --dst-policy-issuer-chain-file $OUTPUT_CERT_CHAIN_B --skip-policy-generation --debug --both" +if [ "$USE_MOCK_REPORT" = true ]; then + REBIND_TEST_CMD="$REBIND_TEST_CMD --mock-report" + + # Add mock quote file if specified + if [[ -n "$MOCK_QUOTE_FILE" ]]; then + REBIND_TEST_CMD="$REBIND_TEST_CMD --mock-quote-file $MOCK_QUOTE_FILE" + fi +fi + +# Add extra features if specified +if [[ -n "$EXTRA_FEATURES" ]]; then + REBIND_TEST_CMD="$REBIND_TEST_CMD --features $EXTRA_FEATURES" +fi + +if [ -z "$SKIP_TEST" ]; then + echo + echo -e "${BLUE}=== Step 14: Testing Policy (prepare-rebind) ===${NC}" + if [ "$USE_MOCK_REPORT" = true ]; then + echo "Running with mock report mode: $REBIND_TEST_CMD" + echo -e "${YELLOW}Note: Using test_mock_report feature for mock TD reports/quotes${NC}" + else + echo "Running with real remote attestation: $REBIND_TEST_CMD" + fi + echo + + cd "$PROJECT_ROOT" + if $REBIND_TEST_CMD; then + echo + echo -e "${GREEN}✓✓✓ SUCCESS: Prepare-rebind policy validation and token exchange completed! ✓✓✓${NC}" + else + echo + echo -e "${YELLOW}⚠ Prepare-rebind test failed. Check the output above for errors.${NC}" + echo "You can manually test with:" + echo " $REBIND_TEST_CMD" + exit 1 + fi +else + echo -e "${YELLOW}Prepare-rebind test skipped. To test manually, run:${NC}" + echo " $REBIND_TEST_CMD" +fi + echo echo -e "${GREEN}=== All Done! ===${NC}" - diff --git a/sh_script/build_policy_v2.sh b/sh_script/build_policy_v2.sh index 665dab586..bb699c5d4 100644 --- a/sh_script/build_policy_v2.sh +++ b/sh_script/build_policy_v2.sh @@ -5,6 +5,7 @@ config_temp_dir="./config/templates" key_dir="./key" environment="${1:-pre-production}" +tcb_mapping_file="${2:-}" case "$environment" in pre-production|preprod) collateral_file="collateral_pre_production_fmspc.json" @@ -13,12 +14,22 @@ case "$environment" in collateral_file="collateral_production_fmspc.json" ;; *) - echo "Usage: $0 <pre-production|production>" + echo "Usage: $0 <pre-production|production> <cumulative-tcb-mapping.json>" exit 1 ;; esac echo "Selected collateral environment '$environment' using $collateral_file" +if [[ -z "$tcb_mapping_file" ]]; then + echo "Usage: $0 <pre-production|production> <cumulative-tcb-mapping.json>" >&2 + exit 1 +fi +if ! jq -e '.svnMappings | type == "array" and length > 0' "$tcb_mapping_file" >/dev/null; then + echo "TCB mapping must contain at least one reviewed release: $tcb_mapping_file" >&2 + echo "Generate it cumulatively with migtd-hash before signing." >&2 + exit 1 +fi +echo "Signing cumulative TCB mapping: $tcb_mapping_file" # Build migtd-collateral-generator and generate collateral_pre_production_fmspc.json # cargo build -p migtd-collateral-generator @@ -38,7 +49,7 @@ cargo build -p json-signer ./target/debug/json-signer --sign \ --name tdTcbMapping \ --private-key $key_dir/issuer_pkcs8.key \ - --input $config_temp_dir/tcb_mapping.json \ + --input "$tcb_mapping_file" \ --output $config_temp_dir/tcb_mapping_signed.json # Build servtd-collateral-generator and generate servtd_collateral.json diff --git a/sh_script/corim_cli_helpers.sh b/sh_script/corim_cli_helpers.sh new file mode 100644 index 000000000..cf9228e32 --- /dev/null +++ b/sh_script/corim_cli_helpers.sh @@ -0,0 +1,184 @@ +#!/usr/bin/env bash + +CORIM_CLI_REV="8438b89051aac8e170c753c17540d24c2eb27650" + +configure_corim_cli() { + local repo_root="$1" + CORIM_CLI_INSTALL_ROOT="${CORIM_CLI_INSTALL_ROOT:-$repo_root/target/corim-cli-$CORIM_CLI_REV}" + CORIM_CLI_BIN="${CORIM_CLI:-$CORIM_CLI_INSTALL_ROOT/bin/corim-cli}" +} + +install_corim_cli() { + if [ ! -x "$CORIM_CLI_BIN" ]; then + if [ -n "${CORIM_CLI:-}" ]; then + echo "CORIM_CLI is not executable: $CORIM_CLI_BIN" >&2 + return 1 + fi + + echo "Installing official Azure/corim CLI at $CORIM_CLI_REV..." + cargo install \ + --locked \ + --git https://github.com/Azure/corim \ + --rev "$CORIM_CLI_REV" \ + --root "$CORIM_CLI_INSTALL_ROOT" \ + corim-cli + fi + + if ! "$CORIM_CLI_BIN" sign --help >/dev/null 2>&1; then + echo "corim-cli does not support the required sign command: $CORIM_CLI_BIN" >&2 + echo "Use Azure/corim revision $CORIM_CLI_REV or a newer compatible build." >&2 + return 1 + fi +} + +ecdsa_der_to_p1363() { + local input="$1" + local output="$2" + + python3 - "$input" "$output" <<'PY' +import pathlib +import sys + +data = pathlib.Path(sys.argv[1]).read_bytes() + +def read_length(offset): + if offset >= len(data): + raise ValueError("missing DER length") + first = data[offset] + offset += 1 + if first < 0x80: + return first, offset + width = first & 0x7f + if width == 0 or width > 2 or offset + width > len(data): + raise ValueError("invalid DER length") + return int.from_bytes(data[offset:offset + width], "big"), offset + width + +def read_integer(offset): + if offset >= len(data) or data[offset] != 0x02: + raise ValueError("expected DER INTEGER") + length, offset = read_length(offset + 1) + end = offset + length + if length == 0 or end > len(data): + raise ValueError("invalid DER INTEGER length") + value = data[offset:end] + if value[0] & 0x80: + raise ValueError("negative ECDSA integer") + value = value.lstrip(b"\x00") + if len(value) > 48: + raise ValueError("P-384 integer exceeds 48 bytes") + return value.rjust(48, b"\x00"), end + +if not data or data[0] != 0x30: + raise ValueError("expected DER SEQUENCE") +sequence_length, offset = read_length(1) +if offset + sequence_length != len(data): + raise ValueError("invalid DER SEQUENCE length") +r, offset = read_integer(offset) +s, offset = read_integer(offset) +if offset != len(data): + raise ValueError("trailing data after ECDSA signature") + +pathlib.Path(sys.argv[2]).write_bytes(r + s) +PY +} + +compute_signer_anchor() { + local root_cert="$1" + local signer_eku_oid="$2" + local output="$3" + local work_dir="$4" + local root_der="$work_dir/corim-root.der" + local root_hash="$work_dir/corim-root.sha384" + local eku_der="$work_dir/corim-signer-eku.der" + + openssl x509 -in "$root_cert" -outform DER -out "$root_der" + openssl dgst -sha384 -binary "$root_der" > "$root_hash" + openssl asn1parse -genstr "OID:$signer_eku_oid" -out "$eku_der" -noout + + { + printf '%s' 'MIGTD-RTMR1-ANCHOR-V1' + printf '\0' + cat "$root_hash" + printf '\0' + cat "$eku_der" + } | openssl dgst -sha384 -binary > "$output" + + if [ "$(wc -c < "$output")" -ne 48 ]; then + echo "Generated signer anchor is not 48 bytes" >&2 + return 1 + fi +} + +generate_signed_corim() { + local tdinfo_hash="$1" + local svn="$2" + local generation="$3" + local cert_chain="$4" + local private_key="$5" + local output="$6" + local work_dir="$7" + local template="$work_dir/tcb_mapping_corim.json" + local unsigned="$work_dir/tcb_mapping_corim.cbor" + local staging="$work_dir/tcb_mapping_corim.staging.cose" + local tbs="$work_dir/tcb_mapping_corim.tbs" + local signature_der="$work_dir/tcb_mapping_corim.sig.der" + local signature_raw="$work_dir/tcb_mapping_corim.sig" + local hash_base64 + + hash_base64=$(printf '%s' "$tdinfo_hash" | xxd -r -p | openssl base64 -A) + jq -n \ + --arg hash "$hash_base64" \ + --argjson svn "$svn" \ + --argjson generation "$generation" \ + '{ + "corim-id": "Microsoft/TDX/tcb-mapping", + "comids": [{ + "tag-identity": { + "id": "1F2E3D4C-5B6A-4798-8A9B-0C1D2E3F4A5B", + "version": $generation + }, + "triples": { + "reference-triples": [{ + "ref-env": { + "class": {"vendor": "Intel", "model": "TDX"}, + "instance": {"type": "bytes", "value": "bWlncmF0aW9uLXRk"} + }, + "ref-claims": [{ + "value": {"digests": [[7, $hash]]} + }] + }], + "conditional-endorsement-series-triples": [{ + "common-condition": { + "environment": { + "class": {"vendor": "Intel", "model": "TDX"}, + "instance": {"type": "bytes", "value": "bWlncmF0aW9uLXRk"} + }, + "claims-list": [] + }, + "series": [{ + "condition": [{ + "value": {"digests": [[7, $hash]]} + }], + "addition": [{ + "value": {"svn": {"type": "svn", "value": $svn}} + }] + }] + }] + } + }] + }' > "$template" + + "$CORIM_CLI_BIN" generate "$template" -o "$unsigned" + "$CORIM_CLI_BIN" sign prepare "$unsigned" \ + --alg ES384 \ + --signer-name "MigTD TCB Mapping Endorsement" \ + --x5chain "$cert_chain" \ + --out-staging "$staging" \ + --out-tbs "$tbs" + openssl dgst -sha384 -sign "$private_key" -out "$signature_der" "$tbs" + ecdsa_der_to_p1363 "$signature_der" "$signature_raw" + "$CORIM_CLI_BIN" sign finalize "$staging" \ + --signature "$signature_raw" \ + -o "$output" + "$CORIM_CLI_BIN" validate --skip-expiry "$output" +} diff --git a/sh_script/gen_asymmetric_servtd_corim_fixture.sh b/sh_script/gen_asymmetric_servtd_corim_fixture.sh new file mode 100755 index 000000000..931d9b157 --- /dev/null +++ b/sh_script/gen_asymmetric_servtd_corim_fixture.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2026 Microsoft Corporation +# +# SPDX-License-Identifier: BSD-2-Clause-Patent + +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +OUTPUT_DIR="${OUTPUT_DIR:-$PROJECT_ROOT/config/AzCVMEmu}" +WORK_DIR="$PROJECT_ROOT/target/servtd-corim-asymmetric-fixture-work" +BASE_POLICY="$OUTPUT_DIR/policy_v2_corim.json" +BASE_GEN_SCRIPT="$PROJECT_ROOT/sh_script/build_AzCVMEmu_policy_and_test.sh" +SIGNER_EKU_OID="${MIGTD_SIGNER_EKU_OID:-1.3.6.1.4.1.311.76.59.1.43}" + +# shellcheck source=corim_cli_helpers.sh +source "$PROJECT_ROOT/sh_script/corim_cli_helpers.sh" +configure_corim_cli "$PROJECT_ROOT" + +if [[ ! -f "$BASE_POLICY" ]]; then + echo "Missing CoRIM-only policy: $BASE_POLICY" >&2 + exit 1 +fi + +MOCK_TDINFO_HASH="$(grep -oP 'CORIM_MOCK_TDINFO_HASH="\K[^"]+' "$BASE_GEN_SCRIPT")" +if [[ -z "$MOCK_TDINFO_HASH" ]]; then + echo "Missing mock TDINFO hash in $BASE_GEN_SCRIPT" >&2 + exit 1 +fi + +rm -rf "$WORK_DIR" +mkdir -p "$WORK_DIR/src" "$WORK_DIR/dst" +trap 'rm -rf "$WORK_DIR"' EXIT + +install_corim_cli + +openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 \ + -out "$WORK_DIR/root.key" +openssl req -new -x509 \ + -key "$WORK_DIR/root.key" \ + -days 3650 \ + -out "$WORK_DIR/root.pem" \ + -subj "/CN=MigTD Asymmetric CoRIM Test Root/O=Microsoft" \ + -sha384 + +openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp384r1 \ + -out "$WORK_DIR/leaf.key" +openssl req -new \ + -key "$WORK_DIR/leaf.key" \ + -out "$WORK_DIR/leaf.csr" \ + -subj "/CN=MigTD Asymmetric CoRIM Test Signer/O=Microsoft" +openssl x509 -req \ + -in "$WORK_DIR/leaf.csr" \ + -CA "$WORK_DIR/root.pem" \ + -CAkey "$WORK_DIR/root.key" \ + -CAcreateserial \ + -out "$WORK_DIR/leaf.pem" \ + -days 3650 \ + -sha384 \ + -extensions v3_signer \ + -extfile <(printf '[v3_signer]\nkeyUsage = digitalSignature\nextendedKeyUsage = %s\n' "$SIGNER_EKU_OID") +cat "$WORK_DIR/leaf.pem" "$WORK_DIR/root.pem" > "$WORK_DIR/chain.pem" + +POLICY_SVN="$(jq -er '.policyData.policySvn | select(type == "number")' "$BASE_POLICY")" +compute_signer_anchor \ + "$WORK_DIR/root.pem" \ + "$SIGNER_EKU_OID" \ + "$OUTPUT_DIR/servtd_signer_anchor_asymmetric.bin" \ + "$WORK_DIR" + +# Only the source maps the shared mock hash. +generate_signed_corim \ + "$MOCK_TDINFO_HASH" \ + 2 \ + "$POLICY_SVN" \ + "$WORK_DIR/chain.pem" \ + "$WORK_DIR/leaf.key" \ + "$OUTPUT_DIR/tcb_mapping_corim_asymmetric_src.cose" \ + "$WORK_DIR/src" +generate_signed_corim \ + "$(printf 'DEADBEEF%.0s' {1..12})" \ + 1 \ + "$POLICY_SVN" \ + "$WORK_DIR/chain.pem" \ + "$WORK_DIR/leaf.key" \ + "$OUTPUT_DIR/tcb_mapping_corim_asymmetric_dst.cose" \ + "$WORK_DIR/dst" + +jq '.policyData.policy |= [.[] | select(has("servtd") | not)]' \ + "$BASE_POLICY" > "$OUTPUT_DIR/policy_v2_corim_asymmetric.json" + +if cmp -s \ + "$OUTPUT_DIR/tcb_mapping_corim_asymmetric_src.cose" \ + "$OUTPUT_DIR/tcb_mapping_corim_asymmetric_dst.cose"; then + echo "Source and destination CoRIMs must differ" >&2 + exit 1 +fi diff --git a/sh_script/key_gen.sh b/sh_script/key_gen.sh index c2025072e..6dc863311 100755 --- a/sh_script/key_gen.sh +++ b/sh_script/key_gen.sh @@ -3,6 +3,7 @@ set -e # Set output directory OUTPUT_DIR="key" +MIGTD_SIGNER_EKU_OID="${MIGTD_SIGNER_EKU_OID:-1.3.6.1.4.1.32473.1.1}" mkdir -p "$OUTPUT_DIR" # 1. Create the Root CA Key and Certificate @@ -37,8 +38,10 @@ openssl req -new -nodes -key "$OUTPUT_DIR/issuer.key" -sha384 -out "$OUTPUT_DIR/ # Add an explicit Key Usage so the cert is encoded as X.509 v3 (openssl # omits the [0] version field and produces a v1 certificate when no v3 # extensions are present, which the in-tree x509 parser rejects). The -# leaf MUST NOT be a CA — no BasicConstraints, no keyCertSign. -openssl x509 -req -in "$OUTPUT_DIR/issuer.csr" -CA "$OUTPUT_DIR/intermediate_ca.crt" -CAkey "$OUTPUT_DIR/intermediate_ca.key" -CAcreateserial -sha384 -days 365 -extfile <(printf 'keyUsage=critical,digitalSignature\n') -out "$OUTPUT_DIR/issuer.crt" +# leaf MUST NOT be a CA — no BasicConstraints, no keyCertSign. The default EKU +# uses the RFC 5612 documentation PEN; production issuers must override +# MIGTD_SIGNER_EKU_OID with their allocated dedicated signer-purpose OID. +openssl x509 -req -in "$OUTPUT_DIR/issuer.csr" -CA "$OUTPUT_DIR/intermediate_ca.crt" -CAkey "$OUTPUT_DIR/intermediate_ca.key" -CAcreateserial -sha384 -days 365 -extfile <(printf 'keyUsage=critical,digitalSignature\nextendedKeyUsage=%s\n' "$MIGTD_SIGNER_EKU_OID") -out "$OUTPUT_DIR/issuer.crt" # 4. Concat them into cert chain cat "$OUTPUT_DIR/issuer.crt" "$OUTPUT_DIR/intermediate_ca.crt" "$OUTPUT_DIR/root_ca.crt" > "$OUTPUT_DIR/migtd_issuer_chain.pem" diff --git a/sh_script/setup_build_env.sh b/sh_script/setup_build_env.sh new file mode 100755 index 000000000..bb87bf97f --- /dev/null +++ b/sh_script/setup_build_env.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# ============================================================================== +# One-shot MigTD build-environment setup for a fresh Debian/Ubuntu host. +# +# Installs everything needed to build MigTD IGVM images: +# +# * System build toolchain + libraries via a SINGLE `sudo apt-get install` +# (C/C++ compilers, LLVM/clang, nasm, autotools, OCaml for the vendored +# linux-sgx DCAP attestation lib, TPM2 TSS headers, jq, unzip, ...). +# * Rust (rustup) pinned to the repo's rust-toolchain channel, plus the +# `rust-src`/`llvm-tools` components and the `x86_64-unknown-none` +# bare-metal target the no_std MigTD/td-shim build needs. +# +# The apt step is the only part that needs root; the Rust step never uses sudo. +# +# Usage: +# ./sh_script/setup_build_env.sh # apt install + Rust setup +# ./sh_script/setup_build_env.sh --apt-only # only the sudo apt install +# ./sh_script/setup_build_env.sh --rust-only # only rustup/toolchain/target +# ./sh_script/setup_build_env.sh --print-apt # print the apt one-liner only +# ./sh_script/setup_build_env.sh -h | --help +# +# After running this once, initialize the source tree: +# source "$HOME/.cargo/env" +# export CC=clang AR=llvm-ar +# ./sh_script/preparation.sh +# (On GCC >= 14, src/attestation/build.rs auto-demotes the legacy linux-sgx DCAP +# errors, so no manual CFLAGS override is needed.) +# ============================================================================== +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +# ------------------------------------------------------------------------------ +# apt packages required to build MigTD + the vendored linux-sgx DCAP attestation +# library (deps/td-shim-AzCVMEmu/azcvm-extract-report and src/attestation). Keep +# this list flat so it installs in one `sudo apt-get install` invocation. +# ------------------------------------------------------------------------------ +APT_PACKAGES=( + # fetchers / VCS used by rustup, submodules, and the sgxssl download step + curl wget git ca-certificates + # C/C++ toolchain + linkers + build-essential clang llvm lld + # assembler for td-shim reset vector / ring + nasm + # generic build drivers + make pkg-config + # JSON tooling used by build_azure_mock_test.sh policy generation + jq + # unzip for the linux-sgx sgxssl prepare step + unzip + # autotools + texinfo for the linux-sgx cpprt/libunwind build + autoconf automake libtool-bin texinfo m4 + # OCaml for the linux-sgx edger8r tool + ocaml ocamlbuild + # TPM2 TSS dev headers for tss-esapi-sys (azcvm-extract-report) + libtss2-dev +) + +RUST_COMPONENTS=(rust-src llvm-tools rustfmt clippy) +RUST_TARGET="x86_64-unknown-none" + +apt_oneliner() { + printf 'sudo apt-get update && sudo apt-get install -y %s\n' "${APT_PACKAGES[*]}" +} + +install_apt() { + if ! command -v apt-get >/dev/null 2>&1; then + echo "apt-get not found: this script targets Debian/Ubuntu hosts." >&2 + echo "Install these packages with your package manager instead:" >&2 + printf ' %s\n' "${APT_PACKAGES[*]}" >&2 + return 1 + fi + echo "=== Installing system build dependencies (sudo) ===" + sudo apt-get update + sudo apt-get install -y "${APT_PACKAGES[@]}" + echo "=== System dependencies installed ===" +} + +resolve_rust_channel() { + # Prefer the channel pinned by the repo's rust-toolchain[.toml]. + local f + for f in "$PROJECT_ROOT/rust-toolchain.toml" "$PROJECT_ROOT/rust-toolchain"; do + if [[ -f "$f" ]]; then + local ch + ch="$(grep -E '^[[:space:]]*channel' "$f" | head -n1 | sed -E 's/.*=[[:space:]]*"?([^"]+)"?.*/\1/')" + if [[ -n "$ch" ]]; then printf '%s\n' "$ch"; return 0; fi + fi + done + printf 'stable\n' +} + +install_rust() { + local channel + channel="$(resolve_rust_channel)" + echo "=== Setting up Rust toolchain ($channel) ===" + + if [[ -f "$HOME/.cargo/env" ]]; then + # shellcheck disable=SC1091 + source "$HOME/.cargo/env" + fi + + if ! command -v rustup >/dev/null 2>&1; then + echo "Installing rustup..." + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --default-toolchain "$channel" --profile minimal + # shellcheck disable=SC1091 + source "$HOME/.cargo/env" + fi + + rustup toolchain install "$channel" --profile minimal + rustup component add "${RUST_COMPONENTS[@]}" + rustup target add "$RUST_TARGET" + echo "=== Rust toolchain ready ===" + rustup show active-toolchain || true +} + +DO_APT=1 +DO_RUST=1 + +while [[ $# -gt 0 ]]; do + case "$1" in + --apt-only) DO_RUST=0; shift;; + --rust-only) DO_APT=0; shift;; + --print-apt) apt_oneliner; exit 0;; + -h|--help) sed -n '2,45p' "$0"; exit 0;; + *) echo "Unknown arg: $1" >&2; exit 2;; + esac +done + +[[ "$DO_APT" == 1 ]] && install_apt +[[ "$DO_RUST" == 1 ]] && install_rust + +cat <<'EOF' + +=== Done. To build, in a fresh shell run: === + source "$HOME/.cargo/env" + export CC=clang AR=llvm-ar + # Initialize submodules + apply patches (first time only): + git submodule update --init --recursive deps/td-shim deps/spdm-rs deps/linux-sgx + ./sh_script/preparation.sh + # Then run the build or test command for your target. +EOF diff --git a/src/attestation/Cargo.toml b/src/attestation/Cargo.toml index 96dd62c1e..e0d1e9831 100644 --- a/src/attestation/Cargo.toml +++ b/src/attestation/Cargo.toml @@ -27,5 +27,6 @@ AzCVMEmu = ["tdx-tdcall-emu", "td-payload-emu"] attest-lib-ext = [] policy_v2=[] igvm-attest = [] # Get quote via IGVM interface (mutually exclusive with use-mock-quote) +test-get-quote = [] vmcall-raw = [] use-mock-quote = ["tdx-mock-data"] # Use mock quote and mock TD report for testing (mutually exclusive with AzCVMEmu) diff --git a/src/attestation/build.rs b/src/attestation/build.rs index cc1ac5b09..083b6308a 100644 --- a/src/attestation/build.rs +++ b/src/attestation/build.rs @@ -3,8 +3,149 @@ // SPDX-License-Identifier: BSD-2-Clause-Patent use std::env; +use std::path::Path; use std::process::Command; +const PRUNE_ENV: &str = "MIGTD_PRUNE_UNUSED_LINUX_SGX"; +const SOURCE_EXPORT_ENV: &str = "MIGTD_SOURCE_EXPORT"; + +/// Detect the major version of the system `cc` when it is GCC. +/// +/// Returns `None` for clang or when detection fails. +fn system_gcc_major() -> Option<u32> { + let version = Command::new("cc").arg("--version").output().ok()?; + let banner = String::from_utf8_lossy(&version.stdout).to_lowercase(); + if banner.contains("clang") { + return None; + } + let dumped = Command::new("cc").arg("-dumpversion").output().ok()?; + String::from_utf8_lossy(&dumped.stdout) + .trim() + .split('.') + .next()? + .parse::<u32>() + .ok() +} + +/// CFLAGS to pass to the vendored linux-sgx DCAP `make`. +/// +/// GCC >= 14 promotes `-Wincompatible-pointer-types`, `-Wimplicit-function-declaration`, +/// and `-Wint-conversion` to hard errors by default, which breaks the older DCAP C code +/// (e.g. tdx_verify.c). Demote them back to warnings so the attestation lib builds on +/// modern toolchains. Any user-supplied CFLAGS are preserved and take precedence. +fn attestation_make_cflags() -> Option<String> { + let mut cflags = env::var("CFLAGS").unwrap_or_default(); + if system_gcc_major().is_some_and(|major| major >= 14) { + for flag in [ + "-Wno-error=incompatible-pointer-types", + "-Wno-error=implicit-function-declaration", + "-Wno-error=int-conversion", + ] { + if !cflags.contains(flag) { + cflags.push(' '); + cflags.push_str(flag); + } + } + } + let cflags = cflags.trim().to_string(); + (!cflags.is_empty()).then_some(cflags) +} + +fn run_preparation_script(lib_path: &Path, script: &str, args: &[&str]) { + let status = Command::new("bash") + .arg(script) + .args(args) + .current_dir(lib_path) + .status() + .unwrap_or_else(|error| panic!("failed to run {script}: {error}")); + assert!(status.success(), "{script} failed: {status}"); +} + +fn apply_source_export_patch(lib_path: &Path, source_dir: &str, patch: &str) { + let source_dir = lib_path.join(source_dir); + let status = Command::new("git") + .args(["apply", "--no-index"]) + .arg(patch) + .current_dir(&source_dir) + .status() + .unwrap_or_else(|error| panic!("failed to apply {patch}: {error}")); + if status.success() { + return; + } + + let status = Command::new("git") + .args(["apply", "--no-index", "--reverse", "--check"]) + .arg(patch) + .current_dir(&source_dir) + .status() + .unwrap_or_else(|error| panic!("failed to check {patch}: {error}")); + assert!(status.success(), "{patch} failed: {status}"); +} + +fn prepare_attestation_sources(lib_path: &Path, make_cflags: Option<&str>) { + if lib_path.join(".git").exists() { + let mut prep = Command::new("make"); + prep.arg("-C") + .arg(lib_path) + .arg("servtd_attest_preparation"); + if let Some(cflags) = make_cflags { + prep.env("CFLAGS", cflags); + } + let status = prep + .status() + .expect("failed to run make servtd_attest_preparation for attestation library!"); + assert!( + status.success(), + "failed to build servtd_attest_preparation: {status}" + ); + return; + } + + // Source archives and docker-copied trees have populated submodules but no + // Git metadata. Mirror linux-sgx's sgx_2.30 preparation targets directly. + run_preparation_script( + &lib_path.join("sdk"), + "external/sgx-emm/create_symlink.sh", + &[], + ); + apply_source_export_patch( + lib_path, + "sdk/external/libcxxrt/libcxxrt_code", + "../sgx_libcxxrt.patch", + ); + run_preparation_script( + lib_path, + "external/dcap_source/QuoteVerification/prepare_sgxssl.sh", + &["nobuild"], + ); +} + +fn env_flag(name: &str) -> bool { + match env::var(name) { + Ok(value) if value == "1" || value.eq_ignore_ascii_case("true") => true, + Ok(value) if value == "0" || value.eq_ignore_ascii_case("false") => false, + Ok(value) => panic!("{name} must be 0, 1, true, or false; got {value:?}"), + Err(env::VarError::NotPresent) => false, + Err(error) => panic!("failed to read {name}: {error}"), + } +} + +fn prune_mode(lib_path: &Path) -> Option<&'static str> { + if env_flag(SOURCE_EXPORT_ENV) { + assert!( + !lib_path.join(".git").exists(), + "{SOURCE_EXPORT_ENV}=1 is only valid for a source export without Git metadata" + ); + return Some("--source-export"); + } + + if env_flag(PRUNE_ENV) || env_flag("TF_BUILD") { + return Some("--git-checkout"); + } + + None +} + fn main() { // Skip the compilation of attestation library when the remote attestation is not enabled or // running unit test. @@ -23,31 +164,57 @@ fn main() { let _ = env::var("AR").ok().map(|_| env::remove_var("AR")); let crate_path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")); - let lib_path = crate_path - .join("../../deps/linux-sgx") - .display() - .to_string(); - - // make servtd_attest_preparation - let status = Command::new("make") - .args(["-C", &lib_path, "servtd_attest_preparation"]) - .status() - .expect("failed to run make servtd_attest_preparation for attestation library!"); - assert!( - status.success(), - "failed to build servtd_attest_preparation: {status}" - ); + let lib_path = crate_path.join("../../deps/linux-sgx"); + let prune_script = crate_path.join("prune-unused-linux-sgx.sh"); + let fixup_script = crate_path.join("fixup-libservtd-attest-lib.sh"); + + println!("cargo:rerun-if-env-changed={PRUNE_ENV}"); + println!("cargo:rerun-if-env-changed={SOURCE_EXPORT_ENV}"); + println!("cargo:rerun-if-env-changed=TF_BUILD"); + println!("cargo:rerun-if-changed={}", lib_path.display()); + println!("cargo:rerun-if-changed={}", prune_script.display()); + println!("cargo:rerun-if-changed={}", fixup_script.display()); + + // GCC >= 14 turns several legacy DCAP warnings into hard errors; demote them so + // the vendored linux-sgx attestation lib still builds. Preserves user CFLAGS. + let make_cflags = attestation_make_cflags(); + + prepare_attestation_sources(&lib_path, make_cflags.as_deref()); + + // Component Governance builds and ephemeral source exports remove upstream + // trees that ServTD attestation does not use. Developer builds are + // non-destructive unless pruning is explicitly requested. + if let Some(mode) = prune_mode(&lib_path) { + let status = match Command::new("bash") + .arg(&prune_script) + .arg(mode) + .arg(&lib_path) + .current_dir(&crate_path) + .status() + { + Ok(status) => status, + Err(error) => panic!("failed to run {}: {error}", prune_script.display()), + }; + assert!( + status.success(), + "failed to prune unused linux-sgx sources: {status}" + ); + } // make servtd_attest - let status = Command::new("make") - .args(["-C", &lib_path, "servtd_attest"]) + let mut build = Command::new("make"); + build.arg("-C").arg(&lib_path).arg("servtd_attest"); + if let Some(cflags) = &make_cflags { + build.env("CFLAGS", cflags); + } + let status = build .status() .expect("failed to run make servtd_attest for attestation library!"); assert!(status.success(), "failed to build servtd_attest: {status}"); let search_dir = format!( "{}/external/dcap_source/QuoteGeneration/quote_wrapper/servtd_attest/linux", - &lib_path + lib_path.display() ); println!("cargo:rustc-link-search=native={search_dir}"); @@ -56,15 +223,16 @@ fn main() { #[cfg(feature = "AzCVMEmu")] { // Run the fixup script to create the modified library for AzCVMEmu - let script_path = crate_path.join("fixup-libservtd-attest-lib.sh"); let status = Command::new("bash") - .arg(&script_path) + .arg(&fixup_script) .current_dir(&crate_path) .status() .expect("failed to run fixup-libservtd-attest-lib.sh script!"); assert!(status.success(), "failed to run fixup script: {status}"); println!("cargo:rustc-link-arg=-lservtd_attest_app"); println!("cargo:rustc-link-arg=-lcrypto"); + // GNU ld must see libc after the late native archives that call atexit. + println!("cargo:rustc-link-arg=-lc"); } #[cfg(not(feature = "AzCVMEmu"))] println!("cargo:rustc-link-lib=static=servtd_attest"); diff --git a/src/attestation/fixup-libservtd-attest-lib.sh b/src/attestation/fixup-libservtd-attest-lib.sh index 46056374a..e99cab9e0 100755 --- a/src/attestation/fixup-libservtd-attest-lib.sh +++ b/src/attestation/fixup-libservtd-attest-lib.sh @@ -91,4 +91,9 @@ for i in ${targets} do lib="${i%.a}_app.a" ar r "${lib}" "${obj}" + # Enclave exit stubs must not override the host libc's exit handlers. + if ! objcopy --localize-symbol=atexit --localize-symbol=__cxa_atexit "${lib}"; then + echo "$0: failed to localize enclave exit stubs in ${lib}" >&2 + exit 1; + fi done \ No newline at end of file diff --git a/src/attestation/prune-unused-linux-sgx.sh b/src/attestation/prune-unused-linux-sgx.sh new file mode 100644 index 000000000..cde6a4c39 --- /dev/null +++ b/src/attestation/prune-unused-linux-sgx.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ $# -ne 2 ]]; then + echo "usage: $0 (--git-checkout|--source-export) LINUX_SGX_ROOT" >&2 + exit 2 +fi + +mode="$1" +linux_sgx_root="$(cd "$2" && pwd -P)" +servtd_makefile="$linux_sgx_root/external/dcap_source/QuoteGeneration/quote_wrapper/servtd_attest/linux/Makefile" + +if [[ ! -f "$linux_sgx_root/Makefile" || ! -f "$servtd_makefile" ]]; then + echo "error: refusing to prune unexpected directory: $linux_sgx_root" >&2 + exit 1 +fi + +case "$mode" in + --git-checkout) + if ! command -v git >/dev/null 2>&1; then + echo "error: git is required to prune a checkout safely" >&2 + exit 1 + fi + + if ! repo_root=$(git -C "$linux_sgx_root" rev-parse --show-toplevel 2>/dev/null); then + echo "error: refusing to prune a checkout without usable Git metadata: $linux_sgx_root" >&2 + exit 1 + fi + repo_root="$(cd "$repo_root" && pwd -P)" + if [[ "$repo_root" != "$linux_sgx_root" ]]; then + echo "error: refusing to prune outside the linux-sgx repository root: $repo_root" >&2 + exit 1 + fi + ;; + --source-export) + if [[ -e "$linux_sgx_root/.git" || -L "$linux_sgx_root/.git" ]]; then + echo "error: --source-export requires a tree without Git metadata" >&2 + exit 1 + fi + ;; + *) + echo "error: unsupported prune mode: $mode" >&2 + exit 2 + ;; +esac + +# These trees are absent from the traced servtd_attest build inputs. Removing +# them before compilation turns every build into a regression test for that +# dependency boundary. +# +# Paths follow the sgx_2.30 layout, which moved the SDK and its external trees +# into the nested sdk submodule. A path that stops matching the tree makes the +# entry a silent no-op here, so the parent repository's verify-cgmanifest.sh +# derives its exclusions from this list and reports anything that is neither +# pruned nor registered. +unused_paths=( + "external/dcap_source/QuoteGeneration/pccs" + "external/dcap_source/external/gtest" + "external/dcap_source/external/jwt-cpp" + "external/dcap_source/external/wasm-micro-runtime" + "external/dcap_source/tools/PoeTools" + "sdk/SampleCode/SampleAttestedTLS" + "sdk/external/cbor" + "sdk/external/ippcp_internal" + "sdk/external/openmp" + "sdk/external/protobuf" +) + +for relative_path in "${unused_paths[@]}"; do + target="$linux_sgx_root/$relative_path" + if [[ -L "$target" ]]; then + echo "error: refusing to prune unexpected symlink: $relative_path" >&2 + exit 1 + fi + if [[ -e "$target" && ! -d "$target" ]]; then + echo "error: refusing to prune unexpected non-directory: $relative_path" >&2 + exit 1 + fi +done + +if [[ "$mode" == "--git-checkout" ]]; then + # Validate every target before deleting any of them so a failed safety + # check cannot leave a partially pruned checkout. + for relative_path in "${unused_paths[@]}"; do + target="$linux_sgx_root/$relative_path" + if [[ ! -e "$target" && ! -L "$target" ]]; then + continue + fi + + target_repo="$linux_sgx_root" + candidate="$linux_sgx_root" + IFS="/" read -r -a path_parts <<< "$relative_path" + for path_part in "${path_parts[@]}"; do + candidate="$candidate/$path_part" + if [[ -e "$candidate/.git" || -L "$candidate/.git" ]]; then + target_repo="$candidate" + fi + done + + if [[ "$target_repo" == "$target" ]]; then + status=$(git -C "$target_repo" status --porcelain=v1 \ + --untracked-files=all --ignore-submodules=none) + else + repo_path=${target#"$target_repo/"} + status=$(git -C "$target_repo" status --porcelain=v1 \ + --untracked-files=all --ignore-submodules=none -- "$repo_path") + fi + if [[ -n "$status" ]]; then + echo "error: refusing to prune $relative_path because it contains local changes:" >&2 + echo "$status" >&2 + exit 1 + fi + done +fi + +for relative_path in "${unused_paths[@]}"; do + target="$linux_sgx_root/$relative_path" + if [[ -e "$target" || -L "$target" ]]; then + rm -rf -- "$target" + echo "Removed unused linux-sgx source: $relative_path" + fi +done + +for relative_path in "${unused_paths[@]}"; do + target="$linux_sgx_root/$relative_path" + if [[ -e "$target" || -L "$target" ]]; then + echo "error: unused linux-sgx source still exists: $relative_path" >&2 + exit 1 + fi +done diff --git a/src/attestation/src/ghci.rs b/src/attestation/src/ghci.rs index b1f7d3531..da5e89335 100644 --- a/src/attestation/src/ghci.rs +++ b/src/attestation/src/ghci.rs @@ -49,7 +49,10 @@ pub extern "C" fn servtd_get_quote(tdquote_req_buf: *mut c_void, len: u64) -> i3 let notify_registered = set_vmm_notification(); match tdvmcall_get_quote(shared.as_mut_bytes()) { - Ok(()) => {} + Ok(()) => { + #[cfg(feature = "test-get-quote")] + log::info!("test-get-quote: GHCI GetQuote request accepted by VMM\n"); + } Err(TdVmcallError::VmcallRetry) => { log::error!("tdvmcall_get_quote returned RETRY\n"); return AttestLibError::Busy as i32; diff --git a/src/attestation/test-fixup-libservtd-attest-lib.sh b/src/attestation/test-fixup-libservtd-attest-lib.sh new file mode 100755 index 000000000..1b19774f3 --- /dev/null +++ b/src/attestation/test-fixup-libservtd-attest-lib.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" +repo_root="$(cd "$script_dir/../.." && pwd -P)" +fixup_script="$script_dir/fixup-libservtd-attest-lib.sh" +mkdir -p "$repo_root/target" +test_root="$(mktemp -d "$repo_root/target/servtd-attest-fixup-tests.XXXXXX")" +trap 'rm -rf -- "$test_root"' EXIT + +working_dir="$test_root/migtd/src/attestation" +sgx_dir="$test_root/migtd/deps/linux-sgx" +library_dir="$sgx_dir/external/dcap_source/QuoteGeneration/quote_wrapper/servtd_attest/linux" +firmware="$library_dir/libservtd_attest.a" +application="$library_dir/libservtd_attest_app.a" +mkdir -p "$working_dir" "$library_dir" "$test_root/tmp" + +cat >"$test_root/exit_stubs.c" <<'EOF' +int atexit(void (*callback)(void)) { return 0; } +int __cxa_atexit(void (*callback)(void *), void *argument, void *dso) { return 0; } +int servtd_fixture(void) { return 7; } +EOF +gcc -c "$test_root/exit_stubs.c" -o "$test_root/exit_stubs.o" +for name in tlibc_stub sgxssl_stub; do + printf 'int %s(void) { return 0; }\n' "$name" >"$test_root/$name.c" + gcc -c "$test_root/$name.c" -o "$test_root/$name.o" +done +ar crs "$sgx_dir/libtlibc.a" "$test_root/tlibc_stub.o" +ar crs "$sgx_dir/libsgx_tsgxssl_crypto.a" "$test_root/sgxssl_stub.o" +ar crs "$firmware" "$test_root/exit_stubs.o" \ + "$test_root/tlibc_stub.o" "$test_root/sgxssl_stub.o" +firmware_hash="$(sha256sum "$firmware")" + +cat >"$test_root/crypto.c" <<'EOF' +#include <stdio.h> +extern int atexit(void (*callback)(void)); +static void c_exit(void) { puts("host C exit callback ran"); } +int crypto_register_exit(void) { return atexit(c_exit); } +EOF +gcc -c "$test_root/crypto.c" -o "$test_root/crypto.o" +ar crs "$test_root/libcrypto.a" "$test_root/crypto.o" + +cat >"$test_root/probe.c" <<'EOF' +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> + +extern int servtd_fixture(void); +extern int *__errno(void); +extern int crypto_register_exit(void); +extern int __cxa_atexit(void (*callback)(void *), void *argument, void *dso); + +static void cxx_exit(void *argument) { puts((const char *)argument); } + +int main(void) +{ + if (servtd_fixture() != 7 || __errno() != &errno) + return 1; + if (crypto_register_exit() != 0 || + __cxa_atexit(cxx_exit, (void *)"host C++ exit callback ran", NULL) != 0) + return 1; + return 0; +} +EOF + +run_fixup() { + ( + cd "$working_dir" + TMPDIR="$test_root/tmp" bash "$fixup_script" + ) +} + +for attempt in 1 2; do + run_fixup + if [[ "$(sha256sum "$firmware")" != "$firmware_hash" ]]; then + echo "error: application fixup changed the firmware archive" >&2 + exit 1 + fi + global_symbols="$(nm --defined-only --extern-only "$application")" + if grep -Eq '[[:space:]](atexit|__cxa_atexit)$' <<<"$global_symbols"; then + echo "error: application archive still exports enclave exit stubs" >&2 + exit 1 + fi + for build_script in "$script_dir/build.rs" "$repo_root/src/migtd/build.rs"; do + mapfile -t native_links < <( + sed -n 's/^[[:space:]]*println!("cargo:rustc-link-arg=\(-l[^"]*\)");/\1/p' "$build_script" + ) + if [[ ${#native_links[@]} == 0 ]]; then + echo "error: native link directives missing from $build_script" >&2 + exit 1 + fi + # Cargo suppresses implicit libraries; GNU ld cannot resolve late + # libcrypto references by rescanning an earlier libc archive like LLD. + gcc -fuse-ld=bfd -nodefaultlibs "$test_root/probe.c" \ + -Wl,--as-needed -lc -L"$library_dir" -L"$test_root" \ + "${native_links[@]}" -o "$test_root/probe" + if [[ "$("$test_root/probe")" != $'host C++ exit callback ran\nhost C exit callback ran' ]]; then + echo "error: host libc exit callbacks did not run" >&2 + exit 1 + fi + done +done + +mkdir -p "$test_root/bin" +cat >"$test_root/bin/objcopy" <<'EOF' +#!/usr/bin/env bash +exit 17 +EOF +chmod +x "$test_root/bin/objcopy" +if PATH="$test_root/bin:$PATH" run_fixup >"$test_root/failure.log" 2>&1; then + echo "error: application fixup accepted an objcopy failure" >&2 + exit 1 +fi +grep -q 'failed to localize enclave exit stubs' "$test_root/failure.log" || { + cat "$test_root/failure.log" >&2 + exit 1 +} +echo "ServTD application archive fixup tests passed" diff --git a/src/attestation/test-prune-unused-linux-sgx.sh b/src/attestation/test-prune-unused-linux-sgx.sh new file mode 100755 index 000000000..5ce222e77 --- /dev/null +++ b/src/attestation/test-prune-unused-linux-sgx.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" +repo_root="$(cd "$script_dir/../.." && pwd -P)" +prune_script="$script_dir/prune-unused-linux-sgx.sh" +test_root="$repo_root/target/prune-unused-linux-sgx-tests" + +# Read the paths under test from the prune script rather than restating them, +# so a change there cannot leave the fixtures covering a different set. +mapfile -t unused_paths < <( + sed -n '/^unused_paths=(/,/^)/p' "$prune_script" | + sed -n 's/^[[:space:]]*"\([^"]\+\)".*/\1/p' +) +if [[ ${#unused_paths[@]} -eq 0 ]]; then + echo "error: could not read unused_paths from $prune_script" >&2 + exit 1 +fi + +# Fixtures that need one specific target. Any entry works, so take them from +# the list to keep the test independent of the upstream directory layout. +dirty_target="${unused_paths[0]}" +nested_target_path="${unused_paths[1]}" + +cleanup() { + rm -rf -- "$test_root" +} +trap cleanup EXIT + +create_fixture() { + local fixture="$1" + rm -rf -- "$fixture" + mkdir -p "$fixture/external/dcap_source/QuoteGeneration/quote_wrapper/servtd_attest/linux" + : > "$fixture/Makefile" + : > "$fixture/external/dcap_source/QuoteGeneration/quote_wrapper/servtd_attest/linux/Makefile" + for relative_path in "${unused_paths[@]}"; do + mkdir -p "$fixture/$relative_path" + echo tracked > "$fixture/$relative_path/input.txt" + done +} + +create_git_fixture() { + local fixture="$1" + create_fixture "$fixture" + git -C "$fixture" init -q + git -C "$fixture" config user.name "MigTD pruning test" + git -C "$fixture" config user.email "migtd-pruning-test@example.invalid" + git -C "$fixture" add . + git -C "$fixture" commit -qm "test fixture" +} + +assert_targets_present() { + local fixture="$1" + for relative_path in "${unused_paths[@]}"; do + [[ -e "$fixture/$relative_path" ]] + done +} + +assert_targets_removed() { + local fixture="$1" + for relative_path in "${unused_paths[@]}"; do + [[ ! -e "$fixture/$relative_path" && ! -L "$fixture/$relative_path" ]] + done +} + +run_prune() { + bash "$prune_script" "$@" +} + +mkdir -p "$test_root" + +dirty_fixture="$test_root/dirty-checkout" +create_git_fixture "$dirty_fixture" +echo dirty >> "$dirty_fixture/$dirty_target/input.txt" +if run_prune --git-checkout "$dirty_fixture" >"$test_root/dirty.log" 2>&1; then + echo "error: pruning accepted a dirty checkout" >&2 + exit 1 +fi +assert_targets_present "$dirty_fixture" +grep -q "contains local changes" "$test_root/dirty.log" || { + cat "$test_root/dirty.log" >&2 + exit 1 +} + +untracked_fixture="$test_root/untracked-checkout" +create_git_fixture "$untracked_fixture" +echo untracked > "$untracked_fixture/$dirty_target/untracked.txt" +if run_prune --git-checkout "$untracked_fixture" >"$test_root/untracked.log" 2>&1; then + echo "error: pruning accepted an untracked file" >&2 + exit 1 +fi +assert_targets_present "$untracked_fixture" +grep -q "contains local changes" "$test_root/untracked.log" || { + cat "$test_root/untracked.log" >&2 + exit 1 +} + +nested_fixture="$test_root/nested-untracked-checkout" +create_fixture "$nested_fixture" +nested_target="$nested_fixture/$nested_target_path" +git -C "$nested_target" init -q +git -C "$nested_target" config user.name "MigTD pruning test" +git -C "$nested_target" config user.email "migtd-pruning-test@example.invalid" +git -C "$nested_target" add . +git -C "$nested_target" commit -qm "nested test fixture" +git -C "$nested_fixture" init -q +git -C "$nested_fixture" config user.name "MigTD pruning test" +git -C "$nested_fixture" config user.email "migtd-pruning-test@example.invalid" +git -C "$nested_fixture" add . 2>/dev/null +git -C "$nested_fixture" commit -qm "test fixture" +echo untracked > "$nested_target/untracked.txt" +if run_prune --git-checkout "$nested_fixture" >"$test_root/nested.log" 2>&1; then + echo "error: pruning accepted an untracked file in a nested repository" >&2 + exit 1 +fi +assert_targets_present "$nested_fixture" +grep -q "contains local changes" "$test_root/nested.log" || { + cat "$test_root/nested.log" >&2 + exit 1 +} + +clean_fixture="$test_root/clean-checkout" +create_git_fixture "$clean_fixture" +run_prune --git-checkout "$clean_fixture" +assert_targets_removed "$clean_fixture" + +export_fixture="$test_root/source-export" +create_fixture "$export_fixture" +run_prune --source-export "$export_fixture" +assert_targets_removed "$export_fixture" + +git_export_fixture="$test_root/git-source-export" +create_git_fixture "$git_export_fixture" +if run_prune --source-export "$git_export_fixture" >"$test_root/git-export.log" 2>&1; then + echo "error: source-export mode accepted a Git checkout" >&2 + exit 1 +fi +assert_targets_present "$git_export_fixture" +grep -q "requires a tree without Git metadata" "$test_root/git-export.log" || { + cat "$test_root/git-export.log" >&2 + exit 1 +} + +echo "linux-sgx pruning tests passed" diff --git a/src/crypto/src/crl.rs b/src/crypto/src/crl.rs index 612817f37..2decbb527 100644 --- a/src/crypto/src/crl.rs +++ b/src/crypto/src/crl.rs @@ -2,19 +2,24 @@ // // SPDX-License-Identifier: BSD-2-Clause-Patent -use crate::x509::{Extension, Time}; +use crate::x509::{AlgorithmIdentifier, Extension, Time}; use crate::Error; use alloc::vec::Vec; -use der::asn1::{AnyRef, BitStringRef, ObjectIdentifier}; +use der::asn1::{AnyRef, BitStringRef, ObjectIdentifier, UintRef}; use der::{Choice, Decode, Encode, ErrorKind, Header, Sequence, Tag, TagMode, TagNumber, Tagged}; use pki_types::{pem::PemObject, CertificateRevocationListDer}; const CRL_NUMBER_OID: ObjectIdentifier = ObjectIdentifier::new_unwrap("2.5.29.20"); +/// ECDSA-with-SHA384 signature algorithm OID (1.2.840.10045.4.3.3). The only +/// CRL signature algorithm supported in-guest, matching the rest of the crypto +/// crate. +const ECDSA_WITH_SHA384_OID: ObjectIdentifier = ObjectIdentifier::new_unwrap("1.2.840.10045.4.3.3"); + #[derive(Sequence)] pub struct Crl<'a> { tbs_cert_list: TbsCertList<'a>, - signature_algorithm: AnyRef<'a>, + signature_algorithm: AlgorithmIdentifier<'a>, signature_value: BitStringRef<'a>, } @@ -31,7 +36,7 @@ struct TbsCertList<'a> { #[derive(Sequence)] struct RevokedCertificate<'a> { - user_certificate: AnyRef<'a>, + user_certificate: UintRef<'a>, revocation_date: AnyRef<'a>, crl_entry_extensions: Option<AnyRef<'a>>, } @@ -120,6 +125,79 @@ pub fn get_crl_number(crl: &[u8]) -> Result<u32, Error> { Err(Error::CrlNumberNotFound) } +/// Parse a PEM CRL into its DER bytes. +fn crl_pem_to_der(crl: &[u8]) -> Result<Vec<u8>, Error> { + CertificateRevocationListDer::from_pem_slice(crl) + .map(|der| der.as_ref().to_vec()) + .map_err(|_| Error::DecodePemCert) +} + +/// Returns the DER encoding of the CRL's `issuer` Name. +/// +/// The caller matches this against a candidate CA certificate's `subject` DER +/// to find which certificate in a signer chain issued (and therefore should +/// have signed) this CRL. +pub fn get_crl_issuer_der(crl: &[u8]) -> Result<Vec<u8>, Error> { + let der = crl_pem_to_der(crl)?; + let crl = Crl::from_der(&der).map_err(|_| Error::ParseCertificate)?; + crl.tbs_cert_list + .issuer + .to_der() + .map_err(|_| Error::ParseCertificate) +} + +/// Verify the CRL's ECDSA-P384/SHA-384 signature using the issuing CA's raw +/// public-key bytes (`SubjectPublicKey`, e.g. from +/// `extract_public_key_from_cert`). +/// +/// Fails (`UnsupportedAlgorithm`) if the CRL is not signed with +/// ECDSA-with-SHA384, and (`EcdsaVerify`) if the signature does not verify. +/// This authenticates the CRL before any of its `revokedCertificates` entries +/// are trusted. +pub fn verify_crl_signature(crl: &[u8], issuer_public_key: &[u8]) -> Result<(), Error> { + let der = crl_pem_to_der(crl)?; + let crl = Crl::from_der(&der).map_err(|_| Error::ParseCertificate)?; + + if crl.signature_algorithm.algorithm != ECDSA_WITH_SHA384_OID { + return Err(Error::UnsupportedAlgorithm); + } + + let tbs = crl + .tbs_cert_list + .to_der() + .map_err(|_| Error::ParseCertificate)?; + let signature = crl + .signature_value + .as_bytes() + .ok_or(Error::ParseCertificate)?; + + crate::ecdsa::ecdsa_verify_with_algorithm( + issuer_public_key, + &tbs, + signature, + &crate::ecdsa::ECDSA_P384_SHA384_ASN1, + ) + .map_err(|_| Error::EcdsaVerify) +} + +/// Returns `true` if `serial` (big-endian magnitude bytes, as returned by +/// `der`'s `UintRef::as_bytes` / the crypto crate's certificate +/// `serial_number.as_bytes()`) is listed in the CRL's `revokedCertificates`. +/// +/// This performs **no** signature check — callers MUST authenticate the CRL +/// with [`verify_crl_signature`] first (see `verify_signer_chain_not_revoked`). +pub fn is_serial_revoked(crl: &[u8], serial: &[u8]) -> Result<bool, Error> { + let der = crl_pem_to_der(crl)?; + let crl = Crl::from_der(&der).map_err(|_| Error::ParseCertificate)?; + + Ok(crl + .tbs_cert_list + .revoked_certificates + .iter() + .flatten() + .any(|entry| entry.user_certificate.as_bytes() == serial)) +} + #[cfg(test)] mod test { use super::*; @@ -149,4 +227,35 @@ IrrRoE+AsML37e56hg== assert_eq!(get_crl_number(CRL1).unwrap(), 1); assert_eq!(get_crl_number(CRL2).unwrap(), 1); } + + // Fixtures generated by sh_script (P-384): a root CA that revokes a leaf + // signer. See src/crypto/test/crl/. + const CRL_EMPTY: &[u8] = include_bytes!("../test/crl/crl_empty.pem"); + const CRL_REVOKED: &[u8] = include_bytes!("../test/crl/crl_revoked.pem"); + // Big-endian serial magnitude of the revoked leaf (first byte 0x30 has its + // high bit clear, so there is no DER sign-padding zero to strip). + const LEAF_SERIAL: &[u8] = &[ + 0x30, 0x2A, 0x09, 0xF6, 0x12, 0x40, 0x99, 0x78, 0xFF, 0xE6, 0x63, 0xAD, 0x71, 0xE4, 0x06, + 0xFF, 0x35, 0xE2, 0xC5, 0x3A, + ]; + + #[test] + fn get_crl_number_parses_generated_crls() { + // openssl `ca -gencrl` seeded crlnumber at 0x1000; revocation bumps it. + assert_eq!(get_crl_number(CRL_EMPTY).unwrap(), 0x1000); + assert_eq!(get_crl_number(CRL_REVOKED).unwrap(), 0x1001); + } + + #[test] + fn is_serial_revoked_detects_revoked_leaf() { + assert!(is_serial_revoked(CRL_REVOKED, LEAF_SERIAL).unwrap()); + } + + #[test] + fn is_serial_revoked_false_for_unrevoked_or_empty() { + // A serial not on the list. + assert!(!is_serial_revoked(CRL_REVOKED, &[0x01, 0x02, 0x03]).unwrap()); + // The same leaf against a CRL that revokes nothing. + assert!(!is_serial_revoked(CRL_EMPTY, LEAF_SERIAL).unwrap()); + } } diff --git a/src/crypto/src/lib.rs b/src/crypto/src/lib.rs index 32ebaad4b..b89a24e79 100644 --- a/src/crypto/src/lib.rs +++ b/src/crypto/src/lib.rs @@ -119,6 +119,112 @@ pub fn get_policy_signer_key_hash(cert_chain_pem: &[u8]) -> Result<[u8; SHA384_D Ok(hash) } +/// Split a PEM certificate chain into (leaf_der, root_der). +/// +/// Convention (matches other helpers in this crate): the PEM chain is leaf-first, +/// i.e. `chain[0]` is the leaf and `chain.last()` is the trust anchor (root). +/// A single-cert chain returns the same bytes for leaf and root. +pub fn split_chain_pem_to_leaf_and_root_der(cert_chain_pem: &[u8]) -> Result<(Vec<u8>, Vec<u8>)> { + let chain = extract_cert_chain_from_pem(cert_chain_pem)?; + let leaf = chain[0].as_ref().to_vec(); + let root = chain.last().unwrap().as_ref().to_vec(); + Ok((leaf, root)) +} + +/// X.509 Extended Key Usage extension OID (RFC 5280 §4.2.1.12). +const EXTENDED_KEY_USAGE_OID: x509::ObjectIdentifier = + x509::ObjectIdentifier::new_unwrap("2.5.29.37"); + +/// `anyExtendedKeyUsage` is not a dedicated signer-purpose identifier and +/// therefore cannot be used in the RTMR1 signer fingerprint. +const ANY_EXTENDED_KEY_USAGE_OID: x509::ObjectIdentifier = + x509::ObjectIdentifier::new_unwrap("2.5.29.37.0"); + +/// Extract the DER-encoded, dedicated signer-purpose EKU OID from a leaf cert. +/// +/// The leaf must contain exactly one EKU extension asserting exactly one +/// purpose OID that is not `anyExtendedKeyUsage`. This is used on the legacy +/// single-EKU enrollment/exchange paths where a specific OID has to be selected +/// deterministically (there is no target anchor to match against). Multi-EKU +/// signer leaves are handled anchor-first via [`extract_leaf_eku_oids_der`]. +fn extract_single_leaf_eku_oid_der(cert: &x509::Certificate<'_>) -> Result<Vec<u8>> { + let extensions = cert + .tbs_certificate + .extensions + .as_ref() + .ok_or(Error::ParseCertificate)?; + let mut signer_eku = None; + + for ext in extensions.get() { + if ext.extn_id != EXTENDED_KEY_USAGE_OID { + continue; + } + if signer_eku.is_some() { + return Err(Error::ParseCertificate); + } + + let value = ext.extn_value.as_ref().ok_or(Error::ParseCertificate)?; + let purposes = Vec::<x509::ObjectIdentifier>::from_der(value.as_bytes()) + .map_err(|_| Error::ParseCertificate)?; + if purposes.len() != 1 || purposes[0] == ANY_EXTENDED_KEY_USAGE_OID { + return Err(Error::ParseCertificate); + } + signer_eku = Some(purposes[0].to_der().map_err(|_| Error::ParseCertificate)?); + } + + signer_eku.ok_or(Error::ParseCertificate) +} + +/// Extract **all** DER-encoded EKU purpose OIDs asserted by a leaf cert. +/// +/// The leaf must carry exactly one ExtendedKeyUsage extension; every purpose it +/// asserts is returned (leaf-order), each as its own DER-encoded OID. This is +/// the anchor-first path: the caller does not need to know which purpose is the +/// MigTD signer OID — it recomputes the signer anchor for each returned OID and +/// keeps the one that reproduces the enrolled/measured anchor. A signer cert may +/// therefore carry the MigTD purpose alongside unrelated purposes (e.g. a +/// code-signing EKU) without the firmware hard-coding any specific OID. +pub fn extract_leaf_eku_oids_der(cert: &x509::Certificate<'_>) -> Result<Vec<Vec<u8>>> { + let extensions = cert + .tbs_certificate + .extensions + .as_ref() + .ok_or(Error::ParseCertificate)?; + let mut oids: Option<Vec<Vec<u8>>> = None; + + for ext in extensions.get() { + if ext.extn_id != EXTENDED_KEY_USAGE_OID { + continue; + } + if oids.is_some() { + // More than one EKU extension is malformed (RFC 5280 §4.2.1.12). + return Err(Error::ParseCertificate); + } + + let value = ext.extn_value.as_ref().ok_or(Error::ParseCertificate)?; + let purposes = Vec::<x509::ObjectIdentifier>::from_der(value.as_bytes()) + .map_err(|_| Error::ParseCertificate)?; + if purposes.is_empty() { + return Err(Error::ParseCertificate); + } + let mut ders = Vec::with_capacity(purposes.len()); + for oid in purposes { + ders.push(oid.to_der().map_err(|_| Error::ParseCertificate)?); + } + oids = Some(ders); + } + + oids.ok_or(Error::ParseCertificate) +} + +/// Return the DER-encoded signer-purpose EKU OID from a PEM chain's leaf. +pub fn extract_leaf_eku_oid_der_from_chain_pem(cert_chain_pem: &[u8]) -> Result<Vec<u8>> { + let chain = extract_cert_chain_from_pem(cert_chain_pem)?; + let leaf_der = chain[0].as_ref(); + let cert = x509::Certificate::from_der(leaf_der).map_err(|_| Error::ParseCertificate)?; + extract_single_leaf_eku_oid_der(&cert) +} + /// Verifies a certificate chain and then verifies a message signature pub fn verify_cert_chain_and_signature( cert_chain_pem: &[u8], @@ -136,6 +242,141 @@ pub fn verify_cert_chain_and_signature( Ok(()) } +/// Verify a leaf-first signer certificate chain (PEM or DER) against a CRL and +/// fail **closed** if any certificate in the chain has been revoked. +/// +/// Steps: +/// 1. Locate the CA certificate in `signer_chain` whose `subject` matches the +/// CRL's `issuer`, and verify the CRL's ECDSA-P384/SHA-384 signature with +/// that CA's public key. An unauthenticated CRL (issuer not in the chain, or +/// bad signature) is rejected — it can neither add nor drop revocations. +/// 2. Reject if the serial number of **any** certificate in the chain appears +/// in the CRL's `revokedCertificates`. +/// +/// This is the in-guest revocation control for the servtd signer chain, called +/// in addition to the RTMR1 signer-anchor binding (which measures the chain but +/// cannot, by design, distinguish a still-valid certificate from a revoked one +/// under the same root + signer EKU). Freshness/anti-rollback (monotonic CRL +/// number) is enforced by the policy layer, not here. +pub enum SignerChain<'a> { + /// Leaf-first PEM certificate chain. + Pem(&'a [u8]), + /// Leaf-first DER certificate chain, as carried by a COSE `x5chain`. + Der(&'a [&'a [u8]]), +} + +pub fn verify_signer_chain_not_revoked( + signer_chain: SignerChain<'_>, + crl_pem: &[u8], +) -> Result<()> { + let chain_der = match signer_chain { + SignerChain::Pem(chain_pem) => extract_cert_chain_from_pem(chain_pem)?, + SignerChain::Der(chain_der) => { + if chain_der.is_empty() { + return Err(Error::CertChainVerification( + "No certificates found in chain".into(), + )); + } + chain_der + .iter() + .map(|der| CertificateDer::from(der.to_vec())) + .collect() + } + }; + let chain = chain_der + .iter() + .map(|der| x509::Certificate::from_der(der.as_ref()).map_err(|_| Error::ParseCertificate)) + .collect::<Result<Vec<_>>>()?; + + // 1. Authenticate the CRL against its issuing CA in the chain: the CA's + // subject must equal the CRL issuer, and it MUST be a CA (RFC 5280). + // Requiring cA=TRUE stops a non-CA leaf — whose key a peer may hold — + // from issuing its own CRL. + let crl_issuer_der = crl::get_crl_issuer_der(crl_pem)?; + let mut issuer_key = None; + for cert in &chain { + let subject_der = cert + .tbs_certificate + .subject + .to_der() + .map_err(|_| Error::ParseCertificate)?; + if subject_der == crl_issuer_der && is_ca_certificate(cert)? { + issuer_key = Some(extract_public_key_from_cert(cert)?); + break; + } + } + let issuer_key = issuer_key.ok_or_else(|| { + Error::CertChainVerification("CRL issuer does not match any CA in the signer chain".into()) + })?; + crl::verify_crl_signature(crl_pem, &issuer_key)?; + + // 2. Fail closed if any certificate in the chain is revoked. + for cert in &chain { + if crl::is_serial_revoked(crl_pem, cert.tbs_certificate.serial_number.as_bytes())? { + return Err(Error::CertChainVerification( + "a certificate in the signer chain is revoked".into(), + )); + } + } + + Ok(()) +} + +/// Verify a `COSE_Sign1` ECDSA-P384/SHA-384 (ES384/ESP384) signature against +/// an embedded RFC 9360 `x5chain`. +/// +/// * `x5chain_der` — the certificate chain (DER, **end-entity first**) taken +/// from the COSE protected header. +/// * `tbs` — the COSE `Sig_structure1` to-be-signed bytes. +/// * `signature` — the raw `r || s` ECDSA-P384 value. COSE uses the +/// fixed-width encoding (96 bytes), **not** ASN.1 DER. +/// +/// Steps performed: +/// 1. Verify the chain's internal integrity (each cert signed by the next). +/// 2. Verify the COSE signature with the leaf certificate's public key. +/// +/// Trust is **not** established here: this only proves the chain is internally +/// consistent and the signature is valid. The caller must bind the returned +/// `(root_der, leaf_eku_oid_der)` to a measured trust anchor (see +/// `policy::compute_signer_anchor`, which folds them into the RTMR1 signer +/// anchor) before trusting the payload. +pub fn verify_cose_sign1_es384_x5chain( + x5chain_der: &[&[u8]], + tbs: &[u8], + signature: &[u8], +) -> Result<(Vec<u8>, Vec<Vec<u8>>)> { + if x5chain_der.is_empty() { + return Err(Error::CertChainVerification("empty x5chain".into())); + } + + // 1. Chain integrity (leaf -> ... -> root). + let chain: Vec<CertificateDer> = x5chain_der + .iter() + .map(|der| CertificateDer::from(der.to_vec())) + .collect(); + verify_certificate_chain(&chain)?; + + // 2. COSE signature over `tbs` by the leaf key (raw r||s, fixed-width). + let leaf = x509::Certificate::from_der(x5chain_der[0]).map_err(|_| Error::ParseCertificate)?; + let leaf_pubkey = extract_public_key_from_cert(&leaf)?; + ecdsa::ecdsa_verify_with_algorithm( + &leaf_pubkey, + tbs, + signature, + &ecdsa::ECDSA_P384_SHA384_FIXED, + ) + .map_err(|_| Error::SignatureVerification)?; + + // 3. Anchor material for the caller: the trust-anchor cert DER plus every + // EKU purpose OID the leaf asserts. The caller recomputes the signer + // anchor for each OID and keeps whichever reproduces the enrolled + // anchor, so a multi-purpose signer leaf needs no hard-coded OID here. + let root_der = x5chain_der[x5chain_der.len() - 1].to_vec(); + let leaf_eku_oids_der = extract_leaf_eku_oids_der(&leaf)?; + + Ok((root_der, leaf_eku_oids_der)) +} + fn extract_cert_chain_from_pem(cert_chain_pem: &[u8]) -> Result<Vec<CertificateDer>> { let mut cert_chain = Vec::new(); @@ -154,7 +395,9 @@ fn extract_cert_chain_from_pem(cert_chain_pem: &[u8]) -> Result<Vec<CertificateD Ok(cert_chain) } -/// Verifies a certificate chain (leaf to root) +/// Verifies a certificate chain (leaf to root). +/// +/// Every certificate that acts as an issuer must be authorized as a CA. fn verify_certificate_chain(cert_chain: &[CertificateDer<'_>]) -> Result<()> { if cert_chain.is_empty() { return Err(Error::CertChainVerification( @@ -173,6 +416,12 @@ fn verify_certificate_chain(cert_chain: &[CertificateDer<'_>]) -> Result<()> { let issuer_cert = x509::Certificate::from_der(cert_chain[i + 1].as_ref()) .map_err(|_| Error::ParseCertificate)?; + if !is_ca_certificate(&issuer_cert)? { + return Err(Error::CertChainVerification( + "Certificate chain contains a non-CA issuer".into(), + )); + } + verify_cert_signature(&subject_cert, &issuer_cert)?; } @@ -268,25 +517,15 @@ fn verify_signature_with_algorithm( /// Performs the following checks: /// 1. Verifies the peer chain's internal signature integrity /// 2. Root CA must match between local and peer chains -/// 3. Leaf certificate Subject Name must match -/// 4. Every issuer certificate in the peer chain MUST carry the X.509 -/// `BasicConstraints` extension with `cA=TRUE` (RFC 5280 §4.2.1.9). This -/// prevents a peer from presenting `[fake_leaf, legit_leaf, …]` where the -/// legit leaf's private key was stolen and used to sign a synthetic -/// sub-leaf — the legit leaf is not a CA, so it is not a valid issuer. +/// 3. The local and peer leaves must assert the same single, dedicated EKU OID. /// /// Intentionally not checked: /// - **Intermediate cert identity** — intermediate cert contents are not /// compared against the local chain's intermediates. This lets either /// side rotate its intermediate CA(s) independently, as long as the -/// shared root and the leaf Subject Name remain stable and every issuer -/// in the peer chain is itself a CA (check 4). Intermediate certs are -/// still validated structurally (signature integrity in check 1 and -/// CA-attribute in check 4). -/// -/// Assumption: the leaf cert's Subject Name uniquely identifies the -/// intended usage for the product/model — distinct usages must use -/// distinct Subject Names in their leaf certs. +/// shared root and the leaf signer-purpose EKU remain stable and every issuer +/// in the peer chain is itself a CA. Intermediate certs are still validated +/// structurally by the common chain verifier. pub fn validate_peer_cert_chain(local_chain_pem: &[u8], peer_chain_pem: &[u8]) -> Result<()> { let local_chain = extract_cert_chain_from_pem(local_chain_pem)?; let peer_chain = extract_cert_chain_from_pem(peer_chain_pem)?; @@ -297,32 +536,29 @@ pub fn validate_peer_cert_chain(local_chain_pem: &[u8], peer_chain_pem: &[u8]) - // 2. Root CA must match (DER byte comparison) check_root_ca_match(&local_chain, &peer_chain)?; - // Parse leaf certs for subject name check + // 3. Leaf signer-purpose EKUs must match. The local measured chain defines + // the required purpose; a missing, ambiguous, any-purpose, or different + // peer EKU fails closed. let local_leaf = x509::Certificate::from_der(local_chain[0].as_ref()) .map_err(|_| Error::ParseCertificate)?; let peer_leaf = x509::Certificate::from_der(peer_chain[0].as_ref()).map_err(|_| Error::ParseCertificate)?; - - // 3. Leaf certificate Subject Name must match - if local_leaf.tbs_certificate.subject != peer_leaf.tbs_certificate.subject { + let local_eku = extract_single_leaf_eku_oid_der(&local_leaf).map_err(|_| { + Error::PeerCertChainValidation( + "Local leaf certificate has no single dedicated signer EKU".into(), + ) + })?; + let peer_eku = extract_single_leaf_eku_oid_der(&peer_leaf).map_err(|_| { + Error::PeerCertChainValidation( + "Peer leaf certificate has no single dedicated signer EKU".into(), + ) + })?; + if local_eku != peer_eku { return Err(Error::PeerCertChainValidation( - "Leaf certificate Subject Name mismatch between local and peer chains".into(), + "Leaf signer EKU mismatch between local and peer chains".into(), )); } - // 4. Every issuer in the peer chain must be a CA. - for cert_der in peer_chain.iter().skip(1) { - let issuer = - x509::Certificate::from_der(cert_der.as_ref()).map_err(|_| Error::ParseCertificate)?; - if !is_ca_certificate(&issuer)? { - return Err(Error::PeerCertChainValidation( - "Peer chain contains a non-CA issuer certificate (BasicConstraints \ - cA=TRUE missing)" - .into(), - )); - } - } - Ok(()) } @@ -487,10 +723,9 @@ kXYiyuG9OEI= // Adversarial chain demonstrating the stolen-leaf-key attack: // [fake_leaf, legit_leaf, intermediate, root] // The legit leaf has no BasicConstraints; the fake leaf was signed by - // the legit leaf's key while reusing the legit leaf's Subject Name, so - // the existing subject-name + root-match + signature-integrity checks - // all pass. Only the CA-attribute check on the legit leaf (as issuer) - // rejects this chain. + // the legit leaf's key. The chain's signature integrity and root match; + // the CA-attribute check on the legit leaf (as issuer) rejects it before + // signer-purpose EKU validation. fn attacker_chain() -> &'static [u8] { b"-----BEGIN CERTIFICATE----- MIICVzCCAd2gAwIBAgIUHTraNuO2R92W3rj+VUu757uTU/0wCgYIKoZIzj0EAwMw @@ -570,13 +805,13 @@ m07Y31+o+LpsZuEnlIETx/zemHA= #[test] fn test_validate_peer_cert_chain_same_chain() { - let chain = test_chain(); + let chain = include_bytes!("../test/eku/signer_a.pem"); assert!(validate_peer_cert_chain(chain, chain).is_ok()); } #[test] fn test_validate_peer_cert_chain_root_ca_mismatch() { - let chain = test_chain(); + let chain = include_bytes!("../test/eku/signer_a.pem"); let diff = different_root_chain(); let result = validate_peer_cert_chain(chain, diff); assert!(result.is_err()); @@ -589,19 +824,101 @@ m07Y31+o+LpsZuEnlIETx/zemHA= } #[test] - fn test_validate_peer_cert_chain_subject_name_mismatch() { - let chain = test_chain(); - let root = root_ca_only(); - let result = validate_peer_cert_chain(chain, root); + fn test_validate_peer_cert_chain_accepts_subject_change_with_same_eku() { + let local = include_bytes!("../test/eku/signer_a.pem"); + let peer = include_bytes!("../test/eku/signer_b.pem"); + assert!(validate_peer_cert_chain(local, peer).is_ok()); + } + + #[test] + fn test_validate_peer_cert_chain_eku_mismatch() { + let local = include_bytes!("../test/eku/signer_a.pem"); + let peer = include_bytes!("../test/eku/signer_other_eku.pem"); + let result = validate_peer_cert_chain(local, peer); + assert!(result.is_err()); + match result { + Err(Error::PeerCertChainValidation(msg)) => { + assert!(msg.contains("EKU mismatch")); + } + _ => panic!("Expected PeerCertChainValidation error"), + } + } + + #[test] + fn test_validate_peer_cert_chain_missing_eku() { + let local = include_bytes!("../test/eku/signer_a.pem"); + let peer = include_bytes!("../test/eku/signer_no_eku.pem"); + let result = validate_peer_cert_chain(local, peer); assert!(result.is_err()); match result { Err(Error::PeerCertChainValidation(msg)) => { - assert!(msg.contains("Subject Name mismatch")); + assert!(msg.contains("no single dedicated signer EKU")); } _ => panic!("Expected PeerCertChainValidation error"), } } + #[test] + fn test_validate_peer_cert_chain_rejects_ambiguous_ekus() { + let local = include_bytes!("../test/eku/signer_a.pem"); + let peer = include_bytes!("../test/eku/signer_multiple_eku.pem"); + let result = validate_peer_cert_chain(local, peer); + match result { + Err(Error::PeerCertChainValidation(msg)) => { + assert!(msg.contains("no single dedicated signer EKU")); + } + _ => panic!("Expected PeerCertChainValidation error"), + } + } + + #[test] + fn test_validate_peer_cert_chain_rejects_any_eku() { + let local = include_bytes!("../test/eku/signer_a.pem"); + let peer = include_bytes!("../test/eku/signer_any_eku.pem"); + let result = validate_peer_cert_chain(local, peer); + match result { + Err(Error::PeerCertChainValidation(msg)) => { + assert!(msg.contains("no single dedicated signer EKU")); + } + _ => panic!("Expected PeerCertChainValidation error"), + } + } + + #[test] + fn test_validate_peer_cert_chain_selects_designated_eku_among_many() { + // A leaf that co-asserts the dedicated MigTD signer OID alongside a + // code-signing EKU is multi-purpose; the single-OID extractor used by + // the legacy peer path rejects it (anchor-first matching via + // `extract_leaf_eku_oids_der` handles multi-purpose leaves instead). + let local = include_bytes!("../test/eku/signer_designated_multi.pem"); + let peer = include_bytes!("../test/eku/signer_designated_only.pem"); + assert!(validate_peer_cert_chain(local, peer).is_err()); + } + + #[test] + fn test_extract_leaf_eku_oids_lists_all_purposes() { + // The list extractor returns every purpose the leaf asserts, in order, + // each DER-encoded — so an anchor-first caller can match without knowing + // which OID is the MigTD signer purpose. + let chain = + extract_cert_chain_from_pem(include_bytes!("../test/eku/signer_designated_multi.pem")) + .unwrap(); + let leaf = x509::Certificate::from_der(chain[0].as_ref()).unwrap(); + let oids = extract_leaf_eku_oids_der(&leaf).unwrap(); + // signer_designated_multi asserts { id-kp-codeSigning, 1.3.6.1.4.1.311.76.59.1.43 }. + assert_eq!(oids.len(), 2); + let migtd_signer_oid_der = x509::ObjectIdentifier::new_unwrap("1.3.6.1.4.1.311.76.59.1.43") + .to_der() + .unwrap(); + assert!(oids.iter().any(|d| *d == migtd_signer_oid_der)); + + // A leaf with no EKU extension is rejected. + let no_eku = + extract_cert_chain_from_pem(include_bytes!("../test/eku/signer_no_eku.pem")).unwrap(); + let no_eku_leaf = x509::Certificate::from_der(no_eku[0].as_ref()).unwrap(); + assert!(extract_leaf_eku_oids_der(&no_eku_leaf).is_err()); + } + #[test] fn test_is_ca_certificate_leaf_is_not_ca() { // Extract the leaf cert (first cert in test_chain). @@ -641,23 +958,98 @@ mdG27TBGsOS6KzfZ7avUDurwwFx++58HjoLq68p8jvKQBQJjco9bcwUFAjEA7otq } #[test] - fn test_validate_peer_cert_chain_non_ca_intermediate() { - // Sanity: ensure the attacker chain otherwise passes lower-level - // checks — its signature integrity verifies because the legit leaf - // private key was used to sign the fake leaf. + fn test_certificate_chain_rejects_non_ca_issuer() { let attacker = attacker_chain(); let cert_chain = extract_cert_chain_from_pem(attacker).unwrap(); - assert!(verify_certificate_chain(&cert_chain).is_ok()); + let result = verify_certificate_chain(&cert_chain); + match result { + Err(Error::CertChainVerification(msg)) => { + assert!(msg.contains("non-CA"), "unexpected error message: {msg}"); + } + other => panic!("Expected CertChainVerification, got: {other:?}"), + } + + assert!(validate_peer_cert_chain(test_chain(), attacker).is_err()); + } + + #[test] + fn test_cose_chain_rejects_non_ca_issuer() { + let cert_chain = extract_cert_chain_from_pem(attacker_chain()).unwrap(); + let cert_refs: Vec<&[u8]> = cert_chain.iter().map(|cert| cert.as_ref()).collect(); + let result = verify_cose_sign1_es384_x5chain(&cert_refs, &[], &[0u8; 96]); - // The full validation must reject the attacker chain because the - // legit leaf (acting as the issuer of the fake leaf) is not a CA. - let local = test_chain(); - let result = validate_peer_cert_chain(local, attacker); match result { - Err(Error::PeerCertChainValidation(msg)) => { + Err(Error::CertChainVerification(msg)) => { assert!(msg.contains("non-CA"), "unexpected error message: {msg}"); } - other => panic!("Expected PeerCertChainValidation, got: {other:?}"), + other => panic!("Expected CertChainVerification, got: {other:?}"), + } + } + + // ---- signer-chain revocation (CRL) ------------------------------------ + // + // Fixtures (src/crypto/test/crl/): a P-384 root CA, a leaf signer it + // issued, an empty CRL, and a CRL that revokes the leaf. See crl.rs tests + // for the parsing-level coverage; these exercise the full orchestration in + // `verify_signer_chain_not_revoked`. + + fn crl_root_pubkey() -> Vec<u8> { + let root = pem_cert_to_der(include_bytes!("../test/crl/root.pem")).unwrap(); + let cert = x509::Certificate::from_der(root.as_ref()).unwrap(); + extract_public_key_from_cert(&cert).unwrap() + } + + #[test] + fn verify_crl_signature_accepts_correct_issuer_key() { + let crl = include_bytes!("../test/crl/crl_revoked.pem"); + assert!(crl::verify_crl_signature(crl, &crl_root_pubkey()).is_ok()); + } + + #[test] + fn verify_crl_signature_rejects_wrong_issuer_key() { + // The CRL is signed by the root; verifying against the LEAF key fails. + let leaf = pem_cert_to_der(include_bytes!("../test/crl/leaf.pem")).unwrap(); + let cert = x509::Certificate::from_der(leaf.as_ref()).unwrap(); + let leaf_pubkey = extract_public_key_from_cert(&cert).unwrap(); + let crl = include_bytes!("../test/crl/crl_revoked.pem"); + assert!(crl::verify_crl_signature(crl, &leaf_pubkey).is_err()); + } + + #[test] + fn signer_chain_not_revoked_passes_for_empty_crl() { + let chain = include_bytes!("../test/crl/signer_chain.pem"); + let crl = include_bytes!("../test/crl/crl_empty.pem"); + assert!(verify_signer_chain_not_revoked(SignerChain::Pem(chain), crl).is_ok()); + } + + #[test] + fn signer_chain_not_revoked_fails_closed_for_revoked_leaf() { + let chain = include_bytes!("../test/crl/signer_chain.pem"); + let crl = include_bytes!("../test/crl/crl_revoked.pem"); + match verify_signer_chain_not_revoked(SignerChain::Pem(chain), crl) { + Err(Error::CertChainVerification(msg)) => { + assert!(msg.contains("revoked"), "unexpected message: {msg}"); + } + other => panic!("expected revoked CertChainVerification, got {other:?}"), + } + } + + #[test] + fn signer_chain_not_revoked_rejects_non_ca_crl_issuer() { + // A CRL "issued" and signed by a non-CA end-entity leaf (whose private + // key a peer may legitimately hold) must NOT be accepted as an + // authenticated CRL — only a CA issues CRLs. Even though the leaf's key + // validly signs this CRL and the leaf is present in the chain, the + // cA=TRUE requirement rejects it (fail-closed), so a peer cannot present + // a self-crafted CRL to satisfy the freshness floor or launder a + // revocation. + let chain = include_bytes!("../test/crl/nonca_leaf_chain.pem"); + let crl = include_bytes!("../test/crl/crl_leaf_issued.pem"); + match verify_signer_chain_not_revoked(SignerChain::Pem(chain), crl) { + Err(Error::CertChainVerification(msg)) => { + assert!(msg.contains("CRL issuer"), "unexpected message: {msg}"); + } + other => panic!("expected CRL-issuer CertChainVerification error, got {other:?}"), } } } diff --git a/src/crypto/src/rustls_impl/tls.rs b/src/crypto/src/rustls_impl/tls.rs index 1346ed9b9..b0fafb388 100644 --- a/src/crypto/src/rustls_impl/tls.rs +++ b/src/crypto/src/rustls_impl/tls.rs @@ -530,6 +530,41 @@ pub(crate) mod connection { received_app_data: ChunkVecBuffer, } + // T22: zero-progress read/write helpers for the TLS unbuffered driver. + // The TLS state machine repeatedly calls `transport.read(..)` / `transport.write(..)` + // and then `input.consume(N)` / `output.reset()` regardless of the returned + // length. Without these helpers, a VMM-mediated transport that returns + // `Ok(0)` from `read` produces an internal handshake livelock, and a + // `transport.write` that does not fully send `output.used()` silently + // drops ciphertext (because `output.reset()` clears the buffer before the + // next attempt). See + // docs/threat_model/T22-policyv2-ratls-internal-zero-progress-livelock.md. + async fn transport_read_progress<T: AsyncRead + AsyncWrite + Unpin>( + transport: &mut T, + buf: &mut [u8], + ) -> Result<usize, TlsConnectionError> { + let n = transport.read(buf).await?; + if n == 0 { + return Err(TlsConnectionError::Transport); + } + Ok(n) + } + + async fn transport_write_all<T: AsyncRead + AsyncWrite + Unpin>( + transport: &mut T, + data: &[u8], + ) -> Result<(), TlsConnectionError> { + let mut sent = 0; + while sent < data.len() { + let n = transport.write(&data[sent..]).await?; + if n == 0 { + return Err(TlsConnectionError::Transport); + } + sent += n; + } + Ok(()) + } + impl<T: AsyncRead + AsyncWrite + Unpin> TlsServerConnection<T> { pub fn new(config: Arc<ServerConfig>, transport: T) -> Result<Self, TlsConnectionError> { Ok(Self { @@ -575,7 +610,9 @@ pub(crate) mod connection { return Ok(read); } ConnectionState::WriteTraffic(..) => { - let size = self.transport.read(self.input.unused_mut()).await?; + let size = + transport_read_progress(&mut self.transport, self.input.unused_mut()) + .await?; self.input.consume(size); } _ => return Err(TlsConnectionError::UnexpectedState), @@ -616,16 +653,7 @@ pub(crate) mod connection { |out_buffer| state.encrypt(data, out_buffer), map_err, )?; - // Write all output bytes to transport (handle short writes) - let total = self.output.used().len(); - let mut written = 0; - while written < total { - let n = self.transport.write(&self.output.used()[written..]).await?; - if n == 0 { - return Err(TlsConnectionError::UnexpectedState); - } - written += n; - } + transport_write_all(&mut self.transport, self.output.used()).await?; self.output.reset(); break; } @@ -656,12 +684,16 @@ pub(crate) mod connection { )?; } ConnectionState::TransmitTlsData(state) => { - self.transport.write(self.output.used()).await?; + transport_write_all(&mut self.transport, self.output.used()).await?; self.output.reset(); state.done(); } ConnectionState::BlockedHandshake { .. } => { - let size = self.transport.read(self.input.unused_mut()).await?; + let size = transport_read_progress( + &mut self.transport, + self.input.unused_mut(), + ) + .await?; self.input.consume(size); } ConnectionState::ReadTraffic(mut state) => { @@ -710,7 +742,7 @@ pub(crate) mod connection { }, )?; - self.transport.write(self.output.used()).await?; + transport_write_all(&mut self.transport, self.output.used()).await?; self.output.reset(); Ok(()) } @@ -863,7 +895,9 @@ pub(crate) mod connection { return Ok(read); } ConnectionState::WriteTraffic(..) => { - let size = self.transport.read(self.input.unused_mut()).await?; + let size = + transport_read_progress(&mut self.transport, self.input.unused_mut()) + .await?; self.input.consume(size); } _ => return Err(TlsConnectionError::UnexpectedState), @@ -904,16 +938,7 @@ pub(crate) mod connection { |out_buffer| state.encrypt(data, out_buffer), map_err, )?; - // Write all output bytes to transport (handle short writes) - let total = self.output.used().len(); - let mut written = 0; - while written < total { - let n = self.transport.write(&self.output.used()[written..]).await?; - if n == 0 { - return Err(TlsConnectionError::UnexpectedState); - } - written += n; - } + transport_write_all(&mut self.transport, self.output.used()).await?; self.output.reset(); break; } @@ -944,12 +969,16 @@ pub(crate) mod connection { )?; } ConnectionState::TransmitTlsData(state) => { - self.transport.write(self.output.used()).await?; + transport_write_all(&mut self.transport, self.output.used()).await?; self.output.reset(); state.done(); } ConnectionState::BlockedHandshake { .. } => { - let size = self.transport.read(self.input.unused_mut()).await?; + let size = transport_read_progress( + &mut self.transport, + self.input.unused_mut(), + ) + .await?; self.input.consume(size); } ConnectionState::ReadTraffic(mut state) => { @@ -997,7 +1026,7 @@ pub(crate) mod connection { } }, )?; - self.transport.write(self.output.used()).await?; + transport_write_all(&mut self.transport, self.output.used()).await?; self.output.reset(); Ok(()) } diff --git a/src/crypto/test/crl/crl_empty.pem b/src/crypto/test/crl/crl_empty.pem new file mode 100644 index 000000000..dbd4ac398 --- /dev/null +++ b/src/crypto/test/crl/crl_empty.pem @@ -0,0 +1,8 @@ +-----BEGIN X509 CRL----- +MIH3MH8CAQEwCgYIKoZIzj0EAwMwPzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCk1p +Z1REIFRlc3QxGzAZBgNVBAMMEk1pZ1REIFRlc3QgUm9vdCBDQRcNMjYwNzAzMDMw +NTI0WhcNMzYwNjMwMDMwNTI0WqAPMA0wCwYDVR0UBAQCAhAAMAoGCCqGSM49BAMD +A2gAMGUCMA93cIB2+BchBq73sEdHNu5CI8D2kR2/uU037HBAfc4ol/FDdEhIyioz +TfznOGrjTwIxAOwAxGY0LBwoAonyDVekEcnrXcOOkKXDnQXUBWNbebzTk9qHodLB +xJmujiFwSkVTJw== +-----END X509 CRL----- diff --git a/src/crypto/test/crl/crl_leaf_issued.pem b/src/crypto/test/crl/crl_leaf_issued.pem new file mode 100644 index 000000000..dfaed0d0f --- /dev/null +++ b/src/crypto/test/crl/crl_leaf_issued.pem @@ -0,0 +1,7 @@ +-----BEGIN X509 CRL----- +MIHnMG8CAQEwCgYIKoZIzj0EAwMwLzETMBEGA1UECgwKTWlnVEQgVGVzdDEYMBYG +A1UEAwwPTm9uQ0EgVGVzdCBMZWFmFw0yNjA3MDMxMjA1MDFaFw0zNjA2MzAxMjA1 +MDFaoA8wDTALBgNVHRQEBAICIAAwCgYIKoZIzj0EAwMDaAAwZQIxAOwV8tSckuVQ +8tIxQ31a5+X6RfQM1IXcKhe3IfGmIHtBumXzsIxIqH8Fs2BGeZGN3gIwL8Yugune +yKam/+mUMAGx68EqdvrAKBVSani/3bjV9yU20dXpQ+C0kJ5or6/Md5XI +-----END X509 CRL----- diff --git a/src/crypto/test/crl/crl_revoked.pem b/src/crypto/test/crl/crl_revoked.pem new file mode 100644 index 000000000..1eb26f03d --- /dev/null +++ b/src/crypto/test/crl/crl_revoked.pem @@ -0,0 +1,9 @@ +-----BEGIN X509 CRL----- +MIIBIjCBqAIBATAKBggqhkjOPQQDAzA/MQswCQYDVQQGEwJVUzETMBEGA1UECgwK +TWlnVEQgVGVzdDEbMBkGA1UEAwwSTWlnVEQgVGVzdCBSb290IENBFw0yNjA3MDMw +MzA1MjRaFw0zNjA2MzAwMzA1MjRaMCcwJQIUMCoJ9hJAmXj/5mOtceQG/zXixToX +DTI2MDcwMzAzMDUyNFqgDzANMAsGA1UdFAQEAgIQATAKBggqhkjOPQQDAwNpADBm +AjEAy8lNSWC5I2y1TSCpKQE7cBgbocCsFYHwPA2V8ivcIbz9W/RNkvMLLCTw1V9r +7d/KAjEA04jzMu1yyb0iv1vxQtw81QTzp6tQv3KLFoonYL4SvBFXDyLeVLf5HMka +J2DR2O1Y +-----END X509 CRL----- diff --git a/src/crypto/test/crl/leaf.pem b/src/crypto/test/crl/leaf.pem new file mode 100644 index 000000000..79137fafe --- /dev/null +++ b/src/crypto/test/crl/leaf.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDzCCAZSgAwIBAgIUMCoJ9hJAmXj/5mOtceQG/zXixTowCgYIKoZIzj0EAwMw +PzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCk1pZ1REIFRlc3QxGzAZBgNVBAMMEk1p +Z1REIFRlc3QgUm9vdCBDQTAeFw0yNjA3MDMwMzA1MjRaFw0zNjA2MzAwMzA1MjRa +MD4xCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApNaWdURCBUZXN0MRowGAYDVQQDDBFN +aWdURCBUZXN0IFNpZ25lcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABKXMf8U166cG +fYhmwHL9K7vp5RsjuJ7rGCQ8CIVvKzcsatFxgMCtYcwZa7y25KcCQXdOa0S65dXS +lSJJSYNWaqo6jNDqs08k/mnbrc+UaMcz6jo/l5bqDifo4jm44wJsJqNSMFAwDgYD +VR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSotjTerlLc20l+EwvVP4dYPZeVkjAfBgNV +HSMEGDAWgBT2i1LPrW01jc/oWgDvr7boE7GHRDAKBggqhkjOPQQDAwNpADBmAjEA +imKWMhxAXv2NQ5Y/Nh1uFmHhgu29hV2GaoGSd48bzRf+Qwp5knQKpJmnMzHHbgYK +AjEA5YDn4/048VrEDsp2w9Zvxu/Qr5AvX5n6Hjw0T5zukCSl77LGQJDtiAyukfDF +YIcL +-----END CERTIFICATE----- diff --git a/src/crypto/test/crl/nonca_leaf_chain.pem b/src/crypto/test/crl/nonca_leaf_chain.pem new file mode 100644 index 000000000..34d97d0df --- /dev/null +++ b/src/crypto/test/crl/nonca_leaf_chain.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIB/TCCAYOgAwIBAgIUFBfcrHybdFTTJST3QFFZG2stTO0wCgYIKoZIzj0EAwMw +LzETMBEGA1UECgwKTWlnVEQgVGVzdDEYMBYGA1UEAwwPTm9uQ0EgVGVzdCBSb290 +MB4XDTI2MDcwMzEyMDUwMVoXDTM2MDYzMDEyMDUwMVowLzETMBEGA1UECgwKTWln +VEQgVGVzdDEYMBYGA1UEAwwPTm9uQ0EgVGVzdCBMZWFmMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEXnQOQ5NaK+2Mn67HJCsNPXUOg0Mhf5QRE3iglyiB3n4LkErCcrcq +vTtuvK3SDi0hVyfhXl5AhsPPy5dR4x/mG8FFd//D05B1yl7R86idSbQe9hP1cldV +xE9ADrKitgo5o2AwXjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNV +HQ4EFgQUcJ/B+4w/G5w5JbGRXxqasa7zUsMwHwYDVR0jBBgwFoAU+braYn6yYSDO +M5SUXp3vw4wARaowCgYIKoZIzj0EAwMDaAAwZQIwKPKcbMJAATHEhb4dTtLQWxjE +cyYmQHNCfNYXkIwtio59uj1reT74m7yr9NlOF2mkAjEAxLorTQXk72om1rLeZNAX +GU7Cu6VMax6nUsGOdyyUSi4biNdsUNDyy1aj23I/m7sf +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICATCCAYagAwIBAgIUXu8kP9SN7w7h2/GEY47LX/JvIPMwCgYIKoZIzj0EAwMw +LzETMBEGA1UECgwKTWlnVEQgVGVzdDEYMBYGA1UEAwwPTm9uQ0EgVGVzdCBSb290 +MB4XDTI2MDcwMzEyMDUwMVoXDTM2MDYzMDEyMDUwMVowLzETMBEGA1UECgwKTWln +VEQgVGVzdDEYMBYGA1UEAwwPTm9uQ0EgVGVzdCBSb290MHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEnLyAodkvdJD+91o0Y6x0kAF1Vkp/oud/GpmtXP/Exrz+1hylPbkd +HfH/KHVCwsMOruURR9nzayRYs24hx9ao22pAtowAFKD1fFon3spxORUgUI8iZWN8 +ZEQAVYe38PK+o2MwYTAdBgNVHQ4EFgQU+braYn6yYSDOM5SUXp3vw4wARaowHwYD +VR0jBBgwFoAU+braYn6yYSDOM5SUXp3vw4wARaowDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaQAwZgIxANEfQGN832WnHUC77wIQ +1KRMirHIn9Tx/2gkHkXZQxH+1j+7CPAn76vNZOFSA0ZpQgIxAICMgJmAj/ukqu2J +zgP/oAaCfUClAojgNCpGRCErEhiNEh3kTIBLsEz1bfbGNCHTuA== +-----END CERTIFICATE----- diff --git a/src/crypto/test/crl/root.pem b/src/crypto/test/crl/root.pem new file mode 100644 index 000000000..62539f51d --- /dev/null +++ b/src/crypto/test/crl/root.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIDCCAaagAwIBAgIUczl/LLRr3gi5kOp2r1KXbkiszfQwCgYIKoZIzj0EAwMw +PzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCk1pZ1REIFRlc3QxGzAZBgNVBAMMEk1p +Z1REIFRlc3QgUm9vdCBDQTAeFw0yNjA3MDMwMzA1MjRaFw0zNjA2MzAwMzA1MjRa +MD8xCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApNaWdURCBUZXN0MRswGQYDVQQDDBJN +aWdURCBUZXN0IFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARsW/g2IGfQ +LTtFd5dxWCFmL5YdeNZjg7wSltqJNzVA2/JcuGJtffMpxOJ+sqZYHc4HtoMhc1Yp +yw/Sccy0agqvpScD9lfTCjFo+Fr9FrgL3Hgx3PcQK82G78pVy7i29YujYzBhMB0G +A1UdDgQWBBT2i1LPrW01jc/oWgDvr7boE7GHRDAfBgNVHSMEGDAWgBT2i1LPrW01 +jc/oWgDvr7boE7GHRDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNoADBlAjEAmcgb89AWs7ePYk8Z3vV4DoNW4s0ldrMQ/cxtrEAp +IpvYE5aTK7b//Rf16WIa9J0BAjATSxhi77XoyRqgiBJhFCdQAuNLTxod0/AOi2wM +BkQ3O4iMlMCJ5af9YwWrOqF6t6I= +-----END CERTIFICATE----- diff --git a/src/crypto/test/crl/signer_chain.pem b/src/crypto/test/crl/signer_chain.pem new file mode 100644 index 000000000..012754990 --- /dev/null +++ b/src/crypto/test/crl/signer_chain.pem @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIICDzCCAZSgAwIBAgIUMCoJ9hJAmXj/5mOtceQG/zXixTowCgYIKoZIzj0EAwMw +PzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCk1pZ1REIFRlc3QxGzAZBgNVBAMMEk1p +Z1REIFRlc3QgUm9vdCBDQTAeFw0yNjA3MDMwMzA1MjRaFw0zNjA2MzAwMzA1MjRa +MD4xCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApNaWdURCBUZXN0MRowGAYDVQQDDBFN +aWdURCBUZXN0IFNpZ25lcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABKXMf8U166cG +fYhmwHL9K7vp5RsjuJ7rGCQ8CIVvKzcsatFxgMCtYcwZa7y25KcCQXdOa0S65dXS +lSJJSYNWaqo6jNDqs08k/mnbrc+UaMcz6jo/l5bqDifo4jm44wJsJqNSMFAwDgYD +VR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSotjTerlLc20l+EwvVP4dYPZeVkjAfBgNV +HSMEGDAWgBT2i1LPrW01jc/oWgDvr7boE7GHRDAKBggqhkjOPQQDAwNpADBmAjEA +imKWMhxAXv2NQ5Y/Nh1uFmHhgu29hV2GaoGSd48bzRf+Qwp5knQKpJmnMzHHbgYK +AjEA5YDn4/048VrEDsp2w9Zvxu/Qr5AvX5n6Hjw0T5zukCSl77LGQJDtiAyukfDF +YIcL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICIDCCAaagAwIBAgIUczl/LLRr3gi5kOp2r1KXbkiszfQwCgYIKoZIzj0EAwMw +PzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCk1pZ1REIFRlc3QxGzAZBgNVBAMMEk1p +Z1REIFRlc3QgUm9vdCBDQTAeFw0yNjA3MDMwMzA1MjRaFw0zNjA2MzAwMzA1MjRa +MD8xCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApNaWdURCBUZXN0MRswGQYDVQQDDBJN +aWdURCBUZXN0IFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARsW/g2IGfQ +LTtFd5dxWCFmL5YdeNZjg7wSltqJNzVA2/JcuGJtffMpxOJ+sqZYHc4HtoMhc1Yp +yw/Sccy0agqvpScD9lfTCjFo+Fr9FrgL3Hgx3PcQK82G78pVy7i29YujYzBhMB0G +A1UdDgQWBBT2i1LPrW01jc/oWgDvr7boE7GHRDAfBgNVHSMEGDAWgBT2i1LPrW01 +jc/oWgDvr7boE7GHRDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNoADBlAjEAmcgb89AWs7ePYk8Z3vV4DoNW4s0ldrMQ/cxtrEAp +IpvYE5aTK7b//Rf16WIa9J0BAjATSxhi77XoyRqgiBJhFCdQAuNLTxod0/AOi2wM +BkQ3O4iMlMCJ5af9YwWrOqF6t6I= +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/generate_designated.sh b/src/crypto/test/eku/generate_designated.sh new file mode 100755 index 000000000..fa5d0d8b5 --- /dev/null +++ b/src/crypto/test/eku/generate_designated.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# Generate the "designated MigTD signer purpose" EKU fixtures used to cover +# `crypto::extract_single_leaf_eku_oid_der` selecting the dedicated OID +# 1.3.6.1.4.1.311.76.59.1.43 +# from a leaf that may co-assert other purposes. +# +# Both leaves are ECDSA P-384 / SHA-384 signed by a single self-signed root +# (CA:TRUE), matching the algorithms accepted by the crypto crate. Each fixture +# is a leaf-first PEM chain (leaf + root). These are additive to the pre-existing +# signer_*.pem fixtures and share their own root. +set -euo pipefail +cd "$(dirname "$0")" + +SIGNER_OID="1.3.6.1.4.1.311.76.59.1.43" # dedicated MigTD policy-signer purpose +CODESIGN_OID="1.3.6.1.5.5.7.3.3" # id-kp-codeSigning (co-asserted purpose) +DAYS=36500 + +TMP="$(mktemp -d)"; trap 'rm -rf "$TMP"' EXIT + +openssl ecparam -name secp384r1 -genkey -noout -out "$TMP/root.key" +cat > "$TMP/root.cnf" <<'EOF' +[req] +distinguished_name = dn +x509_extensions = v3 +prompt = no +[dn] +O = MigTD Test +CN = MigTD Designated EKU Root +[v3] +basicConstraints = critical, CA:TRUE +keyUsage = critical, keyCertSign, cRLSign +EOF +openssl req -x509 -new -key "$TMP/root.key" -sha384 -days "$DAYS" \ + -config "$TMP/root.cnf" -out "$TMP/root.pem" + +gen_leaf() { + local out="$1" cn="$2" eku="$3" + openssl ecparam -name secp384r1 -genkey -noout -out "$TMP/leaf.key" + cat > "$TMP/leaf.cnf" <<EOF +[req] +distinguished_name = dn +prompt = no +[dn] +O = MigTD Test +CN = $cn +EOF + openssl req -new -key "$TMP/leaf.key" -sha384 -config "$TMP/leaf.cnf" -out "$TMP/leaf.csr" + printf 'basicConstraints = critical, CA:FALSE\nextendedKeyUsage = %s\n' "$eku" > "$TMP/leaf.ext" + openssl x509 -req -in "$TMP/leaf.csr" -CA "$TMP/root.pem" -CAkey "$TMP/root.key" \ + -CAcreateserial -sha384 -days "$DAYS" -extfile "$TMP/leaf.ext" -out "$TMP/leaf.pem" + cat "$TMP/leaf.pem" "$TMP/root.pem" > "$out" +} + +# Designated OID co-asserted with an unrelated code-signing purpose. +gen_leaf signer_designated_multi.pem "MigTD Designated Multi" "$CODESIGN_OID,$SIGNER_OID" +# Designated OID only (different subject, same root). +gen_leaf signer_designated_only.pem "MigTD Designated Only" "$SIGNER_OID" + +echo "Generated:" +for f in signer_designated_multi signer_designated_only; do + printf ' %-28s ' "$f.pem" + openssl x509 -in "$f.pem" -noout -ext extendedKeyUsage 2>/dev/null | tail -1 | sed 's/^ *//' +done diff --git a/src/crypto/test/eku/signer_a.pem b/src/crypto/test/eku/signer_a.pem new file mode 100644 index 000000000..d4259ac28 --- /dev/null +++ b/src/crypto/test/eku/signer_a.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIUGBaSh46F+ZxSt0xq75U6dkcj96gwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0yNzA3MjEwMjIxMjFaMC4xEzARBgNVBAoM +Ck1pZ1REIFRlc3QxFzAVBgNVBAMMDk1pZ1REIFNpZ25lciBBMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAEUYh1fwDBu61JnyyB571Yv5o4CYIvnOLE4aK6lj//u5tv6e1U +Qye7AbhxbXDaZRMrDG4IDJY1JYdBL+NkSCIQ3Ck02sZtgI+C6s/zywRUSYi7t9Ab +A/y+LTdwENTfHnpto2kwZzAOBgNVHQ8BAf8EBAMCB4AwFQYDVR0lBA4wDAYKKwYB +BAGB/VkBATAdBgNVHQ4EFgQUuMJtUQCraKkunTx22tAoqqYHUCowHwYDVR0jBBgw +FoAUFX/a9BjNsgwHmCShtLwJnlall2swCgYIKoZIzj0EAwMDaAAwZQIxAJ25v84U +/YvQb/kSbHLmIJIw34n5cIWWFlCkHstxkKisUi9ybsIpDUBfDZ4XuLakfwIwM0+K +BYGFzc3ix2P3WISJvYS1on1G/F4HJkjQssnGxpfa5SS3BjCUDCZhcs8wy+AP +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgIUOXk0571gxjFa4z9KRWAn5Nd9UYIwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0zNjA3MTgwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEVLVSBUZXN0IFJvb3QwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfOdFcbraNYlYjDzu73zwekqQ7s46LeoZKIGPoBEVu +y4r8KDrq8cfs5wxX/T7HNdqXl5g+zn3xWWOxcTuauerWan/XpwwzNesebPu1pisV +ZmaSOoxvG4Lx+kDw5WUacO+jYzBhMB0GA1UdDgQWBBQVf9r0GM2yDAeYJKG0vAme +VqWXazAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEApN/sTVod +QDjYkiSAZvqO8Wr2o7jMaUAW0fRefChS+KWEPaJH1MOrJKfxmj+pqBcoAjEA70be +7AjLsHZrtccNS34OjK+nD61Quogqd3x44GP0r6edhtoGeyx2tTYLOE69Wvin +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_any_eku.pem b/src/crypto/test/eku/signer_any_eku.pem new file mode 100644 index 000000000..673d9aa87 --- /dev/null +++ b/src/crypto/test/eku/signer_any_eku.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIICAjCCAYigAwIBAgIUGBaSh46F+ZxSt0xq75U6dkcj960wCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjI5NDVaFw0yNzA3MjEwMjI5NDVaMC0xEzARBgNVBAoM +Ck1pZ1REIFRlc3QxFjAUBgNVBAMMDU1pZ1REIEFueSBFS1UwdjAQBgcqhkjOPQIB +BgUrgQQAIgNiAAQjL4wUP6HH1xAsKZZXjB8aMCR3RopnxpA5/odbXiM+/8qye2jS +v1NXOOhe7nQhROhpId4xAwDyIefHV0xeS5pH5bOeBS/bpWnZn1+wX6w8fg2rRdrI +jYBl9GcTr2HqoCyjYzBhMA4GA1UdDwEB/wQEAwIHgDAPBgNVHSUECDAGBgRVHSUA +MB0GA1UdDgQWBBRoz/dZxS7GSxKJPB+0gD97gWqZFjAfBgNVHSMEGDAWgBQVf9r0 +GM2yDAeYJKG0vAmeVqWXazAKBggqhkjOPQQDAwNoADBlAjEAp0rgp0oZ17w/dK1h +gDjJbpH7bC28gY5uq1NN1zOIV0OCxZZStwCPLLT+VOufXkYdAjAX27HEnT55S7yA +wNz4LkUsR6GE757TIFNAOGX/+KQ7bTZbuHp5qdhKQ6vMbgF0c3E= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgIUOXk0571gxjFa4z9KRWAn5Nd9UYIwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0zNjA3MTgwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEVLVSBUZXN0IFJvb3QwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfOdFcbraNYlYjDzu73zwekqQ7s46LeoZKIGPoBEVu +y4r8KDrq8cfs5wxX/T7HNdqXl5g+zn3xWWOxcTuauerWan/XpwwzNesebPu1pisV +ZmaSOoxvG4Lx+kDw5WUacO+jYzBhMB0GA1UdDgQWBBQVf9r0GM2yDAeYJKG0vAme +VqWXazAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEApN/sTVod +QDjYkiSAZvqO8Wr2o7jMaUAW0fRefChS+KWEPaJH1MOrJKfxmj+pqBcoAjEA70be +7AjLsHZrtccNS34OjK+nD61Quogqd3x44GP0r6edhtoGeyx2tTYLOE69Wvin +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_b.pem b/src/crypto/test/eku/signer_b.pem new file mode 100644 index 000000000..cb3a2bb09 --- /dev/null +++ b/src/crypto/test/eku/signer_b.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICEjCCAZegAwIBAgIUGBaSh46F+ZxSt0xq75U6dkcj96kwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0yNzA3MjEwMjIxMjFaMDYxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHzAdBgNVBAMMFk1pZ1REIFJvdGF0ZWQgU2lnbmVyIEIwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATufPloGY6hxw6UkKp22MLrcrKnFrzZGuTOSMQ2 +Hf/aoXminjKVQSDJY0t8TQkwQhz06MBatgkslq1a7pNZGbs+4cmb6vVfQ0yYFf1E +ntnO10FyPwH3YL6EQM87MUBYqsyjaTBnMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUE +DjAMBgorBgEEAYH9WQEBMB0GA1UdDgQWBBR68APKKOMcp03Cp6xLPp33pqvRpjAf +BgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAKBggqhkjOPQQDAwNpADBm +AjEA380oBWcbpJFGGr86SxJ274TmmM1XIdB/mYgAuIrPfNTJbopLX5VmN37m+x53 +BSWNAjEAglxwIOW/EvvhQwYeDyJTbYOCBjmztEfoxMLbZqqVD843nJTlnMGZqRBb +1b1RhBGL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgIUOXk0571gxjFa4z9KRWAn5Nd9UYIwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0zNjA3MTgwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEVLVSBUZXN0IFJvb3QwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfOdFcbraNYlYjDzu73zwekqQ7s46LeoZKIGPoBEVu +y4r8KDrq8cfs5wxX/T7HNdqXl5g+zn3xWWOxcTuauerWan/XpwwzNesebPu1pisV +ZmaSOoxvG4Lx+kDw5WUacO+jYzBhMB0GA1UdDgQWBBQVf9r0GM2yDAeYJKG0vAme +VqWXazAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEApN/sTVod +QDjYkiSAZvqO8Wr2o7jMaUAW0fRefChS+KWEPaJH1MOrJKfxmj+pqBcoAjEA70be +7AjLsHZrtccNS34OjK+nD61Quogqd3x44GP0r6edhtoGeyx2tTYLOE69Wvin +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_designated_multi.pem b/src/crypto/test/eku/signer_designated_multi.pem new file mode 100644 index 000000000..08d10c2b1 --- /dev/null +++ b/src/crypto/test/eku/signer_designated_multi.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICIjCCAaigAwIBAgIUDv4/fbyuSoXAn7kp4qp44d8nBHUwCgYIKoZIzj0EAwMw +OTETMBEGA1UECgwKTWlnVEQgVGVzdDEiMCAGA1UEAwwZTWlnVEQgRGVzaWduYXRl +ZCBFS1UgUm9vdDAgFw0yNjA3MjIyMTA0MDlaGA8yMTI2MDYyODIxMDQwOVowNjET +MBEGA1UECgwKTWlnVEQgVGVzdDEfMB0GA1UEAwwWTWlnVEQgRGVzaWduYXRlZCBN +dWx0aTB2MBAGByqGSM49AgEGBSuBBAAiA2IABHggeS6ZvU9muWLe4FCoX6np5TBW +DnEEGs43gKyQRnq/mcnTDjYRC+f7mTt6Nrw1SzJ0PEggToqr3ELCRVgkI7sYqAxB +/Jdi8tglu0sJdhFuGxn2HMJFAYr7T2GJhS2dV6NyMHAwDAYDVR0TAQH/BAIwADAg +BgNVHSUEGTAXBggrBgEFBQcDAwYLKwYBBAGCN0w7ASswHQYDVR0OBBYEFOHuRcow +41iz5Z0Ry1IXvDHtiDz8MB8GA1UdIwQYMBaAFIG8wRq1xxT0HRauEUUxNMK0agjW +MAoGCCqGSM49BAMDA2gAMGUCMQD39gFu5tFm8cjsS6LrkVtYNWiOPK/uLcFjMSfz +YdNXpO6GDKMyGpWAzfzoEYQX74UCMBdfPGso11c2uLTWxxopOWNuUyN1H/t/vqPo +pV1tJvp3wfmLiAYc7SYcN7a4d8+prQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB9TCCAXugAwIBAgIUbA3SkgzzDfSaqilxghR2nIHAvJMwCgYIKoZIzj0EAwMw +OTETMBEGA1UECgwKTWlnVEQgVGVzdDEiMCAGA1UEAwwZTWlnVEQgRGVzaWduYXRl +ZCBFS1UgUm9vdDAgFw0yNjA3MjIyMTA0MDlaGA8yMTI2MDYyODIxMDQwOVowOTET +MBEGA1UECgwKTWlnVEQgVGVzdDEiMCAGA1UEAwwZTWlnVEQgRGVzaWduYXRlZCBF +S1UgUm9vdDB2MBAGByqGSM49AgEGBSuBBAAiA2IABKYzIu9CyteH6nobtVtNeKmi +aCKhHDFVVAfnZoUd74AZUgwjn9me7szAKzNxz3Z74bZtd+Xw4H9x5Y3Ef+ZgHHOm +xf+3ZQz8LIjJ6U883fvGXqtcqT1D/gPonb2xPUo3R6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFIG8wRq1xxT0HRauEUUxNMK0 +agjWMAoGCCqGSM49BAMDA2gAMGUCMGmYjkwVLjznPaimwWvqUnwgw4RXliXQvbRh +aetsWrOwJkmb2RhNwEHOt3ekXxeNkgIxAPmvYlIimCrse8KmV7rVLBZ4FXg/jQhF +POzJPjcAZYaS4i/dIA38FcGL+YW/CNyBsw== +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_designated_only.pem b/src/crypto/test/eku/signer_designated_only.pem new file mode 100644 index 000000000..81733b53c --- /dev/null +++ b/src/crypto/test/eku/signer_designated_only.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICGDCCAZ2gAwIBAgIUWIqUSNla4AtNLYnWX9XzTVbFTJEwCgYIKoZIzj0EAwMw +OTETMBEGA1UECgwKTWlnVEQgVGVzdDEiMCAGA1UEAwwZTWlnVEQgRGVzaWduYXRl +ZCBFS1UgUm9vdDAgFw0yNjA3MjIyMTA0MDlaGA8yMTI2MDYyODIxMDQwOVowNTET +MBEGA1UECgwKTWlnVEQgVGVzdDEeMBwGA1UEAwwVTWlnVEQgRGVzaWduYXRlZCBP +bmx5MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAElfPl3ALyIGWS+CzPnuTdLveGNtcA +WszLh5nleDmBSggBgB7Kgg1pa3ywKR4VfH4RU6CZ/Z1CduenRiLopATtt7SrDS71 +SwVTUSscOcQy3JDIucimFOG/03G4oEY36IL+o2gwZjAMBgNVHRMBAf8EAjAAMBYG +A1UdJQQPMA0GCysGAQQBgjdMOwErMB0GA1UdDgQWBBTvKaSw1tpOQY2EoXIKOnF9 +MvsyBTAfBgNVHSMEGDAWgBSBvMEatccU9B0WrhFFMTTCtGoI1jAKBggqhkjOPQQD +AwNpADBmAjEA2zZ5QcJOqhicvvNdBmMXTIE8sczxH+JPTgBTPV1EcGZHcI/LkCGj +zN+FElPQLLmhAjEAwy+uKXyngGKm3AYAu0d53h51he/p8cyphuGPqUhchsXSyJPF +TL7RaQKZEXqglwkJ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB9TCCAXugAwIBAgIUbA3SkgzzDfSaqilxghR2nIHAvJMwCgYIKoZIzj0EAwMw +OTETMBEGA1UECgwKTWlnVEQgVGVzdDEiMCAGA1UEAwwZTWlnVEQgRGVzaWduYXRl +ZCBFS1UgUm9vdDAgFw0yNjA3MjIyMTA0MDlaGA8yMTI2MDYyODIxMDQwOVowOTET +MBEGA1UECgwKTWlnVEQgVGVzdDEiMCAGA1UEAwwZTWlnVEQgRGVzaWduYXRlZCBF +S1UgUm9vdDB2MBAGByqGSM49AgEGBSuBBAAiA2IABKYzIu9CyteH6nobtVtNeKmi +aCKhHDFVVAfnZoUd74AZUgwjn9me7szAKzNxz3Z74bZtd+Xw4H9x5Y3Ef+ZgHHOm +xf+3ZQz8LIjJ6U883fvGXqtcqT1D/gPonb2xPUo3R6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFIG8wRq1xxT0HRauEUUxNMK0 +agjWMAoGCCqGSM49BAMDA2gAMGUCMGmYjkwVLjznPaimwWvqUnwgw4RXliXQvbRh +aetsWrOwJkmb2RhNwEHOt3ekXxeNkgIxAPmvYlIimCrse8KmV7rVLBZ4FXg/jQhF +POzJPjcAZYaS4i/dIA38FcGL+YW/CNyBsw== +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_multiple_eku.pem b/src/crypto/test/eku/signer_multiple_eku.pem new file mode 100644 index 000000000..e719a0721 --- /dev/null +++ b/src/crypto/test/eku/signer_multiple_eku.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICGzCCAaCgAwIBAgIUGBaSh46F+ZxSt0xq75U6dkcj96wwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjI5NDVaFw0yNzA3MjEwMjI5NDVaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEFtYmlndW91cyBFS1UwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAR5mpQ0fxXT/g+2uUW71aiAAXC28XXH+TaPiZPQ4tgI +dC4zdkBuxSmEgAcW8Mb51RfAOd3PVnioSPDtPvWLYhAGsp407eUYLAofMQLKtmif +8ReZXzpUt64XtTqmBOVOmwOjdTBzMA4GA1UdDwEB/wQEAwIHgDAhBgNVHSUEGjAY +BgorBgEEAYH9WQEBBgorBgEEAYH9WQECMB0GA1UdDgQWBBRNvJxZsgtY2bmOvtH9 +XEzGtHWOnDAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAKBggqhkjO +PQQDAwNpADBmAjEAgkmERvG9MfpTX4yO2j/C1lYOKjjKkkchhxxOFt3VWPMYPmaH +MVUZXyM/gsMbamg4AjEA9TmQLAN+KJ83u4K1qOSZZccOVPRg/j6iJPMS/t1ZF1/y +IF0TXP63goWatpRoaC4b +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgIUOXk0571gxjFa4z9KRWAn5Nd9UYIwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0zNjA3MTgwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEVLVSBUZXN0IFJvb3QwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfOdFcbraNYlYjDzu73zwekqQ7s46LeoZKIGPoBEVu +y4r8KDrq8cfs5wxX/T7HNdqXl5g+zn3xWWOxcTuauerWan/XpwwzNesebPu1pisV +ZmaSOoxvG4Lx+kDw5WUacO+jYzBhMB0GA1UdDgQWBBQVf9r0GM2yDAeYJKG0vAme +VqWXazAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEApN/sTVod +QDjYkiSAZvqO8Wr2o7jMaUAW0fRefChS+KWEPaJH1MOrJKfxmj+pqBcoAjEA70be +7AjLsHZrtccNS34OjK+nD61Quogqd3x44GP0r6edhtoGeyx2tTYLOE69Wvin +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_no_eku.pem b/src/crypto/test/eku/signer_no_eku.pem new file mode 100644 index 000000000..dc332debe --- /dev/null +++ b/src/crypto/test/eku/signer_no_eku.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIB9TCCAXugAwIBAgIUGBaSh46F+ZxSt0xq75U6dkcj96swCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0yNzA3MjEwMjIxMjFaMDExEzARBgNVBAoM +Ck1pZ1REIFRlc3QxGjAYBgNVBAMMEU1pZ1REIE1pc3NpbmcgRUtVMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEEvbIYhUuAz25HvOarGyXmaRbRAWQKqHrlMlJaKw1EQNY +qQU/O5lM7Shkq40AMgyrZW3aB0srI+9e+ai59OMTnimskohCbSwqAuhwCyqZpC/3 +OOEBP7xgK4rsJCX8Jetko1IwUDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFKbt +uecw2MdkOBzCATD8ARX5eiyKMB8GA1UdIwQYMBaAFBV/2vQYzbIMB5gkobS8CZ5W +pZdrMAoGCCqGSM49BAMDA2gAMGUCMQC6BNqECvh12qP/C48vCOxaMbKu+bHyA3eJ +uAKhnGuxI+tJsXE9OCpy25u9iqVOtfACMADHN2ImL7kVDpIMf/R1rtkb3pdoGbTs +rUPOfsv2XoQ+Fw0LXq81k3k5o0nYibgLhA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgIUOXk0571gxjFa4z9KRWAn5Nd9UYIwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0zNjA3MTgwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEVLVSBUZXN0IFJvb3QwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfOdFcbraNYlYjDzu73zwekqQ7s46LeoZKIGPoBEVu +y4r8KDrq8cfs5wxX/T7HNdqXl5g+zn3xWWOxcTuauerWan/XpwwzNesebPu1pisV +ZmaSOoxvG4Lx+kDw5WUacO+jYzBhMB0GA1UdDgQWBBQVf9r0GM2yDAeYJKG0vAme +VqWXazAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEApN/sTVod +QDjYkiSAZvqO8Wr2o7jMaUAW0fRefChS+KWEPaJH1MOrJKfxmj+pqBcoAjEA70be +7AjLsHZrtccNS34OjK+nD61Quogqd3x44GP0r6edhtoGeyx2tTYLOE69Wvin +-----END CERTIFICATE----- diff --git a/src/crypto/test/eku/signer_other_eku.pem b/src/crypto/test/eku/signer_other_eku.pem new file mode 100644 index 000000000..d1f1e4e5c --- /dev/null +++ b/src/crypto/test/eku/signer_other_eku.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICDTCCAZSgAwIBAgIUGBaSh46F+ZxSt0xq75U6dkcj96owCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0yNzA3MjEwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIE90aGVyIFB1cnBvc2UwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAR/TabYZEPdTQV2dqbx2GuOIIhBS69fd46x8LOzrBEG +IUexnrOgQ7rgHIaRd3WXq54MZSbob9MjAwhTt0IT8MqPvDaB65GQXvt3lDRm7pHm +WqYGqZsq47MvdBzp3cqkOp2jaTBnMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAM +BgorBgEEAYH9WQECMB0GA1UdDgQWBBTyo+ipdya2xONvm+YeD9GP6n1CzjAfBgNV +HSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAKBggqhkjOPQQDAwNnADBkAjBZ +DeRdJoooBFzYSee1Uj4gZLxQXTq1mY9+vzRR/woUtXBuY2gUx81YJcrj2k0gDrsC +MAT0Gv05f3CYNjntDtzwNubHoH1pF5/qEvgIN6eGeALlmNIDfYolSeSzw7CFpQ01 +AQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgIUOXk0571gxjFa4z9KRWAn5Nd9UYIwCgYIKoZIzj0EAwMw +MzETMBEGA1UECgwKTWlnVEQgVGVzdDEcMBoGA1UEAwwTTWlnVEQgRUtVIFRlc3Qg +Um9vdDAeFw0yNjA3MjEwMjIxMjFaFw0zNjA3MTgwMjIxMjFaMDMxEzARBgNVBAoM +Ck1pZ1REIFRlc3QxHDAaBgNVBAMME01pZ1REIEVLVSBUZXN0IFJvb3QwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfOdFcbraNYlYjDzu73zwekqQ7s46LeoZKIGPoBEVu +y4r8KDrq8cfs5wxX/T7HNdqXl5g+zn3xWWOxcTuauerWan/XpwwzNesebPu1pisV +ZmaSOoxvG4Lx+kDw5WUacO+jYzBhMB0GA1UdDgQWBBQVf9r0GM2yDAeYJKG0vAme +VqWXazAfBgNVHSMEGDAWgBQVf9r0GM2yDAeYJKG0vAmeVqWXazAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNpADBmAjEApN/sTVod +QDjYkiSAZvqO8Wr2o7jMaUAW0fRefChS+KWEPaJH1MOrJKfxmj+pqBcoAjEA70be +7AjLsHZrtccNS34OjK+nD61Quogqd3x44GP0r6edhtoGeyx2tTYLOE69Wvin +-----END CERTIFICATE----- diff --git a/src/devices/vmcall_raw/src/stream.rs b/src/devices/vmcall_raw/src/stream.rs index 87739e77d..417cec84e 100644 --- a/src/devices/vmcall_raw/src/stream.rs +++ b/src/devices/vmcall_raw/src/stream.rs @@ -123,3 +123,97 @@ impl VmcallRaw { Ok(()) } } + +#[cfg(test)] +mod tests { + use super::*; + use core::future::Future; + use core::pin::pin; + use core::task::{Context, Poll, Waker}; + + /// Drive a future expected to resolve without ever yielding `Pending`. + /// `recv` satisfies this once `data_queue` is pre-populated, because it + /// then performs no VMCALL. Panics if the future would block. + fn run_ready<F: Future>(fut: F) -> F::Output { + let mut cx = Context::from_waker(Waker::noop()); + let mut fut = pin!(fut); + match fut.as_mut().poll(&mut cx) { + Poll::Ready(v) => v, + Poll::Pending => panic!("future unexpectedly pending (unexpected VMCALL?)"), + } + } + + fn stream_with(packets: &[&[u8]]) -> VmcallRaw { + let mut s = VmcallRaw::new().unwrap(); + for p in packets { + s.data_queue.push_back(p.to_vec()); + } + s + } + + #[test] + fn recv_drains_single_queued_packet() { + let mut s = stream_with(&[b"hello"]); + let mut buf = [0u8; 16]; + let n = run_ready(s.recv(&mut buf, 0)).unwrap(); + assert_eq!(n, 5); + assert_eq!(&buf[..n], b"hello"); + assert!(s.data_queue.is_empty()); + } + + #[test] + fn recv_concatenates_queued_packets_when_buf_is_large() { + let mut s = stream_with(&[b"abc", b"de", b"fghi"]); + let mut buf = [0u8; 16]; + let n = run_ready(s.recv(&mut buf, 0)).unwrap(); + assert_eq!(n, 9); + assert_eq!(&buf[..n], b"abcdefghi"); + assert!(s.data_queue.is_empty()); + } + + #[test] + fn recv_preserves_leftover_when_buf_smaller_than_packet() { + // A packet larger than the caller's buffer must not lose bytes: the + // remainder stays queued for the next recv. + let mut s = stream_with(&[b"abcdef"]); + let mut buf = [0u8; 4]; + + let n1 = run_ready(s.recv(&mut buf, 0)).unwrap(); + assert_eq!(n1, 4); + assert_eq!(&buf[..n1], b"abcd"); + + let n2 = run_ready(s.recv(&mut buf, 0)).unwrap(); + assert_eq!(n2, 2); + assert_eq!(&buf[..n2], b"ef"); + assert!(s.data_queue.is_empty()); + } + + #[test] + fn caller_loop_reassembles_multi_packet_message() { + // Models the receiver of a chunked send: a large logical message + // arrives as several MTU-sized packets. A caller that loops `recv` + // into a fixed (deliberately misaligned) buffer must recover the exact + // original bytes across packet boundaries -- the property the + // higher-level readers (pre_session / SPDM / rustls) depend on, given + // that `recv` returns at most one packet's worth per call. + const TOTAL: usize = 180 * 1024; + const PACKET: usize = 64 * 1024; // simulate a 64KB-MTU peer + let original: Vec<u8> = (0..TOTAL).map(|i| (i % 251) as u8).collect(); + + let mut s = VmcallRaw::new().unwrap(); + for chunk in original.chunks(PACKET) { + s.data_queue.push_back(chunk.to_vec()); + } + + let mut got: Vec<u8> = Vec::with_capacity(TOTAL); + let mut app = [0u8; 5000]; // not a divisor of PACKET -> crosses boundaries + while got.len() < TOTAL { + let n = run_ready(s.recv(&mut app, 0)).unwrap(); + assert!(n > 0, "recv must make forward progress"); + got.extend_from_slice(&app[..n]); + } + + assert_eq!(got, original); + assert!(s.data_queue.is_empty()); + } +} diff --git a/src/devices/vmcall_raw/src/transport/vmcall.rs b/src/devices/vmcall_raw/src/transport/vmcall.rs index 7081dcd79..e4aaa4a8f 100644 --- a/src/devices/vmcall_raw/src/transport/vmcall.rs +++ b/src/devices/vmcall_raw/src/transport/vmcall.rs @@ -18,14 +18,28 @@ use td_payload::arch::idt::InterruptStack; use td_payload::mm::shared::SharedMemory; use tdx_tdcall::tdx; -pub(crate) const MAX_VMCALL_RAW_STREAM_MTU: usize = 0x1000 * 16; +/// Migration data-channel buffer size (send and receive) used for a single +/// `Service.MigTD.Send` / `Service.MigTD.Receive` VMCALL. +/// +/// The GHCI spec only requires a compliant VMM to support *at least* a 64KB +/// buffer (`0x1000 * 16`), which is the portable floor used upstream. The +/// Azure host provisions a larger buffer — 1MB by default and never below +/// 512KB — so this Azure build raises the value to 512KB. That lets the +/// policy_v2 pre-session blob (signed policy + issuer chain, ~180KB) ride in +/// a single VMCALL instead of several 64KB round-trips. +/// +/// Constraints: this MUST NOT exceed the smallest send/receive buffer the +/// host guarantees (512KB on Azure), both migration peers must use the same +/// value, and one receive buffer of this size must fit in the shared-memory +/// pool (`migtd::SHARED_MEMORY_SIZE`, 1.75MB). +pub(crate) const MAX_VMCALL_RAW_STREAM_MTU: usize = 0x1000 * 128; /// GHCI 1.5 buffer header overhead (8-byte status + 4-byte length) prepended /// by `vmcall_raw_transport_enqueue` to each VMCALL payload. pub(crate) const VMCALL_RAW_GHCI_HEADER_LEN: usize = 12; -/// Largest payload that can ride in a single `Service.MigTD.Send` VMCALL. -/// The VMM-side buffer for the migration data channel matches the MTU the -/// receive side advertises; sending more than this in one VMCALL fails with -/// TDX_VMCALL_STATUS != SUCCESS. +/// Largest payload that can ride in a single `Service.MigTD.Send` VMCALL: the +/// buffer size minus the GHCI header. The send path chunks to this so a write +/// never exceeds the host buffer (exceeding it fails with +/// TDX_VMCALL_STATUS != SUCCESS). pub(crate) const VMCALL_RAW_SEND_PAYLOAD_MTU: usize = MAX_VMCALL_RAW_STREAM_MTU - VMCALL_RAW_GHCI_HEADER_LEN; const VMCALL_VECTOR: u8 = 0x52; @@ -204,3 +218,22 @@ fn vmcall_raw_intr_notification(_: &mut InterruptStack) { flag.store(true, Ordering::SeqCst); } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn send_chunk_plus_header_exactly_fills_receive_buffer() { + // A single send chunk plus the GHCI header must fit in exactly one + // peer receive buffer; otherwise a chunked send could overflow the + // receiver's fixed MTU-sized buffer (which would truncate the packet). + assert_eq!( + VMCALL_RAW_SEND_PAYLOAD_MTU + VMCALL_RAW_GHCI_HEADER_LEN, + MAX_VMCALL_RAW_STREAM_MTU + ); + // The receive buffer is allocated as a whole number of pages. + assert_eq!(MAX_VMCALL_RAW_STREAM_MTU % PAGE_SIZE, 0); + assert!(VMCALL_RAW_SEND_PAYLOAD_MTU > 0); + } +} diff --git a/src/migtd/Cargo.toml b/src/migtd/Cargo.toml index 59428e37b..811eb337d 100644 --- a/src/migtd/Cargo.toml +++ b/src/migtd/Cargo.toml @@ -73,6 +73,9 @@ cet-shstk = ["td-payload/cet-shstk"] coverage = ["minicov"] main = ["attestation", "policy/log", "sha2"] policy_v2 = ["policy/policy_v2", "attestation/attest-lib-ext", "td-shim-interface-emu?/policy_v2"] +# Opt-in CoRIM-based hash endorsement for servtd collateral. Additive on top +# of policy_v2; without it the legacy JSON collateral path is used unchanged. +servtd_corim = ["policy_v2", "policy/servtd_corim"] stack-guard = ["td-payload/stack-guard"] virtio-vsock = ["vsock/virtio-vsock"] virtio-serial = ["virtio_serial"] @@ -85,6 +88,8 @@ test_stack_size = ["td-benchmark"] test_disable_ra_and_accept_all = ["attestation/test", "tdx-tdcall-emu?/test_mock_report"] # Dangerous: test-only RA bypass; blocked in release (see src/lib.rs) spdm_attestation = ["main"] test_mock_report = ["AzCVMEmu", "tdx-tdcall-emu/test_mock_report"] # Use mock TD report in AzCVMEmu mode +igvm-attest = ["attestation/igvm-attest"] +test-get-quote = ["policy_v2", "attestation/test-get-quote"] use-mock-quote = ["attestation/use-mock-quote"] # Use mock quote and mock TD report for non-AzCVMEmu testing mock_quote_retry = ["AzCVMEmu", "tdx-tdcall-emu/mock_quote_retry"] AzCVMEmu = [ @@ -101,7 +106,6 @@ AzCVMEmu = [ "td-logger-emu", # Use console-based td-logger shim "tokio", ] -igvm-attest = ["attestation/igvm-attest"] [patch.crates-io] sys_time = { path = "src/std-support/sys_time" } diff --git a/src/migtd/build.rs b/src/migtd/build.rs index 79412af80..8ab41126f 100644 --- a/src/migtd/build.rs +++ b/src/migtd/build.rs @@ -17,5 +17,7 @@ fn main() { println!("cargo:rustc-link-arg=-Wl,-z,norelro"); println!("cargo:rustc-link-arg=-lservtd_attest_app"); println!("cargo:rustc-link-arg=-lcrypto"); + // GNU ld must see libc after the late native archives that call atexit. + println!("cargo:rustc-link-arg=-lc"); } } diff --git a/src/migtd/src/bin/migtd/cvmemu.rs b/src/migtd/src/bin/migtd/cvmemu.rs index 2045dbea4..5616e3270 100644 --- a/src/migtd/src/bin/migtd/cvmemu.rs +++ b/src/migtd/src/bin/migtd/cvmemu.rs @@ -80,34 +80,58 @@ fn initialize_emulation() { #[cfg(feature = "policy_v2")] let result = { - // policy_v2: root CA is embedded in policy collaterals, only need issuer chain - let policy_issuer_chain_file_path = env::var("MIGTD_POLICY_ISSUER_CHAIN_FILE") - .map_err(|_| { - log::error!("Policy v2 requires a policy issuer chain file but MIGTD_POLICY_ISSUER_CHAIN_FILE was not set\n"); - }) - .unwrap_or_else(|_| process::exit(1)); - - log::info!( - "MIGTD_POLICY_ISSUER_CHAIN_FILE set to: {}\n", - policy_issuer_chain_file_path - ); + let signer_anchor = env::var("MIGTD_SERVTD_SIGNER_ANCHOR_FILE").ok(); + let servtd_corim = env::var("MIGTD_SERVTD_CORIM_FILE").ok(); + + match (signer_anchor, servtd_corim) { + (Some(anchor_path), Some(corim_path)) => { + for (description, path) in [ + ("ServTD signer anchor", &anchor_path), + ("signed ServTD CoRIM", &corim_path), + ] { + if !std::path::Path::new(path).exists() { + println!("{} file not found: {}", description, path); + print_usage(); + process::exit(1); + } + } - // Verify chain file exists - if !std::path::Path::new(&policy_issuer_chain_file_path).exists() { - println!( - "Policy issuer chain file not found: {}", - policy_issuer_chain_file_path - ); - print_usage(); - process::exit(1); - } + log::info!("MIGTD_SERVTD_SIGNER_ANCHOR_FILE set to: {}\n", anchor_path); + log::info!("MIGTD_SERVTD_CORIM_FILE set to: {}\n", corim_path); + let anchor_path: &'static str = Box::leak(anchor_path.into_boxed_str()); + let corim_path: &'static str = Box::leak(corim_path.into_boxed_str()); + td_shim_interface_emu::init_file_based_emulation_with_corim( + policy_path, + anchor_path, + corim_path, + ) + } + (None, None) => { + // policy_v2: root CA is embedded in policy collaterals. + let chain_path = env::var("MIGTD_POLICY_ISSUER_CHAIN_FILE") + .unwrap_or_else(|_| { + log::error!("Policy v2 requires either MIGTD_POLICY_ISSUER_CHAIN_FILE or both CoRIM-only input variables\n"); + process::exit(1); + }); + + log::info!("MIGTD_POLICY_ISSUER_CHAIN_FILE set to: {}\n", chain_path); + if !std::path::Path::new(&chain_path).exists() { + println!("Policy issuer chain file not found: {}", chain_path); + print_usage(); + process::exit(1); + } - let chain_path_static: &'static str = - Box::leak(policy_issuer_chain_file_path.into_boxed_str()); - td_shim_interface_emu::init_file_based_emulation_with_policy_chain( - policy_path, - chain_path_static, - ) + let chain_path: &'static str = Box::leak(chain_path.into_boxed_str()); + td_shim_interface_emu::init_file_based_emulation_with_policy_chain( + policy_path, + chain_path, + ) + } + _ => { + log::error!("MIGTD_SERVTD_SIGNER_ANCHOR_FILE and MIGTD_SERVTD_CORIM_FILE must be set together\n"); + process::exit(1); + } + } }; #[cfg(not(feature = "policy_v2"))] @@ -141,7 +165,11 @@ fn initialize_emulation() { #[cfg(feature = "policy_v2")] { let chain_file = env::var("MIGTD_POLICY_ISSUER_CHAIN_FILE").ok(); + let anchor_file = env::var("MIGTD_SERVTD_SIGNER_ANCHOR_FILE").ok(); + let corim_file = env::var("MIGTD_SERVTD_CORIM_FILE").ok(); log::info!(" Policy Issuer Chain: {:?}\n", chain_file); + log::info!(" ServTD Signer Anchor: {:?}\n", anchor_file); + log::info!(" Signed ServTD CoRIM: {:?}\n", corim_file); } } else { log::error!("Failed to initialize file-based emulation\n"); @@ -551,12 +579,8 @@ fn handle_pre_mig_emu() -> i32 { } WaitForRequestResponse::GetTdReport(report_info) => { log::info!(migration_request_id = report_info.mig_request_id; "Processing GetTDReport request\n"); - log::debug!(migration_request_id = report_info.mig_request_id; - "ReportData (first 32 bytes): {:02x?}\n", - &report_info.reportdata[0..32] - ); - // Generate TD report using the reportdata + // Generate the TD report using MigTD's fixed report data. log::debug!(migration_request_id = report_info.mig_request_id; "Generating TD report with vTPM interface\n"); let reportdata = get_tdreport_reportdata(); diff --git a/src/migtd/src/bin/migtd/main.rs b/src/migtd/src/bin/migtd/main.rs index 4e711a41f..d3a0bacad 100644 --- a/src/migtd/src/bin/migtd/main.rs +++ b/src/migtd/src/bin/migtd/main.rs @@ -10,9 +10,9 @@ extern crate alloc; use core::future::poll_fn; use core::task::Poll; -#[cfg(feature = "policy_v2")] -use alloc::string::String; use alloc::vec::Vec; +#[cfg(feature = "policy_v2")] +use alloc::{format, string::String}; use log::info; #[cfg(feature = "vmcall-raw")] use log::{debug, Level}; @@ -74,7 +74,7 @@ fn dump_td_info_and_hash() { hasher.update(td_report.td_info.as_bytes()); let hash = hasher.finalize(); - debug!("TD Info Hash: {:x}\n", hash); + info!("TD Info Hash: {:x}\n", hash); } const MIGTD_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -124,6 +124,22 @@ pub fn runtime_main() { // Measure the input data do_measurements(); + #[cfg(feature = "test-get-quote")] + { + use migtd::mig_policy; + + log::info!("test-get-quote: testing quote after RTMR measurements\n"); + if let Err(e) = mig_policy::get_local_tcb_evaluation_info() { + let message = format!("GetQuote initialization test failed: {:?}", e); + log::error!("{}\n", message); + panic_with_guest_crash_reg_report( + MigrationResult::InvalidPolicyError as u64, + message.as_bytes(), + ); + } + log::info!("test-get-quote: quote generation and verification succeeded\n"); + } + migration::event::register_callback(); // Query the capability of VMM @@ -140,7 +156,7 @@ pub fn runtime_main() { #[cfg(feature = "vmcall-raw")] { log::info!("log::max_level() = {}\n", log::max_level()); - if log::max_level() >= Level::Debug { + if log::log_enabled!(Level::Info) { dump_td_info_and_hash(); } } @@ -275,67 +291,98 @@ fn get_policy_and_measure(event_log: &mut [u8]) { let version = initialize_policy(); - // Per GHCI 1.5: Verify own TDINFO.MROWNER/MROWNERCONFIG matches policy key/SVN - // Skip in AzCVMEmu mode — emulator uses mock TD reports where VMM does not - // populate MROWNER/MROWNERCONFIG. - #[cfg(not(feature = "AzCVMEmu"))] - { - use migtd::mig_policy; - if let Err(e) = mig_policy::verify_own_tdinfo() { - log::error!("TDINFO policy binding verification failed: {:?}\n", e); + let event_data = version.as_bytes(); + + // Per doc/tcb_mapping_design_proposal.md: RTMR2 is extended ONCE with the + // canonical bytes of `policyData`. For JSON collateral, only + // `servtdCollateral.servtdTcbMapping` and its issuer chain are removed. + // The redaction makes the mapping updateable after the IGVM is published; + // every other `policyData` field — including the signed `servtdIdentity` + // and its issuer chain — is protected by the canonical object bytes. + // CoRIM-only policyData omits `servtdCollateral` and is measured in full. The + // event-log entry's `tagged_event_data` payload stays small + // (`version.as_bytes()`) to keep CCEL bounded; the full canonical bytes + // are only fed into the digest. + // + // The buffer hashed here MUST be byte-identical to what + // `policy::v2::policy::check_policy_integrity` and `migtd-hash` (offline + // RTMR2 simulator) compute, otherwise valid peers fail event-log + // integrity verification. + let policy_data_bytes = match migtd::policy::extract_canonical_policy_data_bytes(policy) { + Ok(bytes) => bytes, + Err(e) => { + log::error!("Failed to extract canonical policyData bytes: {:?}\n", e); panic_with_guest_crash_reg_report( MigrationResult::InvalidPolicyError as u64, - b"TDINFO MROWNER/MROWNERCONFIG mismatch with policy", + b"Failed to extract canonical policyData bytes", ); } - } - - let event_data = version.as_bytes(); - - // Measure and extend the migration policy to RTMR + }; let _ = event_log::write_tagged_event_log( event_log, MR_INDEX_POLICY, - policy, - TAGGED_EVENT_ID_POLICY, + &policy_data_bytes, + TAGGED_EVENT_ID_POLICY_DATA, event_data, ) .map_err(|e| { - log::error!("Failed to log migration policy: {:?}\n", e); + log::error!("Failed to log policyData: {:?}\n", e); panic_with_guest_crash_reg_report( MigrationResult::InitializationError as u64, - b"Failed to log migration policy", + b"Failed to log policyData", ); }); } #[cfg(feature = "policy_v2")] fn get_policy_issuer_chain_and_measure(event_log: &mut [u8]) { - // Read policy issuer chain from CFV - let policy_issuer_chain = match config::get_policy_issuer_chain() { - Some(policy_issuer_chain) => policy_issuer_chain, + // Signer-anchor source from CFV: the 48-byte anchor slot (CoRIM-only + // enrollment) when present, else the legacy policy issuer chain PEM. + let anchor_source = match config::get_signer_anchor_source() { + Some(anchor_source) => anchor_source, None => { - log::error!("Fail to get policy issuer chain from CFV\n"); + log::error!("Fail to get policy signer anchor / issuer chain from CFV\n"); + panic_with_guest_crash_reg_report( + MigrationResult::InvalidPolicyError as u64, + b"Fail to get policy signer anchor from CFV", + ); + } + }; + + // Per doc/rtmr1_signer_anchor_proposal.md: RTMR1 is extended with the SHA384 of + // the *signer anchor* A, NOT the entire PEM blob. A is derived from the + // root CA fingerprint and the leaf certificate's dedicated signer EKU, with + // a domain-separation tag, so the value is stable across rotations of + // PEM whitespace/ordering and across reissuance of intermediates. When the + // 48-byte anchor is enrolled directly, `resolve_signer_anchor` returns it + // as-is, yielding the identical RTMR1 value as the PEM-derived form. + let signer_anchor = match migtd::policy::resolve_signer_anchor(anchor_source) { + Ok(a) => a, + Err(e) => { + log::error!("Failed to resolve signer anchor: {:?}\n", e); panic_with_guest_crash_reg_report( MigrationResult::InvalidPolicyError as u64, - b"Fail to get policy issuer chain from CFV", + b"Failed to resolve policy signer anchor", ); } }; - // Measure and extend the policy issuer chain to RTMR + // `write_tagged_event_log` hashes the supplied bytes (signer_anchor) and + // extends RTMR1 with that digest. The recorded event still carries the + // anchor source (48-byte anchor or full PEM) as `tagged_event_data` so a + // verifier can re-derive A. let _ = event_log::write_tagged_event_log( event_log, MR_INDEX_POLICY_ISSUER_CHAIN, - policy_issuer_chain, + &signer_anchor, TAGGED_EVENT_ID_POLICY_ISSUER_CHAIN, - policy_issuer_chain, + anchor_source, ) .map_err(|e| { - log::error!("Failed to log policy issuer chain: {:?}\n", e); + log::error!("Failed to log policy signer anchor: {:?}\n", e); panic_with_guest_crash_reg_report( MigrationResult::InitializationError as u64, - b"Failed to log policy issuer chain", + b"Failed to log policy signer anchor", ); }); } @@ -395,26 +442,28 @@ fn initialize_policy() -> String { ); } }; - let policy_issuer_chain = match config::get_policy_issuer_chain() { + let policy_issuer_chain = match config::get_signer_anchor_source() { Some(chain) => chain, None => { - log::error!("Fail to get policy issuer chain from CFV\n"); + log::error!("Fail to get policy signer anchor / issuer chain from CFV\n"); panic_with_guest_crash_reg_report( MigrationResult::InvalidPolicyError as u64, - b"Fail to get policy issuer chain from CFV", + b"Fail to get policy signer anchor from CFV", ); } }; // Initialize and verify the migration policy - let version = mig_policy::init_policy(policy, policy_issuer_chain).map_err(|e| { - log::error!("Failed to initialize migration policy: {:?}\n", e); - panic_with_guest_crash_reg_report( - MigrationResult::InvalidPolicyError as u64, - b"Failed to initialize migration policy", - ); - }); - - version.expect("Failed to initialize migration policy") + match mig_policy::init_policy(policy, policy_issuer_chain) { + Ok(version) => version, + Err(e) => { + let message = format!("Failed to initialize migration policy: {:?}", e); + log::error!("{}\n", message); + panic_with_guest_crash_reg_report( + MigrationResult::InvalidPolicyError as u64, + message.as_bytes(), + ); + } + } } fn handle_pre_mig() { @@ -525,20 +574,20 @@ fn handle_pre_mig() { log::error!( migration_request_id = rebinding_info.mig_request_id; "Failure during rebinding status code: {:x}\n", status.clone() as u8); } - let _ = - report_status(status as u8, rebinding_info.mig_request_id, &data) - .await - .map_err(|e| { - log::error!( - migration_request_id = rebinding_info.mig_request_id; - "Failed to report status for StartRebinding: {:?}\n", - e - ); - }); - log::trace!( - migration_request_id = rebinding_info.mig_request_id; - "ReportStatus for rebinding completed\n" - ); + match report_status(status as u8, rebinding_info.mig_request_id, &data) + .await + { + Ok(()) => log::trace!( + migration_request_id = rebinding_info.mig_request_id; + "Reported rebinding result status code: {:x}\n", + status as u8 + ), + Err(e) => log::error!( + migration_request_id = rebinding_info.mig_request_id; + "Failed to report status for StartRebinding: {:?}\n", + e + ), + } REQUESTS.lock().remove(&rebinding_info.mig_request_id); } WaitForRequestResponse::GetTdReport(wfr_info) => { diff --git a/src/migtd/src/config.rs b/src/migtd/src/config.rs index 05386a787..265486972 100644 --- a/src/migtd/src/config.rs +++ b/src/migtd/src/config.rs @@ -36,6 +36,42 @@ pub const MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID: Guid = Guid::from_fields( &[0xD3, 0xEA, 0xB3, 0x9F, 0x8A, 0xEB], ); +// {2B9D5A84-6F3C-4E71-8A2D-0C7E1F4B6A93} +// +// FFS GUID of the 48-byte RTMR1 signer anchor +// `A = SHA384(tag ‖ H(rootDER) ‖ leafEkuOidDER)` (hash of the root cert plus the +// leaf's dedicated signer-purpose EKU OID DER). This is the CoRIM-only +// enrollment form: instead of enrolling the full policy issuer chain PEM (whose +// only runtime role was to derive this anchor), the pipeline enrolls the +// precomputed anchor directly. Measured into RTMR1 exactly like the PEM-derived +// anchor, so the two forms are measurement-equivalent. When present it takes +// precedence over `MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID`. +pub const MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID: Guid = Guid::from_fields( + 0x2B9D5A84, + 0x6F3C, + 0x4E71, + 0x8A, + 0x2D, + &[0x0C, 0x7E, 0x1F, 0x4B, 0x6A, 0x93], +); + +// {7E5B9C11-2D4A-4F6E-9B3C-1A2B3C4D5E6F} +// +// FFS GUID of the signed ServTD TCB-mapping CoRIM (`COSE_Sign1`) enrolled in +// the CFV. This file is intentionally NOT measured: `do_measurements()` never +// reads this GUID, so enrolling it does not change MRTD/RTMR or the resulting +// `tdinfo_hash`. Trust comes from the CoRIM's COSE signature bound to the RTMR1 +// policy signer anchor (see `ServtdCorim::decode_signed`). +#[cfg(feature = "servtd_corim")] +pub const MIGTD_SERVTD_CORIM_FFS_GUID: Guid = Guid::from_fields( + 0x7E5B9C11, + 0x2D4A, + 0x4F6E, + 0x9B, + 0x3C, + &[0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F], +); + pub fn get_config_volume() -> &'static [u8] { unsafe { core::slice::from_raw_parts(CONFIG_VOLUME_BASE as *const u8, CONFIG_VOLUME_SIZE) } } @@ -58,3 +94,34 @@ pub fn get_policy_issuer_chain() -> Option<&'static [u8]> { MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID, ) } + +/// Read the 48-byte RTMR1 signer anchor from the CFV, if enrolled (the +/// CoRIM-only enrollment form). Returns `None` when only the legacy policy +/// issuer chain PEM is enrolled; callers then fall back to +/// [`get_policy_issuer_chain`] and derive the anchor from the PEM. +pub fn get_signer_anchor() -> Option<&'static [u8]> { + let cfv = get_config_volume(); + fv::get_file_from_fv( + cfv, + pi::fv::FV_FILETYPE_RAW, + MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID, + ) +} + +/// Resolve the signer-anchor *source* bytes from the CFV: the 48-byte anchor +/// slot when present, otherwise the policy issuer chain PEM. Both forms are +/// accepted by `policy::resolve_signer_anchor`. Returns `None` only when +/// neither slot is enrolled. +pub fn get_signer_anchor_source() -> Option<&'static [u8]> { + get_signer_anchor().or_else(get_policy_issuer_chain) +} + +/// Read the signed ServTD TCB-mapping CoRIM (`COSE_Sign1`) from the CFV, if +/// enrolled. Returns `None` when no CoRIM was enrolled (the policy then falls +/// back to the JSON `servtdCollateral` mapping). This file is deliberately not +/// measured; see [`MIGTD_SERVTD_CORIM_FFS_GUID`]. +#[cfg(feature = "servtd_corim")] +pub fn get_servtd_corim() -> Option<&'static [u8]> { + let cfv = get_config_volume(); + fv::get_file_from_fv(cfv, pi::fv::FV_FILETYPE_RAW, MIGTD_SERVTD_CORIM_FFS_GUID) +} diff --git a/src/migtd/src/event_log.rs b/src/migtd/src/event_log.rs index 2c1c2d5ed..c7f611352 100644 --- a/src/migtd/src/event_log.rs +++ b/src/migtd/src/event_log.rs @@ -28,6 +28,14 @@ pub const TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT: &[u8] = b"test_disable_ra_and_ac pub const TAGGED_EVENT_ID_POLICY: u32 = 0x1; pub const TAGGED_EVENT_ID_ROOT_CA: u32 = 0x2; pub const TAGGED_EVENT_ID_POLICY_ISSUER_CHAIN: u32 = 0x3; +/// Single RTMR2 extend for v2 policy: canonical bytes of `policyData` with the +/// JSON TCB mapping and its issuer chain removed. CoRIM-only policyData has no +/// `servtdCollateral` and is measured in full +/// (see `doc/tcb_mapping_design_proposal.md`). Replaces the prior six per-field +/// extends (`TAGGED_EVENT_ID_POLICY_VERSION/_ID/_SVN/_COLLATERALS`, +/// `TAGGED_EVENT_ID_SERVTD_IDENTITY`, and the `policy[]`-only use of +/// `TAGGED_EVENT_ID_POLICY = 0x1`). +pub const TAGGED_EVENT_ID_POLICY_DATA: u32 = 0x9; pub const TAGGED_EVENT_ID_TEST: u32 = 0x32; // MR index the event will be measured into @@ -220,6 +228,8 @@ pub(crate) fn parse_events(event_log: &[u8]) -> Option<BTreeMap<EventName, CcEve EventName::MigTdPolicySigner, CcEvent::new(event_header, None), ); + } else if tag_id == TAGGED_EVENT_ID_POLICY_DATA { + map.insert(EventName::MigTdPolicyData, CcEvent::new(event_header, None)); } } _ => {} diff --git a/src/migtd/src/lib.rs b/src/migtd/src/lib.rs index 0dc1a5f6a..44e3fe1d5 100644 --- a/src/migtd/src/lib.rs +++ b/src/migtd/src/lib.rs @@ -54,6 +54,10 @@ pub mod quote; pub mod ratls; pub mod spdm; +// Re-export the policy crate so external consumers (e.g. the migtd bin) can +// reach v2 measurement primitives without depending on `policy` directly. +pub use ::policy; + pub const STACK_SIZE: usize = 0x20_0000; pub const HEAP_SIZE: usize = 0x70_0000; diff --git a/src/migtd/src/mig_policy.rs b/src/migtd/src/mig_policy.rs index 9c78b43e3..a241850a7 100644 --- a/src/migtd/src/mig_policy.rs +++ b/src/migtd/src/mig_policy.rs @@ -70,22 +70,28 @@ mod v2 { use spin::Once; use tdx_tdcall::tdreport::{tdcall_verify_report, TdInfo, TdxReport}; - use crate::config::get_policy_issuer_chain; use crate::event_log::{parse_events, verify_event_log}; use crate::mig_policy::get_rtmrs_from_suppl_data; use crate::migration::pre_session_data::LogErr; use crate::migration::servtd_ext::ServtdExt; - const SERVTD_ATTR_IGNORE_ATTRIBUTES: u64 = 0x1_0000_0000; - const SERVTD_ATTR_IGNORE_XFAM: u64 = 0x2_0000_0000; - const SERVTD_ATTR_IGNORE_MRTD: u64 = 0x4_0000_0000; - const SERVTD_ATTR_IGNORE_MRCONFIGID: u64 = 0x8_0000_0000; - const SERVTD_ATTR_IGNORE_MROWNER: u64 = 0x10_0000_0000; - const SERVTD_ATTR_IGNORE_MROWNERCONFIG: u64 = 0x20_0000_0000; - const SERVTD_ATTR_IGNORE_RTMR0: u64 = 0x40_0000_0000; - const SERVTD_ATTR_IGNORE_RTMR1: u64 = 0x80_0000_0000; - const SERVTD_ATTR_IGNORE_RTMR2: u64 = 0x100_0000_0000; - const SERVTD_ATTR_IGNORE_RTMR3: u64 = 0x200_0000_0000; + /// Compute the outer `tdinfo_hash` (attr=0) for the TD described by a + /// `TdInfo` returned by `TDG.MR.REPORT`. This is the canonical lookup key + /// for `servtd_tcb_mapping` after the TCB-mapping redesign. + fn tdinfo_hash_from_td_info(td: &TdInfo) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + policy::compute_tdinfo_hash_from_fields( + &td.attributes, + &td.xfam, + &td.mrtd, + &td.mrconfig_id, + &td.mrowner, + &td.mrownerconfig, + &td.rtmr0, + &td.rtmr1, + &td.rtmr2, + &td.rtmr3, + ) + } lazy_static! { pub static ref VERIFIED_POLICY: Once<VerifiedPolicy<'static>> = Once::new(); @@ -99,15 +105,38 @@ mod v2 { let raw = RawPolicyData::deserialize_from_json(policy_json)?; // Get the root CA from collaterals and set it for quote verification - let verified_policy = raw.verify(cert_chain)?; + #[cfg_attr(not(feature = "servtd_corim"), allow(unused_mut))] + let mut verified_policy = raw.verify(cert_chain)?; + + // Attach the optional CoRIM hash endorsement enrolled in the CFV. Its + // COSE signer chain is bound to the SAME RTMR1 signer anchor as the CFV + // policy issuer chain, so a CoRIM signed under a different root cert or + // leaf signer EKU fails closed. The CoRIM is NOT measured + // (`config::get_servtd_corim` is never read by `do_measurements`), so + // enrolling it does not change the ServTD/`tdinfo_hash`. + // MigTD has no trusted wall clock. `decode_signed` rejects CWT + // `nbf`/`exp`; zero is used only for inner CoRIM validity validation. + #[cfg(feature = "servtd_corim")] + if let Some(cose) = crate::config::get_servtd_corim() { + let anchor = resolve_signer_anchor(cert_chain)?; + let corim = ServtdCorim::decode_signed(cose, 0, &anchor)?; + verified_policy.set_servtd_corim(corim); + log::info!("Loaded signed ServTD CoRIM endorsement"); + if let Some(servtd_crl) = verified_policy.servtd_crl.as_deref() { + verified_policy.verify_signer_chains_not_revoked(servtd_crl.as_bytes())?; + } + } + let root_ca_der = pem_cert_to_der(verified_policy.get_collaterals().root_ca.as_bytes()) .map_err(|_| PolicyError::InvalidCollateral)?; attestation::root_ca::set_ca(root_ca_der.as_ref()) .map_err(|_| PolicyError::InvalidCollateral)?; - VERIFIED_POLICY + let version = VERIFIED_POLICY .try_call_once(|| Ok(verified_policy)) - .map(|p| p.get_version().to_string()) + .map(|p| p.get_version().to_string())?; + + Ok(version) } /// Generate a fresh local TCB evaluation info on demand by creating a @@ -120,7 +149,7 @@ mod v2 { _ => PolicyError::QuoteGeneration, })?; let (fmspc, suppl_data) = verify_quote("e, policy.get_collaterals())?; - setup_evaluation_data(fmspc, &suppl_data, policy, policy.get_collaterals()) + setup_evaluation_data(fmspc, &suppl_data, policy, policy, policy.get_collaterals()) } /// Get reference to the global verified policy @@ -135,17 +164,39 @@ mod v2 { policy_peer: &[u8], event_log_peer: &[u8], ) -> Result<Vec<u8>, PolicyError> { - let (policy_peer, peer_issuer_chain) = + log::info!( + "BC> POL-AR-01 authenticate_remote is_src={} quote.len={} policy.len={} event_log.len={}\n", + is_src, + quote_peer.len(), + policy_peer.len(), + event_log_peer.len() + ); + let (policy_peer, peer_issuer_chain, peer_servtd_corim) = crate::migration::pre_session_data::decode_peer_data(policy_peer) .ok_or(PolicyError::InvalidParameter)?; + log::info!( + "BC> POL-AR-02 decode_peer_data ok policy.len={} issuer_chain.len={} servtd_corim.len={}\n", + policy_peer.len(), + peer_issuer_chain.len(), + peer_servtd_corim.map(|c| c.len()).unwrap_or(0) + ); if is_src { - authenticate_migration_dest(quote_peer, event_log_peer, policy_peer, peer_issuer_chain) + log::info!("BC> POL-AR-03 -> authenticate_migration_dest\n"); + authenticate_migration_dest( + quote_peer, + event_log_peer, + policy_peer, + peer_issuer_chain, + peer_servtd_corim, + ) } else { + log::info!("BC> POL-AR-03 -> authenticate_migration_source\n"); authenticate_migration_source( quote_peer, event_log_peer, policy_peer, peer_issuer_chain, + peer_servtd_corim, ) } } @@ -155,14 +206,22 @@ mod v2 { event_log_dst: &[u8], mig_policy_dst: &[u8], policy_issuer_chain: &[u8], + peer_servtd_corim: Option<&[u8]>, ) -> Result<Vec<u8>, PolicyError> { + log::info!("BC> POL-DST-01 authenticate_remote_common BEGIN\n"); let (evaluation_data_dst, verified_policy_dst, suppl_data) = authenticate_remote_common( quote_dst, event_log_dst, mig_policy_dst, policy_issuer_chain, + peer_servtd_corim, )?; + log::info!( + "BC> POL-DST-02 authenticate_remote_common ok suppl_data.len={}\n", + suppl_data.len() + ); let relative_reference = get_local_tcb_evaluation_info()?; + log::info!("BC> POL-DST-03 get_local_tcb_evaluation_info ok\n"); let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; policy.policy_data.evaluate_policy_common( @@ -170,16 +229,19 @@ mod v2 { &relative_reference, false, )?; + log::info!("BC> POL-DST-04 evaluate_policy_common ok\n"); policy.policy_data.evaluate_policy_forward( &evaluation_data_dst, &relative_reference, false, )?; + log::info!("BC> POL-DST-05 evaluate_policy_forward ok\n"); // Verify the destination's policy against local policy verified_policy_dst .policy_data .evaluate_against_policy(&policy.policy_data)?; + log::info!("BC> POL-DST-06 evaluate_against_policy ok\n"); Ok(suppl_data) } @@ -189,14 +251,22 @@ mod v2 { event_log_src: &[u8], mig_policy_src: &[u8], policy_issuer_chain: &[u8], + peer_servtd_corim: Option<&[u8]>, ) -> Result<Vec<u8>, PolicyError> { + log::info!("BC> POL-SRC-01 authenticate_remote_common BEGIN\n"); let (evaluation_data_src, _verified_policy_src, suppl_data) = authenticate_remote_common( quote_src, event_log_src, mig_policy_src, policy_issuer_chain, + peer_servtd_corim, )?; + log::info!( + "BC> POL-SRC-02 authenticate_remote_common ok suppl_data.len={}\n", + suppl_data.len() + ); let relative_reference = get_local_tcb_evaluation_info()?; + log::info!("BC> POL-SRC-03 get_local_tcb_evaluation_info ok\n"); let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; policy.policy_data.evaluate_policy_common( @@ -204,11 +274,13 @@ mod v2 { &relative_reference, false, )?; + log::info!("BC> POL-SRC-04 evaluate_policy_common ok\n"); policy.policy_data.evaluate_policy_backward( &evaluation_data_src, &relative_reference, false, )?; + log::info!("BC> POL-SRC-05 evaluate_policy_backward ok\n"); Ok(suppl_data) } @@ -219,7 +291,7 @@ mod v2 { event_log_dst: &[u8], mig_policy_dst: &[u8], ) -> Result<Vec<u8>, PolicyError> { - let (mig_policy_dst, peer_issuer_chain) = + let (mig_policy_dst, peer_issuer_chain, peer_servtd_corim) = crate::migration::pre_session_data::decode_peer_data(mig_policy_dst) .ok_or(PolicyError::InvalidParameter)?; let (evaluation_data_dst, verified_policy_dst, tdx_report) = authenticate_rebinding_common( @@ -227,6 +299,7 @@ mod v2 { event_log_dst, mig_policy_dst, peer_issuer_chain, + peer_servtd_corim, )?; let relative_reference = get_local_tcb_evaluation_info()?; let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; @@ -251,46 +324,35 @@ mod v2 { } // Authenticate the migtd-old from migtd-new side - // Per GHCI 1.5: init_tdinfo is a TDINFO_STRUCT (not full TDREPORT), - // and there is no separate init_policy JSON blob. + // The legacy init-TDINFO argument remains in the wire/API shape but the + // one-hash flow derives init identity from SERVTD_EXT. pub fn authenticate_rebinding_old( tdreport_src: &[u8], event_log_src: &[u8], mig_policy_src: &[u8], - init_tdinfo: &[u8], + _init_tdinfo: &[u8], servtd_ext_src: &[u8], ) -> Result<Vec<u8>, PolicyError> { - let (mig_policy_src, peer_issuer_chain) = + let (mig_policy_src, peer_issuer_chain, peer_servtd_corim) = crate::migration::pre_session_data::decode_peer_data(mig_policy_src) .ok_or(PolicyError::InvalidParameter)?; // Verify quote src / event log src / policy src - let (evaluation_data_src, _verified_policy_src, tdx_report) = - authenticate_rebinding_common( - tdreport_src, - event_log_src, - mig_policy_src, - peer_issuer_chain, - )?; - let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; - - // Per GHCI 1.5: cross-check the peer's wire-claimed init TDINFO against - // the peer's verified TDREPORT — init policy signer and init SVN must - // be consistent with the peer's current self-report. - verify_peer_init_tdinfo_against_owner( - init_tdinfo, - &tdx_report.td_info.mrowner, - &tdx_report.td_info.mrownerconfig, + let (evaluation_data_src, verified_policy_src, tdx_report) = authenticate_rebinding_common( + tdreport_src, + event_log_src, + mig_policy_src, + peer_issuer_chain, + peer_servtd_corim, )?; + let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; - // Verify the init tdinfo against servtd_ext hash let servtd_ext_src_obj = ServtdExt::read_from_bytes(servtd_ext_src).ok_or(PolicyError::InvalidParameter)?; - let init_td_info = verify_init_tdinfo(init_tdinfo, &servtd_ext_src_obj)?; - - // migtdengine check: enginesvnsrc >= enginesvninit - policy.servtd_tcb_mapping.check_engine_not_older( - &engine_measurements_of(&tdx_report.td_info), - &engine_measurements_of(&init_td_info), + verify_init_servtd_svn_order( + &verified_policy_src, + policy, + &evaluation_data_src, + &servtd_ext_src_obj, )?; // If backward policy exists, evaluate the migration src based on it. @@ -309,28 +371,41 @@ mod v2 { event_log: &[u8], mig_policy: &'p [u8], policy_issuer_chain: &[u8], + peer_servtd_corim: Option<&[u8]>, ) -> Result<(PolicyEvaluationInfo, VerifiedPolicy<'p>, Vec<u8>), PolicyError> { let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; // 1. Verify quote & get supplemental data + log::info!( + "BC> POL-CMN-01 verify_quote begin quote.len={}\n", + quote.len() + ); let (fmspc, suppl_data) = verify_quote(quote, policy.get_collaterals()) .map_err(|_| PolicyError::QuoteVerification)?; + log::info!( + "BC> POL-CMN-02 verify_quote ok suppl_data.len={}\n", + suppl_data.len() + ); // 2. Verify the signature of the provided policy and the integrity of the event log let verified_policy = verify_policy_and_event_log( event_log, mig_policy, policy_issuer_chain, + peer_servtd_corim, &get_rtmrs_from_suppl_data(&suppl_data)?, )?; + log::info!("BC> POL-CMN-03 verify_policy_and_event_log ok\n"); // 3. Get TCB evaluation info from the collaterals let evaluation_data = setup_evaluation_data( fmspc, &suppl_data, &verified_policy, + policy, policy.get_collaterals(), )?; + log::info!("BC> POL-CMN-04 setup_evaluation_data ok\n"); Ok((evaluation_data, verified_policy, suppl_data)) } @@ -340,6 +415,7 @@ mod v2 { event_log: &[u8], mig_policy: &'p [u8], policy_issuer_chain: &[u8], + peer_servtd_corim: Option<&[u8]>, ) -> Result<(PolicyEvaluationInfo, VerifiedPolicy<'p>, TdxReport), PolicyError> { // 1. Verify quote & get supplemental data let tdreport_verified = verify_tdreport(tdreport)?; @@ -349,16 +425,65 @@ mod v2 { event_log, mig_policy, policy_issuer_chain, + peer_servtd_corim, &get_rtmrs_from_tdreport(&tdreport_verified)?, )?; // 3. Get TCB evaluation info from the collaterals - let evaluation_data = - setup_evaluation_data_with_tdreport(&tdreport_verified, &verified_policy)?; + let local_policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; + let evaluation_data = setup_evaluation_data_with_tdreport( + &tdreport_verified, + &verified_policy, + local_policy, + )?; Ok((evaluation_data, verified_policy, tdreport_verified)) } + fn verify_svn_order( + init_svn: Option<u16>, + current_svn: Option<u16>, + ) -> Result<(), PolicyError> { + let init_svn = init_svn.ok_or(PolicyError::UnqualifiedMigTdInfo)?; + let current_svn = current_svn.ok_or(PolicyError::UnqualifiedMigTdInfo)?; + if init_svn > current_svn { + return Err(PolicyError::SvnMismatch); + } + Ok(()) + } + + fn resolve_init_servtd_svn( + source_init_svn: Option<u16>, + local_init_svn: Option<u16>, + ) -> Result<u16, PolicyError> { + match (source_init_svn, local_init_svn) { + (Some(source), Some(local)) if source != local => Err(PolicyError::SvnMismatch), + (Some(source), _) => Ok(source), + (None, Some(local)) => Ok(local), + (None, None) => Err(PolicyError::UnqualifiedMigTdInfo), + } + } + + /// Resolve the initial release through the authenticated source mapping, + /// falling back to the authenticated local mapping when the source + /// predates that release. The current source SVN remains source-derived. + fn verify_init_servtd_svn_order( + source_policy: &VerifiedPolicy, + local_policy: &VerifiedPolicy, + source_evaluation: &PolicyEvaluationInfo, + servtd_ext: &ServtdExt, + ) -> Result<(), PolicyError> { + let source_init_svn = source_policy + .servtd_lookup_by_tdinfo_hash(&servtd_ext.init_servtd_info_hash) + .map(|lookup| lookup.isvsvn); + let local_init_svn = local_policy + .servtd_lookup_by_tdinfo_hash(&servtd_ext.init_servtd_info_hash) + .map(|lookup| lookup.isvsvn); + let init_svn = resolve_init_servtd_svn(source_init_svn, local_init_svn)?; + + verify_svn_order(Some(init_svn), source_evaluation.migtd_isvsvn) + } + fn get_rtmrs_from_tdreport( td_report: &TdxReport, ) -> Result<[[u8; SHA384_DIGEST_SIZE]; 4], PolicyError> { @@ -376,6 +501,8 @@ mod v2 { event_log: &[u8], mig_policy: &'p [u8], policy_issuer_chain: &[u8], + #[cfg_attr(not(feature = "servtd_corim"), allow(unused_variables))] + peer_servtd_corim: Option<&[u8]>, rtmrs: &[[u8; SHA384_DIGEST_SIZE]; 4], ) -> Result<VerifiedPolicy<'p>, PolicyError> { let unverified_policy = RawPolicyData::deserialize_from_json(mig_policy)?; @@ -384,31 +511,68 @@ mod v2 { verify_event_log(event_log, rtmrs).map_err(|_| PolicyError::InvalidEventLog)?; // 2. Verify the peer policy using the peer's issuer chain - let verified_policy = unverified_policy.verify(policy_issuer_chain)?; - - // 3. Validate that peer's chains share the same root CA and leaf - // subject name as our local chains. let local_policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; - let local_chain = get_policy_issuer_chain().ok_or(PolicyError::InvalidParameter)?; - crypto::validate_peer_cert_chain( - local_chain, - verified_policy.policy_issuer_chain.as_bytes(), - ) - .log_err("Peer policy cert chain validation") - .map_err(|_| PolicyError::PeerCertChainValidation)?; + let local_servtd_crl = local_policy.servtd_crl.as_deref().map(str::as_bytes); + #[cfg_attr(not(feature = "servtd_corim"), allow(unused_mut))] + let mut verified_policy = unverified_policy + .verify_with_authoritative_servtd_crl(policy_issuer_chain, local_servtd_crl)?; + + // 3. Validate that the peer's signer matches ours by comparing the + // RTMR1 signer anchor (root CA + leaf signer EKU) instead of the + // full policy issuer chain PEM. This supports the anchor-only (CoRIM) + // enrollment form, which carries no PEM. `verify()` has already + // bound the peer's embedded mapping chain to `signer_anchor`. + if local_policy.signer_anchor != verified_policy.signer_anchor { + return Err(PolicyError::PeerCertChainValidation); + } - crypto::validate_peer_cert_chain( - local_policy.servtd_identity_issuer_chain.as_bytes(), - verified_policy.servtd_identity_issuer_chain.as_bytes(), - ) - .log_err("Peer identity cert chain validation") - .map_err(|_| PolicyError::PeerCertChainValidation)?; - crypto::validate_peer_cert_chain( - local_policy.servtd_tcb_mapping_issuer_chain.as_bytes(), - verified_policy.servtd_tcb_mapping_issuer_chain.as_bytes(), - ) - .log_err("Peer tcb mapping cert chain validation") - .map_err(|_| PolicyError::PeerCertChainValidation)?; + // Cross-check the JSON mapping issuer chains when both sides ship one + // (defense-in-depth; the signer_anchor equality above already binds the + // signer). Absent on both sides (CoRIM-only) is fine; one-sided fails. + match ( + local_policy.servtd_tcb_mapping_issuer_chain.as_deref(), + verified_policy.servtd_tcb_mapping_issuer_chain.as_deref(), + ) { + (Some(local_mc), Some(peer_mc)) => { + crypto::validate_peer_cert_chain(local_mc.as_bytes(), peer_mc.as_bytes()) + .log_err("Peer tcb mapping cert chain validation") + .map_err(|_| PolicyError::PeerCertChainValidation)?; + } + (None, None) => {} + _ => return Err(PolicyError::PeerCertChainValidation), + } + + // Validate the peer's optional TD Identity issuer chain against ours + // when both sides ship one. If exactly one side has it, the chains do + // not match and it fails closed. + match ( + local_policy.servtd_identity_issuer_chain.as_deref(), + verified_policy.servtd_identity_issuer_chain.as_deref(), + ) { + (Some(local_identity_chain), Some(peer_identity_chain)) => { + crypto::validate_peer_cert_chain( + local_identity_chain.as_bytes(), + peer_identity_chain.as_bytes(), + ) + .log_err("Peer td identity cert chain validation") + .map_err(|_| PolicyError::PeerCertChainValidation)?; + } + (None, None) => {} + _ => return Err(PolicyError::PeerCertChainValidation), + } + + // Peer SVN lookups must use the authenticated peer TCB-mapping CoRIM. + #[cfg(feature = "servtd_corim")] + if let Some(peer_corim_cose) = peer_servtd_corim { + verified_policy + .attach_verified_peer_servtd_corim(peer_corim_cose) + .log_err("Peer servtd CoRIM verification")?; + } + if let Some(servtd_crl) = local_servtd_crl { + verified_policy + .verify_signer_chains_not_revoked(servtd_crl) + .log_err("Peer servtd signer revocation check")?; + } // 4. Check the integrity of the policy with its event log let events = parse_events(event_log).ok_or(PolicyError::InvalidEventLog)?; @@ -455,115 +619,26 @@ mod v2 { Ok(tdx_report) } - /// Per GHCI 1.5: verifies TDINFO_STRUCT integrity against ServtdExt info hash. - /// - /// Parses the TDINFO bytes, applies IGNORE masks from `servtd_attr`, computes - /// `SHA384(masked_tdinfo)`, and compares to `init_servtd_info_hash`. - /// Returns the parsed TdInfo on success. - /// - /// This function is only called when SERVTD_EXT is supported (the sender - /// gates on TDCS.ATTRIBUTES bit 17 before sending init_tdinfo). - fn verify_servtd_info_hash( - tdinfo_bytes: &[u8], - servtd_attr: u64, - init_servtd_info_hash: &[u8], - ) -> Result<TdInfo, PolicyError> { - if tdinfo_bytes.len() < size_of::<TdInfo>() { - return Err(PolicyError::InvalidParameter); - } - - // Parse TdInfo directly from bytes - let mut td_info = { - let mut uninit = core::mem::MaybeUninit::<TdInfo>::uninit(); - unsafe { - core::ptr::copy_nonoverlapping( - tdinfo_bytes.as_ptr(), - uninit.as_mut_ptr() as *mut u8, - size_of::<TdInfo>(), - ); - uninit.assume_init() - } - }; - - if (servtd_attr & SERVTD_ATTR_IGNORE_ATTRIBUTES) != 0 { - td_info.attributes.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_XFAM) != 0 { - td_info.xfam.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_MRTD) != 0 { - td_info.mrtd.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_MRCONFIGID) != 0 { - td_info.mrconfig_id.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_MROWNER) != 0 { - td_info.mrowner.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_MROWNERCONFIG) != 0 { - td_info.mrownerconfig.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_RTMR0) != 0 { - td_info.rtmr0.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_RTMR1) != 0 { - td_info.rtmr1.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_RTMR2) != 0 { - td_info.rtmr2.fill(0); - } - if (servtd_attr & SERVTD_ATTR_IGNORE_RTMR3) != 0 { - td_info.rtmr3.fill(0); - } - - let info_hash = - digest_sha384(td_info.as_bytes()).map_err(|_| PolicyError::HashCalculation)?; - - if info_hash.as_slice() != init_servtd_info_hash { - log::error!("verify_servtd_info_hash: HASH MISMATCH\n"); - return Err(PolicyError::InvalidTdReport); - } - - Ok(td_info) - } - - /// Per GHCI 1.5: verifies TDINFO_STRUCT against servtd_ext info hash - fn verify_init_tdinfo( - init_tdinfo: &[u8], - servtd_ext: &ServtdExt, - ) -> Result<TdInfo, PolicyError> { - verify_servtd_info_hash( - init_tdinfo, - u64::from_le_bytes(servtd_ext.init_attr), - &servtd_ext.init_servtd_info_hash, - ) - } - - /// `getengineinfo` measurement scope: the design guide classifies a MigTD - /// engine by `mrtd||rtmr[0-1]` only. - fn engine_measurements(mrtd: &[u8], rtmr0: &[u8], rtmr1: &[u8]) -> Measurements { - Measurements::new_from_bytes(mrtd, rtmr0, rtmr1, None, None) - } - - fn engine_measurements_of(td_info: &TdInfo) -> Measurements { - engine_measurements(&td_info.mrtd, &td_info.rtmr0, &td_info.rtmr1) - } - - fn get_rtmrs_from_tdinfo( - td_info: &TdInfo, - ) -> Result<[[u8; SHA384_DIGEST_SIZE]; 4], PolicyError> { - let mut rtmrs = [[0u8; SHA384_DIGEST_SIZE]; 4]; - rtmrs[0].copy_from_slice(&td_info.rtmr0); - rtmrs[1].copy_from_slice(&td_info.rtmr1); - rtmrs[2].copy_from_slice(&td_info.rtmr2); - rtmrs[3].copy_from_slice(&td_info.rtmr3); - Ok(rtmrs) + /// Compute the servtd signer CRL number from the authoritative local + /// policy, if a signer CRL is present (`servtdCrl`, or its legacy nested + /// location). Peer evaluation uses this local number rather than trusting + /// the peer-delivered CRL. `None` when it is absent (backward + /// compatibility); `Some(n)` feeds the `servtd_crl_num` anti-rollback + /// floor. + fn servtd_crl_num_from_policy(policy: &VerifiedPolicy) -> Result<Option<u32>, PolicyError> { + policy + .servtd_crl + .as_deref() + .map(|crl| get_crl_number(crl.as_bytes())) + .transpose() + .map_err(|_| PolicyError::InvalidCollateral) } fn setup_evaluation_data( fmspc: [u8; 6], suppl_data: &[u8], policy: &VerifiedPolicy, + authoritative_crl_policy: &VerifiedPolicy, collaterals: &Collaterals, ) -> Result<PolicyEvaluationInfo, PolicyError> { let (tcb_date, tcb_status) = get_tcb_date_and_status_from_suppl_data(suppl_data)?; @@ -571,11 +646,15 @@ mod v2 { let tcb_evaluation_number = get_tcb_evaluation_number_from_collateral(&collateral)?; let report_value = Report::new(suppl_data)?; - let migtd_svn = policy - .servtd_tcb_mapping - .get_engine_svn_by_report(&report_value); - - let migtd_tcb = migtd_svn.and_then(|svn| policy.servtd_identity.get_tcb_level_by_svn(svn)); + let migtd = policy.servtd_lookup_by_report(&report_value); + if policy.requires_servtd_tcb_status() + && migtd + .as_ref() + .and_then(|lookup| lookup.tcb_status.as_deref()) + .is_none() + { + return Err(PolicyError::UnqualifiedMigTdInfo); + } let pck_crl_num = get_crl_number(collaterals.pck_crl.as_bytes()) .map_err(|_| PolicyError::InvalidCollateral)?; let root_ca_crl_num = get_crl_number(collaterals.root_ca_crl.as_bytes()) @@ -587,29 +666,45 @@ mod v2 { tcb_status: Some(tcb_status.as_str().to_string()), tcb_evaluation_number: Some(tcb_evaluation_number), fmspc: Some(fmspc), - migtd_isvsvn: migtd_svn, - migtd_tcb_date: migtd_tcb.map(|tcb| tcb.tcb_date.clone()), - migtd_tcb_status: migtd_tcb.map(|tcb| tcb.tcb_status.clone()), + migtd_isvsvn: migtd.as_ref().map(|m| m.isvsvn), + migtd_tcb_status: migtd.as_ref().and_then(|m| m.tcb_status.clone()), + migtd_tcb_date: migtd.as_ref().and_then(|m| m.tcb_date.clone()), pck_crl_num: Some(pck_crl_num), root_ca_crl_num: Some(root_ca_crl_num), + servtd_crl_num: servtd_crl_num_from_policy(authoritative_crl_policy)?, }) } fn setup_evaluation_data_with_tdreport( tdreport: &TdxReport, policy: &VerifiedPolicy, + authoritative_crl_policy: &VerifiedPolicy, ) -> Result<PolicyEvaluationInfo, PolicyError> { - let migtd_svn = policy.servtd_tcb_mapping.get_engine_svn_by_measurements( - &Measurements::new_from_bytes( - &tdreport.td_info.mrtd, - &tdreport.td_info.rtmr0, - &tdreport.td_info.rtmr1, - None, - None, - ), - ); - - let migtd_tcb = migtd_svn.and_then(|svn| policy.servtd_identity.get_tcb_level_by_svn(svn)); + #[cfg(feature = "use-mock-quote")] + let mock_tdreport = attestation::tdreport::tdcall_report( + &[0u8; attestation::tdreport::TD_REPORT_ADDITIONAL_DATA_SIZE], + ) + .map_err(|_| PolicyError::GetTdxReport)?; + #[cfg(feature = "use-mock-quote")] + let mapping_tdreport = { + log::warn!( + "use-mock-quote: deriving rebinding MigTD TCB metadata from the mock quote report\n" + ); + &mock_tdreport + }; + #[cfg(not(feature = "use-mock-quote"))] + let mapping_tdreport = tdreport; + + let tdinfo_hash = tdinfo_hash_from_td_info(&mapping_tdreport.td_info)?; + let migtd = policy.servtd_lookup_by_tdinfo_hash(&tdinfo_hash); + if policy.requires_servtd_tcb_status() + && migtd + .as_ref() + .and_then(|lookup| lookup.tcb_status.as_deref()) + .is_none() + { + return Err(PolicyError::UnqualifiedMigTdInfo); + } Ok(PolicyEvaluationInfo { tee_tcb_svn: Some(tdreport.tee_tcb_info.tee_tcb_svn), @@ -617,11 +712,12 @@ mod v2 { tcb_status: None, tcb_evaluation_number: None, fmspc: None, - migtd_isvsvn: migtd_svn, - migtd_tcb_date: migtd_tcb.map(|tcb| tcb.tcb_date.clone()), - migtd_tcb_status: migtd_tcb.map(|tcb| tcb.tcb_status.clone()), + migtd_isvsvn: migtd.as_ref().map(|m| m.isvsvn), + migtd_tcb_status: migtd.as_ref().and_then(|m| m.tcb_status.clone()), + migtd_tcb_date: migtd.as_ref().and_then(|m| m.tcb_date.clone()), pck_crl_num: None, root_ca_crl_num: None, + servtd_crl_num: servtd_crl_num_from_policy(authoritative_crl_policy)?, }) } @@ -678,169 +774,9 @@ mod v2 { }) } - /// Per GHCI 1.5: Verify that own TDINFO.MROWNER matches policy signing key hash - /// and TDINFO.MROWNERCONFIG matches policy SVN. - /// Must be called at MigTD startup to ensure VMM correctly provisioned the TD. - pub fn verify_own_tdinfo() -> Result<(), PolicyError> { - use crate::config::get_policy_issuer_chain; - - let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; - let policy_svn = policy.policy_data.get_policy_svn(); - - // Get own TDINFO from TDReport - let tdx_report = tdx_tdcall::tdreport::tdcall_report(&[0u8; 64]) - .map_err(|_| PolicyError::GetTdxReport)?; - let td_info = &tdx_report.td_info; - - // Verify MROWNERCONFIG == policy_svn (stored as little-endian u32 in first 4 bytes, - // remaining 44 bytes must be zero) - let mut expected_mrownerconfig = [0u8; SHA384_DIGEST_SIZE]; - expected_mrownerconfig[..4].copy_from_slice(&policy_svn.to_le_bytes()); - if td_info.mrownerconfig != expected_mrownerconfig { - return Err(PolicyError::SvnMismatch); - } - - // Verify MROWNER == SHA384(policy signing public key) - let policy_issuer_chain = get_policy_issuer_chain().ok_or(PolicyError::InvalidParameter)?; - let policy_key_hash = crypto::get_policy_signer_key_hash(policy_issuer_chain) - .map_err(|_| PolicyError::InvalidCollateral)?; - if td_info.mrowner != policy_key_hash { - return Err(PolicyError::PolicyHashMismatch); - } - - Ok(()) - } - - /// Per GHCI 1.5: Verify initMigtdData.MROWNER matches own policy signer key hash - /// and initMigtdData.MROWNERCONFIG <= own policy SVN. - pub fn verify_init_migtd_data_policy_binding( - init_td_info: &[u8; crate::migration::TD_INFO_SIZE], - ) -> Result<(), PolicyError> { - use crate::config::get_policy_issuer_chain; - use crate::migration::{td_info_mrowner, td_info_mrownerconfig}; - - let policy = get_verified_policy().ok_or(PolicyError::InvalidParameter)?; - let my_policy_svn = policy.policy_data.get_policy_svn(); - - // Check MROWNER == own policy signer key hash - let policy_issuer_chain = get_policy_issuer_chain().ok_or(PolicyError::InvalidParameter)?; - let policy_key_hash = crypto::get_policy_signer_key_hash(policy_issuer_chain) - .map_err(|_| PolicyError::InvalidCollateral)?; - if td_info_mrowner(init_td_info) != &policy_key_hash { - return Err(PolicyError::PolicyHashMismatch); - } - - // Check MROWNERCONFIG (init policy_svn) <= my policy_svn - let init_mrownerconfig = td_info_mrownerconfig(init_td_info); - let mut init_svn_bytes = [0u8; 4]; - init_svn_bytes.copy_from_slice(&init_mrownerconfig[..4]); - let init_policy_svn = u32::from_le_bytes(init_svn_bytes); - // Remaining 44 bytes should be zero - if init_mrownerconfig[4..] != [0u8; SHA384_DIGEST_SIZE - 4] { - return Err(PolicyError::InvalidParameter); - } - if init_policy_svn > my_policy_svn { - return Err(PolicyError::SvnMismatch); - } - - Ok(()) - } - - /// Per GHCI 1.5: Cross-check a peer's wire-supplied init TDINFO_STRUCT against - /// the peer's authenticated TDREPORT (or equivalent verified report data). - /// - /// The peer's `init.MROWNER` must equal the peer's report MROWNER (policy - /// signer hash). The peer's `init.MROWNERCONFIG` first 4 bytes encode the - /// init policy SVN as little-endian u32 with the remaining 44 bytes zero; - /// that init SVN must be less than or equal to the SVN encoded the same way - /// in the peer's report MROWNERCONFIG. - /// - /// `peer_mrowner` and `peer_mrownerconfig` are the peer's authentic values, - /// taken from a verified TDREPORT (`TdInfo::mrowner` / `mrownerconfig`) or - /// from quote-verification supplemental data - /// (`Report::R_MIGTD_MROWNER` / `R_MIGTD_MROWNERCONFIG`). - pub fn verify_peer_init_tdinfo_against_owner( - peer_init_td_info: &[u8], - peer_mrowner: &[u8], - peer_mrownerconfig: &[u8], - ) -> Result<(), PolicyError> { - use crate::migration::{td_info_mrowner, td_info_mrownerconfig, TD_INFO_SIZE}; - - if peer_init_td_info.len() != TD_INFO_SIZE - || peer_mrowner.len() != SHA384_DIGEST_SIZE - || peer_mrownerconfig.len() != SHA384_DIGEST_SIZE - { - return Err(PolicyError::InvalidParameter); - } - - let init: &[u8; TD_INFO_SIZE] = peer_init_td_info - .try_into() - .map_err(|_| PolicyError::InvalidParameter)?; - let init_mrowner = td_info_mrowner(init); - let init_mrownerconfig = td_info_mrownerconfig(init); - - // 1. MROWNER (policy signer key hash) must match peer's current report - if init_mrowner.as_slice() != peer_mrowner { - return Err(PolicyError::PolicyHashMismatch); - } - - // 2. init MROWNERCONFIG must be well-formed: first 4 bytes encode SVN, - // remaining 44 bytes must be zero. - if init_mrownerconfig[4..] != [0u8; SHA384_DIGEST_SIZE - 4] { - return Err(PolicyError::InvalidParameter); - } - - // 3. Peer report MROWNERCONFIG must also be well-formed: a genuine - // MigTD enforces this at startup, but we verify it locally instead - // of relying on the peer's self-check. - if peer_mrownerconfig[4..] != [0u8; SHA384_DIGEST_SIZE - 4] { - return Err(PolicyError::InvalidParameter); - } - - // 4. init policy SVN must be ≤ peer report policy SVN. - let mut buf = [0u8; 4]; - buf.copy_from_slice(&init_mrownerconfig[..4]); - let init_svn = u32::from_le_bytes(buf); - buf.copy_from_slice(&peer_mrownerconfig[..4]); - let peer_svn = u32::from_le_bytes(buf); - if init_svn > peer_svn { - return Err(PolicyError::SvnMismatch); - } - - Ok(()) - } - - /// Cross-check a peer's wire-supplied init `TDINFO_STRUCT` against the - /// MROWNER/MROWNERCONFIG bytes carried in the peer's verified quote - /// supplemental data (see `Report::R_MIGTD_MROWNER` / - /// `Report::R_MIGTD_MROWNERCONFIG`). - /// - /// This is a pure function: it length-checks `verified_suppl_data` before - /// slicing so it cannot panic on a too-short buffer, and it does not - /// invoke quote verification. Callers that want the combined attestation - /// + cross-check should use `authenticate_migration_source_with_init_tdinfo`. - pub fn verify_peer_init_tdinfo_against_suppl_data( - peer_init_td_info: &[u8], - verified_suppl_data: &[u8], - ) -> Result<(), PolicyError> { - if verified_suppl_data.len() < REPORT_DATA_SIZE { - return Err(PolicyError::InvalidParameter); - } - verify_peer_init_tdinfo_against_owner( - peer_init_td_info, - &verified_suppl_data[Report::R_MIGTD_MROWNER], - &verified_suppl_data[Report::R_MIGTD_MROWNERCONFIG], - ) - } - - /// Destination-side migration helper: verify the source MigTD's - /// quote/event log, cross-check init TDINFO against the quote's - /// supplemental data, verify init TDINFO integrity against ServtdExt, - /// and allowlist-gate init measurements against servtd_tcb_mapping. - /// - /// This mirrors the checks that `authenticate_rebinding_old` performs - /// for the rebinding path, ensuring parity between migration and - /// rebinding attestation. + /// Destination-side migration helper: authenticate the source MigTD and + /// require its initial mapped SVN to be no newer than its current mapped + /// SVN. The legacy init-TDINFO argument is ignored for wire compatibility. /// /// Returns the verified supplemental data on success so the caller can /// reuse it for SPDM-level bindings (e.g., REPORTDATA / TH1). @@ -848,18 +784,19 @@ mod v2 { quote_src: &[u8], peer_data: &[u8], event_log_src: &[u8], - init_tdinfo: &[u8], + _init_tdinfo: &[u8], servtd_ext_src: &[u8], ) -> Result<Vec<u8>, PolicyError> { - let (mig_policy_src, peer_issuer_chain) = + let (mig_policy_src, peer_issuer_chain, peer_servtd_corim) = crate::migration::pre_session_data::decode_peer_data(peer_data) .ok_or(PolicyError::InvalidParameter)?; - let (evaluation_data_src, _verified_policy_src, suppl_data) = authenticate_remote_common( + let (evaluation_data_src, verified_policy_src, suppl_data) = authenticate_remote_common( quote_src, event_log_src, mig_policy_src, peer_issuer_chain, + peer_servtd_corim, )?; let relative_reference = get_local_tcb_evaluation_info()?; @@ -877,330 +814,90 @@ mod v2 { false, )?; - // Cross-check init TDINFO against MROWNER/MROWNERCONFIG from - // verified quote supplemental data, verify init TDINFO integrity - // against ServtdExt hash, and allowlist-gate init measurements. - // - // Skipped when running with mock quotes/reports that carry static - // test data — the mock init TDINFO does not have measurements - // that match the policy servtd_tcb_mapping. - #[cfg(not(any( - feature = "AzCVMEmu", - feature = "test_mock_report", - feature = "use-mock-quote" - )))] - { - verify_peer_init_tdinfo_against_suppl_data(init_tdinfo, &suppl_data)?; - - // Verify init TDINFO integrity against ServtdExt hash - let servtd_ext_obj = - ServtdExt::read_from_bytes(servtd_ext_src).ok_or(PolicyError::InvalidParameter)?; - let init_td_info = verify_init_tdinfo(init_tdinfo, &servtd_ext_obj)?; - - let slice = |range: core::ops::Range<usize>| { - suppl_data.get(range).ok_or(PolicyError::InvalidParameter) - }; - let peer = engine_measurements( - slice(Report::R_MIGTD_MRTD)?, - slice(Report::R_MIGTD_RTMR0)?, - slice(Report::R_MIGTD_RTMR1)?, - ); - // migtdengine check: enginesvnsrc >= enginesvninit - policy - .servtd_tcb_mapping - .check_engine_not_older(&peer, &engine_measurements_of(&init_td_info))?; - } + let servtd_ext = + ServtdExt::read_from_bytes(servtd_ext_src).ok_or(PolicyError::InvalidParameter)?; + verify_init_servtd_svn_order( + &verified_policy_src, + policy, + &evaluation_data_src, + &servtd_ext, + )?; Ok(suppl_data) } #[test] - fn test_unix_to_iso8601() { - let timestamp = 1704067200; // Corresponds to 2024-01-01T00:00:00Z - let iso_date = unix_to_iso8601(timestamp).unwrap(); - assert_eq!(iso_date, "2024-01-01T00:00:00Z"); - } - - #[test] - fn test_verify_servtd_info_hash_valid() { - // Build a 512-byte TDINFO_STRUCT with known content - let mut tdinfo_bytes = [0u8; 512]; - tdinfo_bytes[0..8].copy_from_slice(&[0x01; 8]); // attributes - tdinfo_bytes[8..16].copy_from_slice(&[0x02; 8]); // xfam - - // Compute expected hash: SHA384(tdinfo) - let servtd_attr: u64 = 0; - let expected_hash = digest_sha384(&tdinfo_bytes).unwrap(); - - let result = verify_servtd_info_hash(&tdinfo_bytes, servtd_attr, &expected_hash); - assert!(result.is_ok()); - let td_info = result.unwrap(); - assert_eq!(td_info.attributes, [0x01; 8]); - assert_eq!(td_info.xfam, [0x02; 8]); + fn test_resolve_init_servtd_svn_prefers_source() { + assert_eq!(resolve_init_servtd_svn(Some(5), None).unwrap(), 5); } #[test] - fn test_verify_servtd_info_hash_wrong_hash() { - let tdinfo_bytes = [0u8; 512]; - let wrong_hash = [0xFFu8; 48]; - let result = verify_servtd_info_hash(&tdinfo_bytes, 0, &wrong_hash); - assert!(result.is_err()); + fn test_resolve_init_servtd_svn_returns_to_cumulative_destination() { + // V1's source mapping misses the V3 initial hash, while V3 knows it. + assert_eq!(resolve_init_servtd_svn(None, Some(5)).unwrap(), 5); } #[test] - fn test_verify_servtd_info_hash_short_input() { - let short = [0u8; 256]; // too small for TdInfo (512 bytes) - let result = verify_servtd_info_hash(&short, 0, &[0u8; 48]); - assert!(matches!(result, Err(PolicyError::InvalidParameter))); + fn test_resolve_init_servtd_svn_accepts_matching_mappings() { + assert_eq!(resolve_init_servtd_svn(Some(5), Some(5)).unwrap(), 5); } #[test] - fn test_verify_servtd_info_hash_with_ignore_attributes() { - // Build TdInfo with non-zero attributes - let mut tdinfo_bytes = [0u8; 512]; - tdinfo_bytes[0..8].copy_from_slice(&[0xFF; 8]); // attributes - - // Compute hash with attributes zeroed (IGNORE_ATTRIBUTES flag) - let servtd_attr = SERVTD_ATTR_IGNORE_ATTRIBUTES; - let mut zeroed = tdinfo_bytes; - zeroed[0..8].fill(0); // zero attributes for hash computation - let expected_hash = digest_sha384(&zeroed).unwrap(); - - let result = verify_servtd_info_hash(&tdinfo_bytes, servtd_attr, &expected_hash); - assert!(result.is_ok()); - } - - #[test] - fn test_verify_servtd_info_hash_with_ignore_mrowner() { - // Build TdInfo with non-zero mrowner at offset 112..160 - let mut tdinfo_bytes = [0u8; 512]; - tdinfo_bytes[112..160].copy_from_slice(&[0xAA; 48]); // mrowner - - // Compute hash with mrowner zeroed (IGNORE_MROWNER flag) - let servtd_attr = SERVTD_ATTR_IGNORE_MROWNER; - let mut zeroed = tdinfo_bytes; - zeroed[112..160].fill(0); - let expected_hash = digest_sha384(&zeroed).unwrap(); - - let result = verify_servtd_info_hash(&tdinfo_bytes, servtd_attr, &expected_hash); - assert!(result.is_ok()); - // mrowner should be zeroed in the returned TdInfo - assert_eq!(result.unwrap().mrowner, [0u8; 48]); - } - - #[test] - fn test_verify_servtd_info_hash_with_combined_ignore_flags() { - // Build TdInfo with non-zero content in multiple fields - let mut tdinfo_bytes = [0u8; 512]; - tdinfo_bytes[0..8].copy_from_slice(&[0xFF; 8]); // attributes (masked) - tdinfo_bytes[8..16].copy_from_slice(&[0xEE; 8]); // xfam (masked) - tdinfo_bytes[16..64].copy_from_slice(&[0xBB; 48]); // mrtd (not masked) - tdinfo_bytes[112..160].copy_from_slice(&[0xCC; 48]); // mrowner (not masked) - - // Compute hash with attributes and xfam zeroed, mrtd and mrowner intact - let servtd_attr = SERVTD_ATTR_IGNORE_ATTRIBUTES | SERVTD_ATTR_IGNORE_XFAM; - let mut zeroed = tdinfo_bytes; - zeroed[0..8].fill(0); - zeroed[8..16].fill(0); - let expected_hash = digest_sha384(&zeroed).unwrap(); - - let result = verify_servtd_info_hash(&tdinfo_bytes, servtd_attr, &expected_hash); - assert!(result.is_ok()); - let td_info = result.unwrap(); - assert_eq!(td_info.attributes, [0u8; 8]); - assert_eq!(td_info.xfam, [0u8; 8]); - assert_eq!(td_info.mrtd, [0xBB; 48]); - assert_eq!(td_info.mrowner, [0xCC; 48]); - } - - #[test] - fn test_get_rtmrs_from_tdinfo() { - use tdx_tdcall::tdreport::TdInfo; - let mut tdinfo_bytes = [0u8; 512]; - // RTMR offsets in TdInfo: rtmr0 at 208, rtmr1 at 256, rtmr2 at 304, rtmr3 at 352 - tdinfo_bytes[208..256].copy_from_slice(&[0x01; 48]); // rtmr0 - tdinfo_bytes[256..304].copy_from_slice(&[0x02; 48]); // rtmr1 - tdinfo_bytes[304..352].copy_from_slice(&[0x03; 48]); // rtmr2 - tdinfo_bytes[352..400].copy_from_slice(&[0x04; 48]); // rtmr3 - - let td_info = unsafe { - let mut uninit = core::mem::MaybeUninit::<TdInfo>::uninit(); - core::ptr::copy_nonoverlapping( - tdinfo_bytes.as_ptr(), - uninit.as_mut_ptr() as *mut u8, - size_of::<TdInfo>(), - ); - uninit.assume_init() - }; - - let rtmrs = get_rtmrs_from_tdinfo(&td_info).unwrap(); - assert_eq!(rtmrs[0], [0x01; 48]); - assert_eq!(rtmrs[1], [0x02; 48]); - assert_eq!(rtmrs[2], [0x03; 48]); - assert_eq!(rtmrs[3], [0x04; 48]); - } - - // Build a 512-byte TDINFO_STRUCT with the supplied MROWNER bytes and an - // MROWNERCONFIG whose first 4 LE bytes encode `svn` and trailing 44 are - // zero (the well-formed shape defined by GHCI 1.5). - fn make_init_tdinfo(mrowner: &[u8; 48], svn: u32) -> [u8; 512] { - let mut bytes = [0u8; 512]; - bytes[112..160].copy_from_slice(mrowner); // mrowner - let svn_le = svn.to_le_bytes(); - bytes[160..164].copy_from_slice(&svn_le); - // bytes[164..208] already zero (trailing of mrownerconfig) - bytes - } - - fn make_peer_mrownerconfig(svn: u32) -> [u8; 48] { - let mut buf = [0u8; 48]; - buf[..4].copy_from_slice(&svn.to_le_bytes()); - buf - } - - #[test] - fn test_verify_peer_init_tdinfo_match_equal_svn() { - let mrowner = [0xAAu8; 48]; - let init = make_init_tdinfo(&mrowner, 5); - let peer_mrownerconfig = make_peer_mrownerconfig(5); - - let result = verify_peer_init_tdinfo_against_owner(&init, &mrowner, &peer_mrownerconfig); - assert!(result.is_ok()); - } - - #[test] - fn test_verify_peer_init_tdinfo_init_svn_less_than_peer() { - let mrowner = [0xAAu8; 48]; - let init = make_init_tdinfo(&mrowner, 3); - let peer_mrownerconfig = make_peer_mrownerconfig(7); - - let result = verify_peer_init_tdinfo_against_owner(&init, &mrowner, &peer_mrownerconfig); - assert!(result.is_ok()); - } - - #[test] - fn test_verify_peer_init_tdinfo_init_svn_greater_rejected() { - let mrowner = [0xAAu8; 48]; - let init = make_init_tdinfo(&mrowner, 10); - let peer_mrownerconfig = make_peer_mrownerconfig(5); - - let result = verify_peer_init_tdinfo_against_owner(&init, &mrowner, &peer_mrownerconfig); - assert!(matches!(result, Err(PolicyError::SvnMismatch))); + fn test_resolve_init_servtd_svn_rejects_conflict() { + assert!(matches!( + resolve_init_servtd_svn(Some(5), Some(6)), + Err(PolicyError::SvnMismatch) + )); } #[test] - fn test_verify_peer_init_tdinfo_mrowner_mismatch_rejected() { - let init_mrowner = [0xAAu8; 48]; - let peer_mrowner = [0xBBu8; 48]; - let init = make_init_tdinfo(&init_mrowner, 5); - let peer_mrownerconfig = make_peer_mrownerconfig(5); - - let result = - verify_peer_init_tdinfo_against_owner(&init, &peer_mrowner, &peer_mrownerconfig); - assert!(matches!(result, Err(PolicyError::PolicyHashMismatch))); + fn test_resolve_init_servtd_svn_rejects_historical_multi_hop_miss() { + // V3 -> V1 -> V2 fails when neither V1 nor V2 knows the V3 hash. + assert!(matches!( + resolve_init_servtd_svn(None, None), + Err(PolicyError::UnqualifiedMigTdInfo) + )); } #[test] - fn test_verify_peer_init_tdinfo_malformed_mrownerconfig_rejected() { - let mrowner = [0xAAu8; 48]; - let mut init = make_init_tdinfo(&mrowner, 5); - // Corrupt the trailing-zero portion of MROWNERCONFIG (bytes 164..208). - init[200] = 0x01; - let peer_mrownerconfig = make_peer_mrownerconfig(5); - - let result = verify_peer_init_tdinfo_against_owner(&init, &mrowner, &peer_mrownerconfig); - assert!(matches!(result, Err(PolicyError::InvalidParameter))); + fn test_verify_svn_order_init_lower() { + assert!(verify_svn_order(Some(3), Some(5)).is_ok()); } #[test] - fn test_verify_peer_init_tdinfo_malformed_peer_mrownerconfig_rejected() { - let mrowner = [0xAAu8; 48]; - let init = make_init_tdinfo(&mrowner, 5); - let mut peer_mrownerconfig = make_peer_mrownerconfig(5); - // Corrupt the trailing-zero portion of the peer's MROWNERCONFIG. - peer_mrownerconfig[20] = 0x01; - - let result = verify_peer_init_tdinfo_against_owner(&init, &mrowner, &peer_mrownerconfig); - assert!(matches!(result, Err(PolicyError::InvalidParameter))); + fn test_verify_svn_order_equal() { + assert!(verify_svn_order(Some(5), Some(5)).is_ok()); } #[test] - fn test_verify_peer_init_tdinfo_wrong_lengths_rejected() { - let mrowner = [0xAAu8; 48]; - let init = make_init_tdinfo(&mrowner, 5); - let peer_mrownerconfig = make_peer_mrownerconfig(5); - - // Short init buffer - let short_init = &init[..256]; - assert!(matches!( - verify_peer_init_tdinfo_against_owner(short_init, &mrowner, &peer_mrownerconfig), - Err(PolicyError::InvalidParameter) - )); - - // Wrong mrowner length - let short_mrowner = &mrowner[..32]; - assert!(matches!( - verify_peer_init_tdinfo_against_owner(&init, short_mrowner, &peer_mrownerconfig), - Err(PolicyError::InvalidParameter) - )); - - // Wrong mrownerconfig length - let short_mrownerconfig = &peer_mrownerconfig[..32]; + fn test_verify_svn_order_init_higher() { assert!(matches!( - verify_peer_init_tdinfo_against_owner(&init, &mrowner, short_mrownerconfig), - Err(PolicyError::InvalidParameter) + verify_svn_order(Some(6), Some(5)), + Err(PolicyError::SvnMismatch) )); } - fn make_suppl_data(mrowner: &[u8; 48], svn: u32) -> Vec<u8> { - let mut suppl = alloc::vec![0u8; REPORT_DATA_SIZE]; - suppl[Report::R_MIGTD_MROWNER].copy_from_slice(mrowner); - suppl[Report::R_MIGTD_MROWNERCONFIG][..4].copy_from_slice(&svn.to_le_bytes()); - suppl - } - - #[test] - fn test_verify_peer_init_tdinfo_against_suppl_data_ok() { - let mrowner = [0xCDu8; 48]; - let init = make_init_tdinfo(&mrowner, 3); - let suppl = make_suppl_data(&mrowner, 5); - assert!(verify_peer_init_tdinfo_against_suppl_data(&init, &suppl).is_ok()); - } - #[test] - fn test_verify_peer_init_tdinfo_against_suppl_data_short_buffer() { - let mrowner = [0xCDu8; 48]; - let init = make_init_tdinfo(&mrowner, 3); - let short = alloc::vec![0u8; REPORT_DATA_SIZE - 1]; - // Must return InvalidParameter, not panic, even though - // R_MIGTD_MROWNERCONFIG = 280..328 would otherwise slice OOB. + fn test_verify_svn_order_missing_init_mapping() { assert!(matches!( - verify_peer_init_tdinfo_against_suppl_data(&init, &short), - Err(PolicyError::InvalidParameter) + verify_svn_order(None, Some(5)), + Err(PolicyError::UnqualifiedMigTdInfo) )); } #[test] - fn test_verify_peer_init_tdinfo_against_suppl_data_mrowner_mismatch() { - let init_mrowner = [0xCDu8; 48]; - let peer_mrowner = [0xEEu8; 48]; - let init = make_init_tdinfo(&init_mrowner, 3); - let suppl = make_suppl_data(&peer_mrowner, 5); + fn test_verify_svn_order_missing_current_source_mapping() { assert!(matches!( - verify_peer_init_tdinfo_against_suppl_data(&init, &suppl), - Err(PolicyError::PolicyHashMismatch) + verify_svn_order(Some(5), None), + Err(PolicyError::UnqualifiedMigTdInfo) )); } #[test] - fn test_verify_peer_init_tdinfo_against_suppl_data_svn_greater_rejected() { - let mrowner = [0xCDu8; 48]; - let init = make_init_tdinfo(&mrowner, 7); - let suppl = make_suppl_data(&mrowner, 5); - assert!(matches!( - verify_peer_init_tdinfo_against_suppl_data(&init, &suppl), - Err(PolicyError::SvnMismatch) - )); + fn test_unix_to_iso8601() { + let timestamp = 1704067200; // Corresponds to 2024-01-01T00:00:00Z + let iso_date = unix_to_iso8601(timestamp).unwrap(); + assert_eq!(iso_date, "2024-01-01T00:00:00Z"); } } diff --git a/src/migtd/src/migration/logging.rs b/src/migtd/src/migration/logging.rs index 941206d30..f79f7ecb3 100644 --- a/src/migtd/src/migration/logging.rs +++ b/src/migtd/src/migration/logging.rs @@ -626,6 +626,64 @@ impl VisitSource<'_> for RequestIdVisitor { /// Custom logger that routes log messages to structured logging pub struct VmmLoggerBackend; +/// Maximum log message size in bytes before truncation is applied. +/// Messages longer than this are replaced with a summary showing the first +/// `LOG_TRUNCATE_HEAD` bytes, the last `LOG_TRUNCATE_TAIL` bytes, and the +/// number of bytes that were dropped. +/// +/// REVERT_ME (debug): doubled from 128/64/16 to 256/128/32 so temporary +/// migration diagnostics retain complete 48-byte hashes on one line. +const LOG_TRUNCATE_THRESHOLD: usize = 256; +const LOG_TRUNCATE_HEAD: usize = 128; +const LOG_TRUNCATE_TAIL: usize = 32; + +/// Truncate `msg` if it exceeds `LOG_TRUNCATE_THRESHOLD`. +/// Returns the original message unchanged when it fits, or a replacement of +/// the form: `[first ~128 bytes]... [last ~32 bytes], log truncated number of bytes: N` +/// +/// Head and tail boundaries are adjusted to the nearest UTF-8 character +/// boundary so that multi-byte characters are never split. +fn maybe_truncate(msg: Vec<u8>) -> Vec<u8> { + if msg.len() <= LOG_TRUNCATE_THRESHOLD { + return msg; + } + // Strip all trailing newlines so they don't appear between tail and the notice. + let mut data_end = msg.len(); + while data_end > 0 && msg[data_end - 1] == b'\n' { + data_end -= 1; + } + let data = &msg[..data_end]; + let total = data.len(); + + // Find UTF-8-safe cut points. Input originates from format!() so it is + // valid UTF-8, but fall back to raw byte offsets if it somehow isn't. + let (head_end, tail_start) = if let Ok(s) = core::str::from_utf8(data) { + // floor_char_boundary: largest boundary <= LOG_TRUNCATE_HEAD + let mut h = LOG_TRUNCATE_HEAD.min(s.len()); + while h > 0 && !s.is_char_boundary(h) { + h -= 1; + } + // ceil_char_boundary: smallest boundary >= total - LOG_TRUNCATE_TAIL + let mut t = total.saturating_sub(LOG_TRUNCATE_TAIL); + while t < s.len() && !s.is_char_boundary(t) { + t += 1; + } + (h, t) + } else { + (LOG_TRUNCATE_HEAD, total.saturating_sub(LOG_TRUNCATE_TAIL)) + }; + + let head = &data[..head_end]; + let tail = &data[tail_start..]; + let truncated = tail_start - head_end; + let mut out = Vec::with_capacity(head.len() + tail.len() + 64); + out.extend_from_slice(head); + out.extend_from_slice(b"... "); + out.extend_from_slice(tail); + out.extend_from_slice(format!(", log truncated number of bytes: {}\n", truncated).as_bytes()); + out +} + impl log::Log for VmmLoggerBackend { fn enabled(&self, metadata: &Metadata) -> bool { let log_max_level: LevelFilter; @@ -665,6 +723,7 @@ impl log::Log for VmmLoggerBackend { fn log(&self, record: &Record) { if self.enabled(record.metadata()) { let msg = format!("{}\n", record.args()); + let msg = maybe_truncate(msg.into_bytes()); let mut visitor = RequestIdVisitor { mig_request_id: None, @@ -675,24 +734,21 @@ impl log::Log for VmmLoggerBackend { .mig_request_id .unwrap_or(MIGRATION_REQUEST_ID_SENTINEL); - entrylog(&msg.into_bytes(), record.level(), mig_request_id); + entrylog(&msg, record.level(), mig_request_id); // Also output to debug console for development (skip in test mode to avoid issues) #[cfg(all(not(test), debug_assertions))] { + let msg_str = alloc::string::String::from_utf8_lossy(&msg); if mig_request_id != MIGRATION_REQUEST_ID_SENTINEL { td_logger::dbg_write_string(&format!( - "{} - [req_id: {}] {}\n", + "{} - [req_id: {}] {}", record.level(), mig_request_id, - record.args() + msg_str )); } else { - td_logger::dbg_write_string(&format!( - "{} - {}\n", - record.level(), - record.args() - )); + td_logger::dbg_write_string(&format!("{} - {}", record.level(), msg_str)); } } } @@ -1640,4 +1696,82 @@ mod test { let _ = Box::from_raw(data_buffer_ptr as *mut [u8; PAGE_SIZE]); } } + + #[test] + fn test_maybe_truncate_short_message() { + let msg = b"short message\n".to_vec(); + let result = maybe_truncate(msg.clone()); + assert_eq!(result, msg); + } + + #[test] + fn test_maybe_truncate_at_threshold() { + let msg = vec![b'A'; LOG_TRUNCATE_THRESHOLD]; + let result = maybe_truncate(msg.clone()); + assert_eq!( + result, msg, + "message exactly at threshold should not be truncated" + ); + } + + #[test] + fn test_maybe_truncate_over_threshold() { + // Simulate a real log message: content + trailing newline + let content_len = LOG_TRUNCATE_THRESHOLD + 100; + let mut msg: Vec<u8> = (0..content_len).map(|i| b'A' + (i % 26) as u8).collect(); + msg.push(b'\n'); + let result = maybe_truncate(msg.clone()); + + assert_ne!(result, msg); + // Starts with first LOG_TRUNCATE_HEAD bytes of content + assert_eq!(&result[..LOG_TRUNCATE_HEAD], &msg[..LOG_TRUNCATE_HEAD]); + // Contains "... " separator + assert_eq!(&result[LOG_TRUNCATE_HEAD..LOG_TRUNCATE_HEAD + 4], b"... "); + // Contains last LOG_TRUNCATE_TAIL bytes of content (newline stripped) + assert_eq!( + &result[LOG_TRUNCATE_HEAD + 4..LOG_TRUNCATE_HEAD + 4 + LOG_TRUNCATE_TAIL], + &msg[content_len - LOG_TRUNCATE_TAIL..content_len] + ); + // Ends with the truncation notice (single newline, no double) + let truncated = content_len - LOG_TRUNCATE_HEAD - LOG_TRUNCATE_TAIL; + let trailer = format!(", log truncated number of bytes: {}\n", truncated); + assert!( + result.ends_with(trailer.as_bytes()), + "expected trailer: {trailer}, got: {}", + String::from_utf8_lossy(&result) + ); + // No double newline anywhere + assert!( + !result.windows(2).any(|w| w == b"\n\n"), + "should not contain double newline: {}", + String::from_utf8_lossy(&result) + ); + } + + #[test] + fn test_maybe_truncate_multibyte_utf8() { + // Build a string where the LOG_TRUNCATE_HEAD and LOG_TRUNCATE_TAIL + // byte offsets fall in the middle of multi-byte characters. + // 'é' is 2 bytes (0xC3 0xA9); fill with 'é' so every odd offset + // is mid-character. + let c = 'é'; // 2 bytes each + let char_count = (LOG_TRUNCATE_THRESHOLD / 2) + 60; // well over threshold in bytes + let mut s: String = core::iter::repeat(c).take(char_count).collect(); + s.push('\n'); + let msg = s.into_bytes(); + assert!(msg.len() > LOG_TRUNCATE_THRESHOLD); + + let result = maybe_truncate(msg); + // The result must be valid UTF-8 (no split characters) + let result_str = + core::str::from_utf8(&result).expect("truncated output must be valid UTF-8"); + assert!( + result_str.contains("... "), + "should contain separator: {result_str}" + ); + assert!( + result_str.contains("log truncated number of bytes:"), + "should contain truncation notice: {result_str}" + ); + } } diff --git a/src/migtd/src/migration/mod.rs b/src/migtd/src/migration/mod.rs index fe65f0310..2dba8e618 100644 --- a/src/migtd/src/migration/mod.rs +++ b/src/migtd/src/migration/mod.rs @@ -12,6 +12,8 @@ pub mod rebinding; pub mod servtd_ext; #[cfg(feature = "main")] pub mod session; +#[cfg(feature = "spdm_attestation")] +pub mod spdm_session; #[cfg(feature = "main")] pub mod transport; @@ -35,7 +37,7 @@ use scroll::{Pread, Pwrite}; /// Usage: `impl_read_from_bytes_with_optional!(Type, field_name, default_value)` /// /// Example: -/// `impl_read_from_bytes_with_optional!(ReportInfo, reportdata, [0u8; 64])` +/// `impl_read_from_bytes_with_optional!(MigtdDataInfo, reportdata, [0u8; 64])` #[cfg(feature = "vmcall-raw")] macro_rules! impl_read_from_bytes_with_optional { ($t:ty, $field:ident, $default:expr) => { @@ -184,7 +186,8 @@ pub struct MigtdMigrationInformation { // If set, current MigTD is MigTD-s else current MigTD is MigTD-d pub migration_source: u8, - // Per GHCI 1.5: hasInitMigtdData — true if initMigtdData follows at offset 56 + // Per GHCI 1.5: hasInitMigtdData. Retained for wire compatibility; policy + // v2 accepts either form but ignores host-supplied initMigtdData. pub has_init_data: u8, _reserved: [u8; 6], @@ -205,8 +208,9 @@ pub struct MigtdMigrationInformation { pub communication_id: u64, // Per GHCI 1.5: optional 512-byte TDINFO_STRUCT of the initial MigTD. - // Present when `has_init_data == 1`. Use `init_td_info_if_present()` for - // safe access. Sent by the VMM as the raw `TdInfo` bytes (no envelope). + // Retained only to accept older hosts that still append it. The parser + // clears this untrusted field so policy v2 behaves exactly like the + // header-only form and uses the authenticated SERVTD_EXT hash instead. // // NOTE: literal `512` (== TD_INFO_SIZE) is required here because // scroll-derive 0.10.5 only accepts integer literals as array length. @@ -250,8 +254,12 @@ impl MigtdMigrationInformation { #[cfg(feature = "policy_v2")] impl MigtdMigrationInformation { /// Parse a policy_v2 wire payload of either: - /// - header-only (short form, `has_init_data == 0`), or - /// - header + 512-byte TDINFO_STRUCT (full form, `has_init_data == 1`). + /// - header-only (short form), or + /// - header + legacy 512-byte TDINFO_STRUCT (full form). + /// + /// A correctly framed legacy flag and tail are accepted and then normalized + /// away. The host-supplied TDINFO is no longer needed by the one-hash TCB + /// mapping and must not influence policy decisions. /// Header size is transport-dependent (56 for vmcall-raw, 72 otherwise). pub fn read_from_bytes( data_length: u32, @@ -265,7 +273,7 @@ impl MigtdMigrationInformation { if (payload.len() as u32) < data_length { return Err(MigrationResult::InvalidParameter); } - let parsed: Self = if data_length == full_size { + let mut parsed: Self = if data_length == full_size { payload .pread(0) .map_err(|_| MigrationResult::InvalidParameter)? @@ -286,11 +294,15 @@ impl MigtdMigrationInformation { if parsed.has_init_data > 1 { return Err(MigrationResult::InvalidParameter); } - // has_init_data and data_length must be consistent: the full-size - // payload is required iff has_init_data == 1. + // Preserve wire framing validation even though the legacy contents are + // ignored: the full payload is required iff has_init_data == 1. if (parsed.has_init_data == 1) != (data_length == full_size) { return Err(MigrationResult::InvalidParameter); } + + // Backward compatibility: accept but ignore legacy initMigtdData. + parsed.has_init_data = 0; + parsed.init_td_info = [0u8; TD_INFO_SIZE]; Ok(parsed) } } @@ -325,11 +337,28 @@ pub struct ReportInfo { // ID for the migration request, which can be used in TDG.VP.VMCALL // <Service.MigTD.ReportStatus> pub mig_request_id: u64, - pub reportdata: [u8; 64], } #[cfg(feature = "vmcall-raw")] -impl_read_from_bytes_with_optional!(ReportInfo, reportdata, [0u8; 64]); +impl ReportInfo { + pub fn read_from_bytes( + data_length: u32, + payload: &[u8], + ) -> core::result::Result<Self, MigrationResult> { + let request_id_size = core::mem::size_of::<Self>() as u32; + let legacy_size = + request_id_size + tdx_tdcall::tdreport::TD_REPORT_ADDITIONAL_DATA_SIZE as u32; + // REVERT_ME: tolerate the retired REPORT_DATA tail during OS-transition testing. + if data_length != request_id_size && data_length != legacy_size { + return Err(MigrationResult::InvalidParameter); + } + payload + .get(..data_length as usize) + .ok_or(MigrationResult::InvalidParameter)? + .pread(0) + .map_err(|_| MigrationResult::InvalidParameter) + } +} #[repr(C)] #[derive(Debug, Pread, Pwrite)] @@ -608,17 +637,15 @@ mod test { } #[test] - fn test_mig_info_with_init_data() { + fn test_mig_info_accepts_and_ignores_init_data() { let tdinfo = make_tdinfo(&[0xCAu8; 48], &[0xFEu8; 48]); let buf = build_mig_info(7, 0, 1, [10, 20, 30, 40], 55, Some(&tdinfo)); let info = MigtdMigrationInformation::read_from_bytes(buf.len() as u32, &buf) .expect("should parse with init data"); assert_eq!(info.mig_request_id, 7); - assert_eq!(info.has_init_data, 1); - let init = info.init_td_info_if_present().expect("should be present"); - assert_eq!(init, &tdinfo); - assert_eq!(td_info_mrowner(init), &[0xCAu8; 48]); - assert_eq!(td_info_mrownerconfig(init), &[0xFEu8; 48]); + assert_eq!(info.has_init_data, 0); + assert!(info.init_td_info_if_present().is_none()); + assert_eq!(info.init_td_info, [0u8; TD_INFO_SIZE]); } #[test] @@ -642,14 +669,14 @@ mod test { #[test] fn test_mig_info_rejects_has_init_data_without_tail() { - // has_init_data=1 but no tail bytes following → flag/length mismatch + // Framing remains strict even though correctly supplied data is ignored. let buf = build_mig_info(1, 0, 1, [0; 4], 0, None); assert!(MigtdMigrationInformation::read_from_bytes(buf.len() as u32, &buf).is_err()); } #[test] fn test_mig_info_rejects_full_form_without_flag() { - // has_init_data=0 but full-size buffer (with init_td_info tail) → flag/length mismatch + // The full legacy form must set has_init_data. let tdinfo = [0u8; TD_INFO_SIZE]; let buf = build_mig_info(1, 0, 0, [0; 4], 0, Some(&tdinfo)); assert!(MigtdMigrationInformation::read_from_bytes(buf.len() as u32, &buf).is_err()); diff --git a/src/migtd/src/migration/pre_session_data.rs b/src/migtd/src/migration/pre_session_data.rs index 8a1e5d53c..229df4f42 100644 --- a/src/migtd/src/migration/pre_session_data.rs +++ b/src/migtd/src/migration/pre_session_data.rs @@ -203,6 +203,25 @@ pub(super) async fn receive_pre_session_data_packet<T: AsyncRead + AsyncWrite + } let pre_session_data_payload_size = header.length as usize; + + // T17: bound the VMM-supplied payload length before allocating. + // `header` is read from a VMM-controlled transport and `header.length` + // is a `u32`, so without this check a malicious VMM can request a + // ~4 GiB heap allocation. With `panic = "abort"`, the resulting + // `handle_alloc_error` permanently kills MigTD on every migration + // attempt. 1 MiB is well above any real policy/issuer-chain blob + // (production collateral JSON ≈ 200–500 KB; chain PEM ≈ 5–15 KB). + // See docs/threat_model/T17-presession-unbounded-alloc.md. + const MAX_PRE_SESSION_PAYLOAD_SIZE: usize = 1 * 1024 * 1024; + if pre_session_data_payload_size > MAX_PRE_SESSION_PAYLOAD_SIZE { + log::error!( + "receive_pre_session_data_packet: payload length {} exceeds max {}\n", + pre_session_data_payload_size, + MAX_PRE_SESSION_PAYLOAD_SIZE + ); + return Err(MigrationResult::InvalidParameter); + } + let mut pre_session_data_payload = vec![0u8; pre_session_data_payload_size]; receive_pre_session_data(transport, &mut pre_session_data_payload) .await @@ -346,26 +365,58 @@ pub(super) async fn exchange_hello_packet<T: AsyncRead + AsyncWrite + Unpin>( .ok_or(MigrationResult::InvalidParameter) } -/// Encode `(policy, issuer_chain)` into the peer-data blob. +/// Attacker-influenced (VMM-relayed) peer servTD CoRIM size ceiling, enforced +/// at decode time before any CBOR/COSE parsing allocates +/// (`ServtdCorim::decode_signed`). Production TCB-mapping CoRIMs enrolled via +/// the policy-v2 tooling are on the order of a few KB per mapped release; 64 +/// KiB comfortably covers a multi-release cumulative mapping while remaining +/// far below the overall 1 MiB pre-session payload cap +/// (`MAX_PRE_SESSION_PAYLOAD_SIZE`). +pub(crate) const MAX_PEER_SERVTD_CORIM_SIZE: usize = 64 * 1024; + +/// Borrowed `(policy, issuer_chain, servtd_corim)` slices decoded from a +/// peer-data blob. `servtd_corim` is `None` when the peer sent no CoRIM (see +/// [`decode_peer_data`] for exactly when that occurs). +pub(crate) type PeerData<'a> = (&'a [u8], &'a [u8], Option<&'a [u8]>); + +/// Encode `(policy, issuer_chain, servtd_corim)` into the peer-data blob. /// -/// Format: `[u32 LE policy_len][policy][u32 LE chain_len][issuer_chain]`. -/// Returns `None` if either length exceeds `u32::MAX`. -pub(crate) fn encode_peer_data(policy: &[u8], issuer_chain: &[u8]) -> Option<Vec<u8>> { +/// Format: `[u32 LE policy_len][policy][u32 LE chain_len][issuer_chain] +/// [u32 LE corim_len][servtd_corim]`. The trailing CoRIM field is a +/// wire-compatible *addition*: `servtd_corim` may be empty (no CoRIM +/// enrolled locally), in which case `corim_len` is sent as `0` so the +/// decoder can distinguish "peer build understands the field but has +/// nothing to send" from "peer build predates the field". Returns `None` if +/// any length exceeds `u32::MAX`. +pub(crate) fn encode_peer_data( + policy: &[u8], + issuer_chain: &[u8], + servtd_corim: &[u8], +) -> Option<Vec<u8>> { let policy_len = u32::try_from(policy.len()).ok()?; let chain_len = u32::try_from(issuer_chain.len()).ok()?; + let corim_len = u32::try_from(servtd_corim.len()).ok()?; - let mut blob = Vec::with_capacity(8 + policy.len() + issuer_chain.len()); + let mut blob = Vec::with_capacity(12 + policy.len() + issuer_chain.len() + servtd_corim.len()); blob.extend_from_slice(&policy_len.to_le_bytes()); blob.extend_from_slice(policy); blob.extend_from_slice(&chain_len.to_le_bytes()); blob.extend_from_slice(issuer_chain); + blob.extend_from_slice(&corim_len.to_le_bytes()); + blob.extend_from_slice(servtd_corim); Some(blob) } /// Decode a peer-data blob produced by [`encode_peer_data`]. /// -/// Returns borrowed `(policy, issuer_chain)` slices. Rejects trailing bytes. -pub(crate) fn decode_peer_data(data: &[u8]) -> Option<(&[u8], &[u8])> { +/// Returns borrowed `(policy, issuer_chain, servtd_corim)` slices. The CoRIM +/// element is `None` both when a peer built before this field existed sent a +/// blob that ends exactly after `issuer_chain` (legacy 2-field framing) and +/// when a peer that understands the field sent an explicit empty CoRIM +/// (`corim_len == 0`, e.g. no CoRIM enrolled locally). A present CoRIM larger +/// than [`MAX_PEER_SERVTD_CORIM_SIZE`] is rejected before the caller can +/// allocate/parse it. Rejects trailing bytes in all cases. +pub(crate) fn decode_peer_data(data: &[u8]) -> Option<PeerData<'_>> { if data.len() < 4 { return None; } @@ -381,21 +432,60 @@ pub(crate) fn decode_peer_data(data: &[u8]) -> Option<(&[u8], &[u8])> { .ok()?, ) as usize; let chain_offset = chain_len_offset + 4; - let end = chain_offset.checked_add(chain_len)?; + let chain_end = chain_offset.checked_add(chain_len)?; + if data.len() < chain_end { + return None; + } + let issuer_chain = &data[chain_offset..chain_end]; + + // Legacy (pre-CoRIM-transport) framing: nothing follows the issuer chain. + if data.len() == chain_end { + return Some((policy, issuer_chain, None)); + } + + // New framing: a `u32` corim_len + corim bytes must follow exactly. + if data.len() < chain_end.checked_add(4)? { + return None; + } + let corim_len = u32::from_le_bytes(data[chain_end..chain_end + 4].try_into().ok()?) as usize; + if corim_len > MAX_PEER_SERVTD_CORIM_SIZE { + return None; + } + let corim_offset = chain_end + 4; + let end = corim_offset.checked_add(corim_len)?; // Require exact length — reject trailing bytes. if data.len() != end { return None; } - let issuer_chain = &data[chain_offset..end]; - Some((policy, issuer_chain)) + let servtd_corim = &data[corim_offset..end]; + let servtd_corim = if servtd_corim.is_empty() { + None + } else { + Some(servtd_corim) + }; + Some((policy, issuer_chain, servtd_corim)) } -/// Build the local peer-data blob from configured policy and issuer chain. +/// Build the local peer-data blob from configured policy, issuer chain, and +/// (when enrolled) signed servTD TCB-mapping CoRIM. #[cfg(feature = "policy_v2")] pub(crate) fn local_peer_data() -> Option<Vec<u8>> { let policy = crate::config::get_policy()?; - let issuer_chain = crate::config::get_policy_issuer_chain()?; - encode_peer_data(policy, issuer_chain) + // Send the signer-anchor source: the 48-byte anchor when enrolled + // (CoRIM-only), else the policy issuer chain PEM. The peer resolves either + // form via `policy::resolve_signer_anchor`. + let issuer_chain = crate::config::get_signer_anchor_source()?; + // Send our own signed CoRIM (if enrolled) so the peer resolves *our* + // current/init hashes through *our* authenticated mapping instead of + // theirs. Absent the `servtd_corim` feature, or when nothing is + // enrolled, send an empty field — the peer then falls back to whatever + // JSON `servtdCollateral` our policy carries (or fails closed if we ship + // neither). + #[cfg(feature = "servtd_corim")] + let servtd_corim = crate::config::get_servtd_corim().unwrap_or(&[]); + #[cfg(not(feature = "servtd_corim"))] + let servtd_corim: &[u8] = &[]; + encode_peer_data(policy, issuer_chain, servtd_corim) } /// Exchange peer-data blobs (policy + issuer chain) with the remote. @@ -423,10 +513,11 @@ pub(crate) async fn pre_session_data_exchange<T: AsyncRead + AsyncWrite + Unpin> .await .log_err("pre_session_data_exchange: receive_pre_session_data_packet")?; - let (peer_policy, peer_issuer_chain) = decode_peer_data(&peer_blob).ok_or_else(|| { - log::error!("pre_session_data_exchange: malformed peer_data blob\n"); - MigrationResult::InvalidParameter - })?; + let (peer_policy, peer_issuer_chain, _peer_servtd_corim) = decode_peer_data(&peer_blob) + .ok_or_else(|| { + log::error!("pre_session_data_exchange: malformed peer_data blob\n"); + MigrationResult::InvalidParameter + })?; if peer_policy.is_empty() || peer_issuer_chain.is_empty() { log::error!("pre_session_data_exchange: Received empty policy or issuer chain from peer\n"); return Err(MigrationResult::InvalidParameter); @@ -441,3 +532,74 @@ pub(crate) async fn pre_session_data_exchange<T: AsyncRead + AsyncWrite + Unpin> Ok(peer_blob) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn round_trip_with_corim() { + let blob = encode_peer_data(b"policy", b"chain", b"corim").unwrap(); + let (policy, chain, corim) = decode_peer_data(&blob).unwrap(); + assert_eq!(policy, b"policy"); + assert_eq!(chain, b"chain"); + assert_eq!(corim, Some(b"corim".as_slice())); + } + + #[test] + fn round_trip_with_empty_corim_is_none() { + // A peer that understands the field but has nothing to send still + // sends the length-prefixed (empty) field explicitly. + let blob = encode_peer_data(b"policy", b"chain", b"").unwrap(); + let (policy, chain, corim) = decode_peer_data(&blob).unwrap(); + assert_eq!(policy, b"policy"); + assert_eq!(chain, b"chain"); + assert_eq!(corim, None); + } + + #[test] + fn legacy_two_field_blob_decodes_with_no_corim() { + // Simulate a pre-#229 peer: no third field at all. + let mut legacy = Vec::new(); + legacy.extend_from_slice(&6u32.to_le_bytes()); + legacy.extend_from_slice(b"policy"); + legacy.extend_from_slice(&5u32.to_le_bytes()); + legacy.extend_from_slice(b"chain"); + + let (policy, chain, corim) = decode_peer_data(&legacy).unwrap(); + assert_eq!(policy, b"policy"); + assert_eq!(chain, b"chain"); + assert_eq!(corim, None); + } + + #[test] + fn oversized_corim_is_rejected() { + let oversized = vec![0u8; MAX_PEER_SERVTD_CORIM_SIZE + 1]; + let blob = encode_peer_data(b"policy", b"chain", &oversized).unwrap(); + assert!(decode_peer_data(&blob).is_none()); + } + + #[test] + fn corim_at_size_limit_is_accepted() { + let at_limit = vec![0x42u8; MAX_PEER_SERVTD_CORIM_SIZE]; + let blob = encode_peer_data(b"policy", b"chain", &at_limit).unwrap(); + let (_, _, corim) = decode_peer_data(&blob).unwrap(); + assert_eq!(corim, Some(at_limit.as_slice())); + } + + #[test] + fn trailing_bytes_after_corim_are_rejected() { + let mut blob = encode_peer_data(b"policy", b"chain", b"corim").unwrap(); + blob.push(0xAA); + assert!(decode_peer_data(&blob).is_none()); + } + + #[test] + fn truncated_corim_length_prefix_is_rejected() { + let mut blob = encode_peer_data(b"policy", b"chain", b"corim").unwrap(); + // Claim a corim_len larger than what actually follows. + let len_offset = blob.len() - 5 - 4; + blob[len_offset..len_offset + 4].copy_from_slice(&100u32.to_le_bytes()); + assert!(decode_peer_data(&blob).is_none()); + } +} diff --git a/src/migtd/src/migration/rebinding.rs b/src/migtd/src/migration/rebinding.rs index ef3ec84c3..a14aac713 100644 --- a/src/migtd/src/migration/rebinding.rs +++ b/src/migtd/src/migration/rebinding.rs @@ -17,7 +17,7 @@ use crate::migration::transport::*; #[cfg(feature = "spdm_attestation")] use crate::spdm; -use crate::{config, migration::pre_session_data::pre_session_data_exchange}; +use crate::migration::pre_session_data::pre_session_data_exchange; use crate::{ driver::ticks::with_timeout, @@ -75,22 +75,6 @@ pub async fn start_rebinding( info: &MigtdMigrationInformation, data: &mut Vec<u8>, ) -> Result<(), MigrationResult> { - // Per GHCI 1.5: if VMM provided initMigtdData, verify policy binding - // before driving the rebinding exchange. Mirrors exchange_msk; without - // this check a hostile VMM could cause the rebind attestation to be - // built over an initial TDINFO whose policy signer hash / SVN would - // be rejected on the standard migration path. - #[cfg(all(feature = "vmcall-raw", feature = "policy_v2"))] - if let Some(init_td_info) = info.init_td_info_if_present() { - crate::mig_policy::verify_init_migtd_data_policy_binding(init_td_info).map_err(|e| { - log::error!( - migration_request_id = info.mig_request_id; - "start_rebinding: initMigtdData policy binding verification failed: {:?}\n", e - ); - MigrationResult::PolicyUnsatisfiedError - })?; - } - let mut transport = setup_transport(info.mig_request_id).await?; // Exchange peer-data (policy + issuer chain) firstly because of the message size limitation of TLS protocol @@ -184,66 +168,24 @@ pub async fn rebinding_old_prepare( data: &mut Vec<u8>, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, ) -> Result<(), MigrationResult> { - use core::ops::DerefMut; + use crate::migration::spdm_session::{finalize_spdm_session, map_spdm_setup_err}; - const SPDM_TIMEOUT: Duration = Duration::from_secs(60); // 60 seconds - let (mut spdm_requester, device_io_ref) = spdm::spdm_requester(transport).map_err(|_e| { - #[cfg(feature = "vmcall-raw")] - data.extend_from_slice( - &format!( - "Error: rebinding_old_prepare(): Failed in spdm_requester transport. Migration ID: {:x}\n", - info.mig_request_id, - ) - .into_bytes(), - ); - log::error!( - "rebinding: Failed in spdm_requester transport. Migration ID: {}\n", - info.mig_request_id - ); - MigrationResult::SecureSessionError - })?; - with_timeout( - SPDM_TIMEOUT, + let (mut spdm_requester, io_ref) = + spdm::spdm_requester(transport).map_err(|_| map_spdm_setup_err(info.mig_request_id))?; + + finalize_spdm_session( spdm::spdm_requester_rebind_old( &mut spdm_requester, info, #[cfg(feature = "policy_v2")] peer_data, ), + io_ref, + info.mig_request_id, ) - .await - .map_err(|e| { - #[cfg(feature = "vmcall-raw")] - data.extend_from_slice( - &format!( - "Error: rebinding_old_prepare(): spdm_requester_rebind_old timed out ({:?}). Migration ID: {:x}\n", - e, info.mig_request_id, - ) - .into_bytes(), - ); - log::error!( - "rebinding: spdm_requester_rebind_old timeout error: {:?}\n", - e - ); - e - })? - .map_err(|e| { - #[cfg(feature = "vmcall-raw")] - data.extend_from_slice( - &format!( - "Error: rebinding_old_prepare(): spdm_requester_rebind_old failed ({:?}). Migration ID: {:x}\n", - e, info.mig_request_id, - ) - .into_bytes(), - ); - log::error!("rebinding: spdm_requester_rebind_old error: {:?}\n", e); - spdm::decode_spdm_session_err(e) - })?; - log::info!("Rebind completed\n"); + .await?; - let mut transport_lock = device_io_ref.lock(); - let transport = transport_lock.deref_mut(); - shutdown_transport(&mut transport.transport, info.mig_request_id).await?; + log::info!("Rebind completed\n"); Ok(()) } @@ -254,67 +196,24 @@ pub async fn rebinding_new_prepare( data: &mut Vec<u8>, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, ) -> Result<(), MigrationResult> { - use core::ops::DerefMut; + use crate::migration::spdm_session::{finalize_spdm_session, map_spdm_setup_err}; - const SPDM_TIMEOUT: Duration = Duration::from_secs(60); // 60 seconds - let (mut spdm_responder, device_io_ref) = spdm::spdm_responder(transport).map_err(|_e| { - #[cfg(feature = "vmcall-raw")] - data.extend_from_slice( - &format!( - "Error: rebinding_new_prepare(): Failed in spdm_responder transport. Migration ID: {:x}\n", - info.mig_request_id, - ) - .into_bytes(), - ); - log::error!( - "rebinding: Failed in spdm_responder transport. Migration ID: {}\n", - info.mig_request_id - ); - MigrationResult::SecureSessionError - })?; + let (mut spdm_responder, io_ref) = + spdm::spdm_responder(transport).map_err(|_| map_spdm_setup_err(info.mig_request_id))?; - with_timeout( - SPDM_TIMEOUT, + finalize_spdm_session( spdm::spdm_responder_rebind_new( &mut spdm_responder, info, #[cfg(feature = "policy_v2")] peer_data, ), + io_ref, + info.mig_request_id, ) - .await - .map_err(|e| { - #[cfg(feature = "vmcall-raw")] - data.extend_from_slice( - &format!( - "Error: rebinding_new_prepare(): spdm_responder_rebind_new timed out ({:?}). Migration ID: {:x}\n", - e, info.mig_request_id, - ) - .into_bytes(), - ); - log::error!( - "rebinding: spdm_responder_rebind_new timeout error: {:?}\n", - e - ); - e - })? - .map_err(|e| { - #[cfg(feature = "vmcall-raw")] - data.extend_from_slice( - &format!( - "Error: rebinding_new_prepare(): spdm_responder_rebind_new failed ({:?}). Migration ID: {:x}\n", - e, info.mig_request_id, - ) - .into_bytes(), - ); - log::error!("rebinding: spdm_responder_rebind_new error: {:?}\n", e); - spdm::decode_spdm_session_err(e) - })?; - log::info!("Rebind completed\n"); + .await?; - let mut transport_lock = device_io_ref.lock(); - let transport = transport_lock.deref_mut(); - shutdown_transport(&mut transport.transport, info.mig_request_id).await?; + log::info!("Rebind completed\n"); Ok(()) } @@ -545,6 +444,13 @@ async fn tls_session_write_all( .write(&data[sent..]) .await .map_err(|_| MigrationResult::SecureSessionError)?; + // T21: fail-closed on zero-length transport write to avoid a + // livelock in policy_v2-without-spdm_attestation rebinding builds. + // See docs/threat_model/T21-policyv2-tls-rebinding-zero-progress-livelock.md. + if n == 0 { + log::error!("tls_session_write_all: zero-length transport write\n"); + return Err(MigrationResult::SecureSessionError); + } sent += n; } Ok(()) diff --git a/src/migtd/src/migration/session.rs b/src/migtd/src/migration/session.rs index 4528d0a2b..3f222c370 100644 --- a/src/migtd/src/migration/session.rs +++ b/src/migtd/src/migration/session.rs @@ -4,9 +4,11 @@ #[cfg(feature = "policy_v2")] use crate::migration::pre_session_data::pre_session_data_exchange; -#[cfg(not(feature = "spdm_attestation"))] use crate::migration::servtd_ext::verify_servtd_attr; +#[cfg(all(feature = "spdm_attestation", feature = "policy_v2"))] +use crate::migration::servtd_ext::write_approved_servtd_ext_hash; use crate::migration::transport::setup_transport; +#[cfg(not(feature = "spdm_attestation"))] use crate::migration::transport::shutdown_transport; use crate::migration::transport::TransportType; #[cfg(feature = "policy_v2")] @@ -15,6 +17,7 @@ use alloc::collections::BTreeSet; #[cfg(any(feature = "vmcall-interrupt", feature = "vmcall-raw"))] use core::sync::atomic::Ordering; +#[cfg(any(not(feature = "spdm_attestation"), feature = "policy_v2"))] use core::time::Duration; use core::{future::poll_fn, mem::size_of, task::Poll}; #[cfg(any(feature = "vmcall-interrupt", feature = "vmcall-raw"))] @@ -33,6 +36,7 @@ use zerocopy::IntoBytes; type Result<T> = core::result::Result<T, MigrationResult>; use super::{data::*, *}; +#[cfg(any(not(feature = "spdm_attestation"), feature = "policy_v2"))] use crate::driver::ticks::with_timeout; #[cfg(not(feature = "spdm_attestation"))] use crate::ratls; @@ -956,42 +960,49 @@ async fn migration_src_exchange_msk( info: &MigrationInformation, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, ) -> Result<()> { - use core::ops::DerefMut; + use crate::migration::spdm_session::{finalize_spdm_session, map_spdm_setup_err}; - const SPDM_TIMEOUT: Duration = Duration::from_secs(60); // 60 seconds - let (mut spdm_requester, device_io_ref) = spdm::spdm_requester(transport).map_err(|_e| { - log::error!( - "exchange_msk(): Failed in spdm_requester transport. Migration ID: {}\n", - info.mig_info.mig_request_id - ); - MigrationResult::SecureSessionError + let (mut spdm_requester, io_ref) = spdm::spdm_requester(transport) + .map_err(|_| map_spdm_setup_err(info.mig_info.mig_request_id))?; + + // The requester advertises the source's EXPORT range, not its IMPORT range. + let exchange_information = exchange_info(&info.mig_info, true).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: exchange_info error: {:?}\n", e); + e })?; - with_timeout( - SPDM_TIMEOUT, + + let remote_information = finalize_spdm_session( spdm::spdm_requester_transfer_msk( &mut spdm_requester, &info.mig_info, + &exchange_information, #[cfg(feature = "policy_v2")] peer_data, ), + io_ref, + info.mig_info.mig_request_id, ) - .await - .map_err(|e| { - log::error!( - "exchange_msk: spdm_requester_transfer_msk timeout error: {:?}\n", + .await?; + + let mig_ver = + cal_mig_version(true, &exchange_information, &remote_information).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: cal_mig_version error: {:?}\n", e); e - ); + })?; + set_mig_version(&info.mig_info, mig_ver).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: set_mig_version error: {:?}\n", e); + e + })?; + write_msk(&info.mig_info, &remote_information.key).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: write_msk error: {:?}\n", e); e - })? - .map_err(|e| { - log::error!("exchange_msk: spdm_requester_transfer_msk error: {:?}\n", e); - spdm::decode_spdm_session_err(e) })?; - log::info!("MSK exchange completed\n"); - let mut transport_lock = device_io_ref.lock(); - let transport = transport_lock.deref_mut(); - shutdown_transport(&mut transport.transport, info.mig_info.mig_request_id).await?; + log::info!(migration_request_id = info.mig_info.mig_request_id; "Set MSK and report status\n"); Ok(()) } @@ -1001,60 +1012,75 @@ async fn migration_dst_exchange_msk( info: &MigrationInformation, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, ) -> Result<()> { - use core::ops::DerefMut; + use crate::migration::spdm_session::{finalize_spdm_session, map_spdm_setup_err}; - const SPDM_TIMEOUT: Duration = Duration::from_secs(60); // 60 seconds - let (mut spdm_responder, device_io_ref) = spdm::spdm_responder(transport).map_err(|_e| { - log::error!( - "exchange_msk(): Failed in spdm_responder transport. Migration ID: {}\n", - info.mig_info.mig_request_id - ); - MigrationResult::SecureSessionError + // `exchange_information` must outlive `spdm_responder` so that the + // responder context's `info` variant can borrow it; declare it first. + let exchange_information = exchange_info(&info.mig_info, false).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: exchange_info error: {:?}\n", e); + e })?; - with_timeout( - SPDM_TIMEOUT, + let (mut spdm_responder, io_ref) = spdm::spdm_responder(transport) + .map_err(|_| map_spdm_setup_err(info.mig_info.mig_request_id))?; + + finalize_spdm_session( spdm::spdm_responder_transfer_msk( &mut spdm_responder, &info.mig_info, + &exchange_information, #[cfg(feature = "policy_v2")] peer_data, ), + io_ref, + info.mig_info.mig_request_id, ) - .await - .map_err(|e| { - log::error!( - "exchange_msk: spdm_responder_transfer_msk timeout error: {:?}\n", + .await?; + + let remote_information = spdm_responder.remote_information.take().ok_or_else(|| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: missing remote_information after SPDM responder loop\n"); + MigrationResult::SecureSessionError + })?; + + // Preserve the SPDM responder's historical chain ordering: + // verify_servtd_attr -> cal_mig_version -> set_mig_version -> write_msk. + verify_servtd_attr(info.mig_info.binding_handle, &info.mig_info.target_td_uuid).map_err( + |e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: verify_servtd_attr error: {:?}\n", e); e - ); + }, + )?; + let mig_ver = + cal_mig_version(false, &exchange_information, &remote_information).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: cal_mig_version error: {:?}\n", e); + e + })?; + set_mig_version(&info.mig_info, mig_ver).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: set_mig_version error: {:?}\n", e); + e + })?; + write_msk(&info.mig_info, &remote_information.key).map_err(|e| { + log::error!(migration_request_id = info.mig_info.mig_request_id; + "exchange_msk: write_msk error: {:?}\n", e); e - })? - .map_err(|e| { - log::error!("exchange_msk: spdm_responder_transfer_msk error: {:?}\n", e); - spdm::decode_spdm_session_err(e) })?; - log::info!("MSK exchange completed\n"); - let mut transport_lock = device_io_ref.lock(); - let transport = transport_lock.deref_mut(); - shutdown_transport(&mut transport.transport, info.mig_info.mig_request_id).await?; + #[cfg(feature = "policy_v2")] + if let Some(servtd_ext) = spdm_responder.servtd_ext { + write_approved_servtd_ext_hash(&servtd_ext.calculate_approved_servtd_ext_hash()?)?; + } + + log::info!(migration_request_id = info.mig_info.mig_request_id; "Set MSK and report status\n"); Ok(()) } #[cfg(feature = "main")] pub async fn exchange_msk(info: &MigrationInformation) -> Result<()> { - // Per GHCI 1.5: if VMM provided initMigtdData, verify policy binding - #[cfg(feature = "policy_v2")] - if let Some(init_td_info) = info.mig_info.init_td_info_if_present() { - crate::mig_policy::verify_init_migtd_data_policy_binding(init_td_info).map_err(|e| { - log::error!( - migration_request_id = info.mig_info.mig_request_id; - "exchange_msk: initMigtdData policy binding verification failed: {:?}\n", e - ); - MigrationResult::PolicyUnsatisfiedError - })?; - } - #[allow(unused_mut)] let mut transport = setup_transport( info.mig_info.mig_request_id, @@ -1431,11 +1457,13 @@ mod test { #[cfg(feature = "vmcall-raw")] mod parse_request_tests { use super::super::{parse_request, REQUESTS}; + #[cfg(not(feature = "policy_v2"))] + use crate::migration::MigtdMigrationInformation; #[cfg(feature = "policy_v2")] use crate::migration::MIGTD_MIGRATION_INFO_HEADER_SIZE; use crate::migration::{ data::{RequestDataBufferHeader, WaitForRequestResponse}, - EnableLogAreaInfo, MigrationResult, MigtdMigrationInformation, ReportInfo, + EnableLogAreaInfo, MigrationResult, ReportInfo, }; use core::mem::size_of; use core::task::Poll; @@ -1475,6 +1503,16 @@ mod test { payload } + #[cfg(feature = "policy_v2")] + fn build_migration_payload_with_legacy_init(request_id: u64, is_source: u8) -> Vec<u8> { + let mut payload = vec![0u8; size_of::<crate::migration::MigtdMigrationInformation>()]; + payload[0..8].copy_from_slice(&request_id.to_le_bytes()); + payload[8] = is_source; + payload[9] = 1; + payload[MIGTD_MIGRATION_INFO_HEADER_SIZE..].fill(0xA5); + payload + } + fn cleanup_request(request_id: u64) { REQUESTS.lock().remove(&request_id); } @@ -1534,6 +1572,46 @@ mod test { cleanup_request(request_id); } + #[cfg(feature = "policy_v2")] + #[test] + fn test_parse_start_migration_accepts_and_ignores_legacy_init_tdinfo() { + let request_id: u64 = 0xAA00_0000_0000_0002; + let payload = build_migration_payload_with_legacy_init(request_id, 1); + let buf = build_request_buffer(1, &payload); + let mut pending = None; + let result = parse_request(&buf, HDR_LEN, &mut pending); + match result { + Poll::Ready(Ok(WaitForRequestResponse::StartMigration(info))) => { + assert_eq!(info.mig_info.mig_request_id, request_id); + assert_eq!(info.mig_info.has_init_data, 0); + assert!(info.mig_info.init_td_info_if_present().is_none()); + } + _ => panic!("Expected StartMigration, got unexpected variant"), + } + assert!(pending.is_none()); + cleanup_request(request_id); + } + + #[cfg(all(feature = "policy_v2", feature = "main"))] + #[test] + fn test_parse_start_rebinding_accepts_and_ignores_legacy_init_tdinfo() { + let request_id: u64 = 0xAA00_0000_0000_0003; + let payload = build_migration_payload_with_legacy_init(request_id, 1); + let buf = build_request_buffer(2, &payload); + let mut pending = None; + let result = parse_request(&buf, HDR_LEN, &mut pending); + match result { + Poll::Ready(Ok(WaitForRequestResponse::StartRebinding(info))) => { + assert_eq!(info.mig_request_id, request_id); + assert_eq!(info.has_init_data, 0); + assert!(info.init_td_info_if_present().is_none()); + } + _ => panic!("Expected StartRebinding, got unexpected variant"), + } + assert!(pending.is_none()); + cleanup_request(request_id); + } + #[test] fn test_parse_start_migration_truncated_payload() { // Payload is too short and data_length != expected size @@ -1563,51 +1641,96 @@ mod test { } #[test] - fn test_parse_get_td_report_full() { + fn test_parse_get_td_report_request_id() { let request_id: u64 = 0xBB00_0000_0000_0002; - let mut payload = vec![0u8; size_of::<ReportInfo>()]; - payload[0..8].copy_from_slice(&request_id.to_le_bytes()); - payload[8..72].fill(0xCC); + let payload = request_id.to_le_bytes(); let buf = build_request_buffer(3, &payload); let mut pending = None; let result = parse_request(&buf, HDR_LEN, &mut pending); match result { Poll::Ready(Ok(WaitForRequestResponse::GetTdReport(info))) => { assert_eq!(info.mig_request_id, request_id); - assert_eq!(info.reportdata[0], 0xCC); } _ => panic!("Expected GetTdReport, got unexpected variant"), } + assert!(pending.is_none()); cleanup_request(request_id); } #[test] - fn test_parse_get_td_report_request_id_only() { + fn test_parse_get_td_report_legacy_report_data_ignored() { + assert_eq!(size_of::<ReportInfo>(), size_of::<u64>()); let request_id: u64 = 0xCC00_0000_0000_0003; - let payload = request_id.to_le_bytes(); - let buf = build_request_buffer(3, &payload); - let mut pending = None; - let result = parse_request(&buf, HDR_LEN, &mut pending); - match result { - Poll::Ready(Ok(WaitForRequestResponse::GetTdReport(info))) => { - assert_eq!(info.mig_request_id, request_id); - assert_eq!(info.reportdata, [0u8; 64]); + for report_data_byte in [0x00, 0x5a, 0xff] { + let mut payload = vec![report_data_byte; 72]; + payload[0..8].copy_from_slice(&request_id.to_le_bytes()); + let buf = build_request_buffer(3, &payload); + let mut pending = None; + let result = parse_request(&buf, HDR_LEN, &mut pending); + match result { + Poll::Ready(Ok(WaitForRequestResponse::GetTdReport(info))) => { + assert_eq!(info.mig_request_id, request_id); + } + _ => panic!("Expected GetTdReport for legacy payload"), } - _ => panic!("Expected GetTdReport with zero reportdata, got unexpected variant"), + assert!(pending.is_none()); + cleanup_request(request_id); } - cleanup_request(request_id); } #[test] fn test_parse_get_td_report_wrong_size_rejected() { - // 16 bytes is neither 8 nor 72 → read_from_bytes rejects - let buf = build_request_buffer(3, &[0u8; 16]); + for payload_size in 0..=80 { + if payload_size == 8 || payload_size == 72 { + continue; + } + let buf = build_request_buffer(3, &vec![0u8; payload_size]); + let mut pending = None; + let result = parse_request(&buf, HDR_LEN, &mut pending); + assert!(matches!( + result, + Poll::Ready(Err(MigrationResult::InvalidParameter)) + )); + } + } + + #[test] + fn test_parse_get_td_report_truncated_declared_payload_rejected() { + for data_length in [8, 72] { + for payload_size in 0..data_length as usize { + let payload = vec![0u8; payload_size]; + assert!(matches!( + ReportInfo::read_from_bytes(data_length, &payload), + Err(MigrationResult::InvalidParameter) + )); + let buf = build_raw_buffer(0x0301, data_length, &payload); + let mut pending = None; + assert!(matches!( + parse_request(&buf, HDR_LEN, &mut pending), + Poll::Ready(Err(MigrationResult::InvalidParameter)) + )); + } + } + } + + #[cfg(feature = "policy_v2")] + #[test] + fn test_parse_get_migtd_data_retains_report_data() { + let request_id: u64 = 0xCD00_0000_0000_0004; + let report_data = [0x5a; 64]; + let mut payload = request_id.to_le_bytes().to_vec(); + payload.extend_from_slice(&report_data); + let buf = build_request_buffer(5, &payload); let mut pending = None; - let result = parse_request(&buf, HDR_LEN, &mut pending); - assert!(matches!( - result, - Poll::Ready(Err(MigrationResult::InvalidParameter)) - )); + match parse_request(&buf, HDR_LEN, &mut pending) { + Poll::Ready(Ok(WaitForRequestResponse::GetMigtdData(info))) => { + assert_eq!(info.mig_request_id, request_id); + assert_eq!(info.reportdata, report_data); + } + _ => panic!("Expected GetMigtdData, got unexpected variant"), + } + assert!(pending.is_none()); + cleanup_request(request_id); } #[test] diff --git a/src/migtd/src/migration/spdm_session.rs b/src/migtd/src/migration/spdm_session.rs new file mode 100644 index 000000000..56d0cb9a6 --- /dev/null +++ b/src/migtd/src/migration/spdm_session.rs @@ -0,0 +1,77 @@ +// Copyright (c) 2026 Microsoft Corporation +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +//! Shared SPDM session-driving helpers used by both migration (MSK exchange) +//! and rebinding paths. Centralizes the common boilerplate of running the +//! SPDM body under a 60-second timeout and shutting down the transport. + +use core::future::Future; +use core::ops::DerefMut; +use core::time::Duration; +use spdmlib::error::SpdmStatus; + +use super::transport::{shutdown_transport, TransportType}; +use super::MigrationResult; +use crate::driver::ticks::with_timeout; +use crate::spdm::SpdmDeviceIoArc; + +type Result<T> = core::result::Result<T, MigrationResult>; + +/// Timeout that wraps every SPDM session body (requester or responder). +pub(super) const SPDM_TIMEOUT: Duration = Duration::from_secs(60); + +/// Standard error mapping for a failed `spdm::spdm_requester` / +/// `spdm::spdm_responder` transport setup. +pub(super) fn map_spdm_setup_err(mig_request_id: u64) -> MigrationResult { + log::error!( + migration_request_id = mig_request_id; + "SPDM transport setup failed\n" + ); + MigrationResult::SecureSessionError +} + +/// Run an SPDM session `body` under [`SPDM_TIMEOUT`] and always attempt transport +/// shutdown. A protocol error or timeout takes precedence over a shutdown error. +/// +/// `body` is the already-constructed future returned by an SPDM exchange +/// function (e.g. `spdm_requester_transfer_msk`, `spdm_responder_rebind_new`). +/// The caller owns the SPDM context that `body` borrows; this helper only +/// drives `body` to completion and then takes the device-IO lock to invoke +/// `shutdown_transport`. The exchange's `AppContextGuard` retires its session +/// keys before shutdown, including when the timeout drops `body`. +pub(super) async fn finalize_spdm_session<Fut, T>( + body: Fut, + io_ref: SpdmDeviceIoArc<TransportType>, + mig_request_id: u64, +) -> Result<T> +where + Fut: Future<Output = core::result::Result<T, SpdmStatus>>, +{ + let session_result = with_timeout(SPDM_TIMEOUT, body) + .await + .map_err(|e| { + log::error!( + migration_request_id = mig_request_id; + "finalize_spdm_session: body timeout: {e:?}\n" + ); + MigrationResult::from(e) + }) + .and_then(|result| { + result.map_err(|e| { + log::error!( + migration_request_id = mig_request_id; + "finalize_spdm_session: body error: {e:?}\n" + ); + crate::spdm::decode_spdm_session_err(e) + }) + }); + + let mut transport_lock = io_ref.lock(); + let transport = transport_lock.deref_mut(); + let shutdown_result = shutdown_transport(&mut transport.transport, mig_request_id).await; + + let value = session_result?; + shutdown_result?; + Ok(value) +} diff --git a/src/migtd/src/spdm/handshake.rs b/src/migtd/src/spdm/handshake.rs new file mode 100644 index 000000000..3347fbf08 --- /dev/null +++ b/src/migtd/src/spdm/handshake.rs @@ -0,0 +1,81 @@ +// Copyright (c) 2026 Microsoft Corporation +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +//! Shared SPDM handshake building-blocks for the migration (MSK exchange) +//! and rebinding requester/responder paths. +//! +//! Two paths in this crate (`spdm_requester_transfer_msk` / +//! `spdm_requester_rebind_old` and the responder counterparts) run the same +//! SPDM-layer dance with only the two VDM-defined steps differing. This +//! module factors out the parts that are identical so each path only +//! supplies the bits that genuinely differ between MSK exchange and +//! rebinding. + +use alloc::boxed::Box; +use alloc::vec::Vec; +use codec::{Codec, Writer}; +use spdmlib::{ + error::{SpdmStatus, SPDM_STATUS_BUFFER_FULL}, + protocol::SpdmMeasurementSummaryHashType, + requester::RequesterContext, +}; + +use crate::spdm::{ + spdm_req::send_and_receive_pub_key, + spdm_rsp::{rsp_handle_message, ResponderContextEx}, + SpdmAppContextData, +}; + +/// Run the shared SPDM requester prelude: version → capability → algorithm → +/// `send_and_receive_pub_key` → key_exchange. Returns the negotiated +/// `session_id` for the caller to use in subsequent VDM steps and the +/// final finish / end_session calls. +pub(super) async fn requester_handshake_prelude( + spdm_requester: &mut RequesterContext, +) -> Result<u32, SpdmStatus> { + Box::pin(spdm_requester.send_receive_spdm_version()).await?; + Box::pin(spdm_requester.send_receive_spdm_capability()).await?; + Box::pin(spdm_requester.send_receive_spdm_algorithm()).await?; + Box::pin(send_and_receive_pub_key(spdm_requester)).await?; + Box::pin(spdm_requester.send_receive_spdm_key_exchange( + 0xff, + SpdmMeasurementSummaryHashType::SpdmMeasurementSummaryHashTypeNone, + )) + .await +} + +/// Drive the SPDM responder message loop with a caller-provided +/// `SpdmAppContextData` payload and `peer_data` quote buffer. +/// +/// Steps performed in order: +/// 1. Stash `peer_data` on `spdm_responder_ex` (read by VDM handlers via +/// `upcast_mut`). +/// 2. Encode `app_context` into the responder's `app_context_data_buffer` +/// (read by VDM handlers). +/// 3. Run `rsp_handle_message` until the session ends. +/// +/// This helper does NOT zeroize `app_context_data_buffer` itself: the buffer +/// may carry the caller's ephemeral private key, so callers hold an +/// `AppContextGuard` across the await to wipe it and retire session keys on +/// success, error, or cancellation (see `spdm_responder_transfer_msk` / +/// `spdm_responder_rebind_new`). +/// +/// Callers that need to expose extra context to VDM handlers (e.g. setting +/// `spdm_responder_ex.info = RebindInformation(..)`) must do so before +/// invoking this helper. +pub(super) async fn run_responder_message_loop( + spdm_responder_ex: &mut ResponderContextEx<'_>, + peer_data: Vec<u8>, + app_context: SpdmAppContextData, +) -> Result<(), SpdmStatus> { + spdm_responder_ex.peer_data = peer_data; + + let spdm_responder = &mut spdm_responder_ex.responder_context; + let mut writer = Writer::init(&mut spdm_responder.common.app_context_data_buffer); + app_context + .encode(&mut writer) + .map_err(|_| SPDM_STATUS_BUFFER_FULL)?; + + Box::pin(rsp_handle_message(spdm_responder)).await +} diff --git a/src/migtd/src/spdm/mod.rs b/src/migtd/src/spdm/mod.rs index cba83ed00..b7a0ebeb9 100644 --- a/src/migtd/src/spdm/mod.rs +++ b/src/migtd/src/spdm/mod.rs @@ -4,11 +4,14 @@ #![cfg(feature = "spdm_attestation")] +mod handshake; #[cfg(all(feature = "main", feature = "policy_v2", feature = "vmcall-raw"))] mod spdm_rebind; mod spdm_req; mod spdm_rsp; mod spdm_vdm; +#[cfg(test)] +mod tests; mod vmcall_msg; use alloc::boxed::Box; @@ -20,7 +23,7 @@ use codec::Codec; use codec::Reader; use codec::Writer; use log::error; -use spdmlib::common::SpdmDeviceIo; +use spdmlib::common::{SpdmContext, SpdmDeviceIo}; use spdmlib::error::*; use spdmlib::protocol::{SpdmDigestStruct, SPDM_MAX_HASH_SIZE}; use spin::Mutex; @@ -46,6 +49,30 @@ use crate::migration::MigtdMigrationInformation; use crate::spdm::vmcall_msg::VMCALL_SPDM_MESSAGE_HEADER_SIZE; pub(crate) type SpdmDeviceIoArc<T> = Arc<Mutex<MigtdTransport<T>>>; + +// Borrow the whole context so the exchange can keep using it while its session +// keys and raw application-buffer signing key are cleared on return or cancellation. +struct AppContextGuard<'a, T> { + context: &'a mut T, + common: fn(&mut T) -> &mut SpdmContext, +} + +impl<T> Drop for AppContextGuard<'_, T> { + fn drop(&mut self) { + let common = (self.common)(self.context); + teardown_sessions(common); + common.app_context_data_buffer.zeroize(); + } +} + +pub(crate) fn teardown_sessions(context: &mut SpdmContext) { + // FINISH clears last_session_id while the established session still holds keys. + // Each context belongs to one exchange, so retire every slot before shutdown. + for session in &mut context.session { + session.teardown(); + } +} + pub struct MigtdTransport<T: AsyncRead + AsyncWrite + Unpin + Send> { pub transport: T, } diff --git a/src/migtd/src/spdm/spdm_rebind.rs b/src/migtd/src/spdm/spdm_rebind.rs index a3673c37b..060ccdeb8 100644 --- a/src/migtd/src/spdm/spdm_rebind.rs +++ b/src/migtd/src/spdm/spdm_rebind.rs @@ -4,38 +4,26 @@ use crate::{ migration::MigtdMigrationInformation, spdm::{ - spdm_req::{ - send_and_receive_pub_key, send_and_receive_sdm_rebind_attest_info, - send_and_receive_sdm_rebind_info, - }, - spdm_rsp::{rsp_handle_message, ResponderContextEx, ResponderContextExInfo}, + handshake::{requester_handshake_prelude, run_responder_message_loop}, + spdm_req::{send_and_receive_sdm_rebind_attest_info, send_and_receive_sdm_rebind_info}, + spdm_rsp::{ResponderContextEx, ResponderContextExInfo}, PrivateKeyDer, SpdmAppContextData, }, }; use alloc::boxed::Box; use alloc::vec::Vec; -use codec::{Codec, Writer}; -use spdmlib::{ - error::{SpdmStatus, SPDM_STATUS_BUFFER_FULL}, - protocol::SpdmMeasurementSummaryHashType, - requester::RequesterContext, -}; -use zeroize::Zeroize; +use spdmlib::{error::SpdmStatus, requester::RequesterContext}; pub async fn spdm_requester_rebind_old( spdm_requester: &mut RequesterContext, rebind_info: &MigtdMigrationInformation, peer_data: Vec<u8>, ) -> Result<(), SpdmStatus> { - // `send_and_receive_pub_key` (called below) encodes the requester's - // ephemeral ECDSA private key into - // `spdm_requester.common.app_context_data_buffer` so libspdm's - // asymmetric signing callback can read it. That buffer is a plain - // `[u8; SIZE]` with no automatic cleanup, so wipe it on every return - // path here. - let result = spdm_requester_rebind_old_inner(spdm_requester, rebind_info, peer_data).await; - spdm_requester.common.app_context_data_buffer.zeroize(); - result + let guard = super::AppContextGuard { + context: spdm_requester, + common: |context| &mut context.common, + }; + spdm_requester_rebind_old_inner(guard.context, rebind_info, peer_data).await } async fn spdm_requester_rebind_old_inner( @@ -43,16 +31,7 @@ async fn spdm_requester_rebind_old_inner( rebind_info: &MigtdMigrationInformation, peer_data: Vec<u8>, ) -> Result<(), SpdmStatus> { - Box::pin(spdm_requester.send_receive_spdm_version()).await?; - Box::pin(spdm_requester.send_receive_spdm_capability()).await?; - Box::pin(spdm_requester.send_receive_spdm_algorithm()).await?; - - Box::pin(send_and_receive_pub_key(spdm_requester)).await?; - let session_id = Box::pin(spdm_requester.send_receive_spdm_key_exchange( - 0xff, - SpdmMeasurementSummaryHashType::SpdmMeasurementSummaryHashTypeNone, - )) - .await?; + let session_id = requester_handshake_prelude(spdm_requester).await?; Box::pin(send_and_receive_sdm_rebind_attest_info( spdm_requester, @@ -80,33 +59,18 @@ pub async fn spdm_responder_rebind_new<'a>( rebind_info: &'a MigtdMigrationInformation, peer_data: Vec<u8>, ) -> Result<(), SpdmStatus> { - spdm_responder_ex.peer_data = peer_data; - spdm_responder_ex.info = ResponderContextExInfo::RebindInformation(rebind_info); - - // Zeroize the responder key buffer on every return path. - let result = spdm_responder_rebind_new_inner(spdm_responder_ex).await; - spdm_responder_ex - .responder_context - .common - .app_context_data_buffer - .zeroize(); - - result -} + let guard = super::AppContextGuard { + context: spdm_responder_ex, + common: |context| &mut context.responder_context.common, + }; + let spdm_responder_ex = &mut *guard.context; -async fn spdm_responder_rebind_new_inner( - spdm_responder_ex: &mut ResponderContextEx<'_>, -) -> Result<(), SpdmStatus> { - let spdm_responder = &mut spdm_responder_ex.responder_context; - let mut writer = Writer::init(&mut spdm_responder.common.app_context_data_buffer); + spdm_responder_ex.info = ResponderContextExInfo::RebindInformation(rebind_info); - let responder_app_context = SpdmAppContextData { + let app_context = SpdmAppContextData { migration_info: MigtdMigrationInformation::default(), private_key: PrivateKeyDer::default(), }; - responder_app_context - .encode(&mut writer) - .map_err(|_| SPDM_STATUS_BUFFER_FULL)?; - Box::pin(rsp_handle_message(spdm_responder)).await + run_responder_message_loop(spdm_responder_ex, peer_data, app_context).await } diff --git a/src/migtd/src/spdm/spdm_req.rs b/src/migtd/src/spdm/spdm_req.rs index c4dff2f80..b9e116d0e 100644 --- a/src/migtd/src/spdm/spdm_req.rs +++ b/src/migtd/src/spdm/spdm_req.rs @@ -4,11 +4,7 @@ use crate::mig_policy; use crate::migration::MigrationResult; use crate::{ - migration::{ - data::MigrationSessionKey, - session::{cal_mig_version, exchange_info, set_mig_version, write_msk}, - MigtdMigrationInformation, - }, + migration::{data::MigrationSessionKey, MigtdMigrationInformation}, spdm::{ build_report_data, gen_quote_spdm, spdm_rsp::SECRET_ASYM_IMPL_INSTANCE, spdm_verify_quote, verify_report_data_binding, verify_tdreport_data_binding, vmcall_msg::VmCallTransportEncap, @@ -27,7 +23,6 @@ use spdmlib::{ requester::RequesterContext, }; use spin::Mutex; -use zeroize::Zeroize; extern crate alloc; #[cfg(feature = "policy_v2")] use crate::migration::pre_session_data::local_peer_data; @@ -91,39 +86,30 @@ pub fn spdm_requester<T: AsyncRead + AsyncWrite + Unpin + Send + Sync + 'static> pub async fn spdm_requester_transfer_msk( spdm_requester: &mut RequesterContext, mig_info: &MigtdMigrationInformation, + exchange_information: &ExchangeInformation, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, -) -> Result<(), SpdmStatus> { - // `send_and_receive_pub_key` encodes the requester's ephemeral ECDSA - // private key into `spdm_requester.common.app_context_data_buffer` so - // libspdm's asymmetric signing callback can read it. The libspdm - // `SpdmContext` provides no automatic cleanup for that buffer (it is a - // plain `[u8; SIZE]`), so wipe it on every return path here. - let result = spdm_requester_transfer_msk_inner( - spdm_requester, +) -> Result<ExchangeInformation, SpdmStatus> { + let guard = super::AppContextGuard { + context: spdm_requester, + common: |context| &mut context.common, + }; + spdm_requester_transfer_msk_inner( + guard.context, mig_info, + exchange_information, #[cfg(feature = "policy_v2")] peer_data, ) - .await; - spdm_requester.common.app_context_data_buffer.zeroize(); - result + .await } async fn spdm_requester_transfer_msk_inner( spdm_requester: &mut RequesterContext, mig_info: &MigtdMigrationInformation, + exchange_information: &ExchangeInformation, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, -) -> Result<(), SpdmStatus> { - Box::pin(spdm_requester.send_receive_spdm_version()).await?; - Box::pin(spdm_requester.send_receive_spdm_capability()).await?; - Box::pin(spdm_requester.send_receive_spdm_algorithm()).await?; - - Box::pin(send_and_receive_pub_key(spdm_requester)).await?; - let session_id = Box::pin(spdm_requester.send_receive_spdm_key_exchange( - 0xff, - SpdmMeasurementSummaryHashType::SpdmMeasurementSummaryHashTypeNone, - )) - .await?; +) -> Result<ExchangeInformation, SpdmStatus> { + let session_id = crate::spdm::handshake::requester_handshake_prelude(spdm_requester).await?; Box::pin(send_and_receive_sdm_migration_attest_info( spdm_requester, @@ -135,15 +121,17 @@ async fn spdm_requester_transfer_msk_inner( .await?; Box::pin(spdm_requester.send_receive_spdm_finish(Some(0xff), session_id)).await?; - Box::pin(send_and_receive_sdm_exchange_migration_info( + + let remote_information = Box::pin(send_and_receive_sdm_exchange_migration_info( spdm_requester, - mig_info, + exchange_information, Some(session_id), )) .await?; + Box::pin(spdm_requester.send_receive_spdm_end_session(session_id)).await?; - Ok(()) + Ok(remote_information) } pub async fn send_and_receive_pub_key(spdm_requester: &mut RequesterContext) -> SpdmResult { @@ -355,8 +343,13 @@ pub async fn send_and_receive_sdm_migration_attest_info( let report_data = build_report_data(b"MigTDReq", &th1)?; + log::info!("BC> REQ-ATT-01 gen_quote_spdm (src)\n"); //quote src let quote_src = gen_quote_spdm(&report_data)?; + log::info!( + "BC> REQ-ATT-02 gen_quote_spdm done, len={}\n", + quote_src.len() + ); // Self-quote verification is only needed for policy v1, which uses // verified_report_local in authenticate_policy(). Policy v2 re-verifies // the quote internally via authenticate_remote(). @@ -497,6 +490,7 @@ pub async fn send_and_receive_sdm_migration_attest_info( send_used += request_payload.spdm_encode(&mut spdm_requester.common, &mut writer)?; let mut receive_buffer = [0u8; config::MAX_SPDM_MSG_SIZE]; + log::info!("BC> REQ-ATT-03 send_receive_spdm_vendor_defined_request_ex (attest_info)\n"); let response = spdm_requester .send_receive_spdm_vendor_defined_request_ex( None, @@ -504,8 +498,12 @@ pub async fn send_and_receive_sdm_migration_attest_info( &mut receive_buffer, ) .await?; + log::info!( + "BC> REQ-ATT-04 attest_info VDM response received, len={}\n", + response.len() + ); - //Format checks + // Format checks let mut reader = Reader::init(response); let _response_header = SpdmMessageHeader::read(&mut reader).ok_or(SPDM_STATUS_INVALID_MSG_SIZE)?; @@ -599,16 +597,21 @@ pub async fn send_and_receive_sdm_migration_attest_info( )?; #[cfg(feature = "policy_v2")] - verify_peer_attestation_v2( - "e_dst_vec, - &event_log_dst_vec, - mig_policy_hash_dst, - &peer_data, - &th1, - spdm_requester, - session_id, - )?; + { + log::info!("BC> REQ-ATT-05 verify_peer_attestation_v2 BEGIN\n"); + verify_peer_attestation_v2( + "e_dst_vec, + &event_log_dst_vec, + mig_policy_hash_dst, + &peer_data, + &th1, + spdm_requester, + session_id, + )?; + log::info!("BC> REQ-ATT-06 verify_peer_attestation_v2 OK\n"); + } + log::info!("BC> REQ-ATT-07 building VDM transcript before finish\n"); let vdm_attest_info_src_hash = digest_sha384(&send_buffer[..send_used]).map_err(|_| SPDM_STATUS_CRYPTO_ERROR)?; let vdm_attest_info_dst_hash = digest_sha384(response).map_err(|_| SPDM_STATUS_CRYPTO_ERROR)?; @@ -625,6 +628,7 @@ pub async fn send_and_receive_sdm_migration_attest_info( error!("Cannot get session id. Attestation failed.\n"); return Err(SPDM_STATUS_INVALID_STATE_LOCAL); } + log::info!("BC> REQ-ATT-08 send_and_receive_sdm_migration_attest_info return Ok\n"); Ok(()) } @@ -698,18 +702,37 @@ fn verify_peer_attestation_v2( spdm_requester: &mut RequesterContext, session_id: u32, ) -> SpdmResult { + log::info!( + "BC> REQ-V2-01 enter verify_peer_attestation_v2 quote_peer.len={} event_log_peer.len={} mig_policy_hash_peer.len={} peer_data.len={}\n", + quote_peer.len(), + event_log_peer.len(), + mig_policy_hash_peer.len(), + peer_data.len() + ); // 1. Verify peer-data hash matches the value bound in the certificate let peer_data_hash = digest_sha384(peer_data).map_err(|_| SPDM_STATUS_CRYPTO_ERROR)?; + log::info!("BC> REQ-V2-02 digest_sha384(peer_data) ok\n"); if mig_policy_hash_peer != peer_data_hash.as_slice() { error!("The received mig policy hash does not match the expected peer_data hash!\n"); + let session = spdm_requester + .common + .get_session_via_id(session_id) + .ok_or(SPDM_STATUS_INVALID_STATE_LOCAL)?; + session.teardown(); return Err(SPDM_STATUS_INVALID_MSG_FIELD); } + log::info!("BC> REQ-V2-03 mig_policy_hash matches peer_data_hash\n"); // 2. Authenticate remote (includes quote verification internally) #[cfg(not(feature = "test_disable_ra_and_accept_all"))] { + log::info!("BC> REQ-V2-04 calling mig_policy::authenticate_remote(is_src=true)\n"); let policy_check_result = mig_policy::authenticate_remote(true, quote_peer, peer_data, event_log_peer); + log::info!( + "BC> REQ-V2-05 authenticate_remote returned ok={}\n", + policy_check_result.is_ok() + ); if let Err(e) = &policy_check_result { error!("Policy v2 check failed, below is the detail information:\n"); error!("{:x?}\n", e); @@ -728,6 +751,7 @@ fn verify_peer_attestation_v2( feature = "use-mock-quote" )))] { + log::info!("BC> REQ-V2-06 verify_report_data_binding\n"); let verified_report_peer = policy_check_result.unwrap(); if verify_report_data_binding(&verified_report_peer, b"MigTDRsp", th1).is_err() { error!("Peer REPORTDATA does not match expected TH1 binding!\n"); @@ -738,23 +762,23 @@ fn verify_peer_attestation_v2( session.teardown(); return Err(SpdmStatus::from(MigrationResult::MutualAttestationError)); } + log::info!("BC> REQ-V2-07 verify_report_data_binding ok\n"); } } + log::info!("BC> REQ-V2-08 verify_peer_attestation_v2 return Ok\n"); Ok(()) } async fn send_and_receive_sdm_exchange_migration_info( spdm_requester: &mut RequesterContext, - mig_info: &MigtdMigrationInformation, + exchange_information: &ExchangeInformation, session_id: Option<u32>, -) -> SpdmResult { +) -> SpdmResult<ExchangeInformation> { let mut vendor_id = [0u8; MAX_SPDM_VENDOR_DEFINED_VENDOR_ID_LEN]; vendor_id[..VDM_MESSAGE_VENDOR_ID_LEN].copy_from_slice(&VDM_MESSAGE_VENDOR_ID); let vendor_id = VendorIDStruct { len: 4, vendor_id }; - let exchange_information = exchange_info(mig_info, true)?; - let mut payload = vec![0u8; MAX_SPDM_VENDOR_DEFINED_PAYLOAD_SIZE]; let mut writer = Writer::init(&mut payload); let mut cnt = 0; @@ -826,6 +850,9 @@ async fn send_and_receive_sdm_exchange_migration_info( send_used += request_payload.spdm_encode(&mut spdm_requester.common, &mut writer)?; let mut receive_buffer = [0u8; config::MAX_SPDM_MSG_SIZE]; + log::info!( + "BC> REQ-MIG-01 send_receive_spdm_vendor_defined_request_ex (exchange_migration_info)\n" + ); let response = spdm_requester .send_receive_spdm_vendor_defined_request_ex( session_id, @@ -833,6 +860,10 @@ async fn send_and_receive_sdm_exchange_migration_info( &mut receive_buffer, ) .await?; + log::info!( + "BC> REQ-MIG-02 exchange_migration_info VDM response received, len={}\n", + response.len() + ); // Format checks let mut reader = Reader::init(response); @@ -916,12 +947,7 @@ async fn send_and_receive_sdm_exchange_migration_info( }, }; - let mig_ver = cal_mig_version(true, &exchange_information, &remote_information)?; - set_mig_version(mig_info, mig_ver)?; - write_msk(mig_info, &remote_information.key)?; - log::info!("Set MSK and report status\n"); - - Ok(()) + Ok(remote_information) } #[cfg(all(feature = "main", feature = "policy_v2", feature = "vmcall-raw"))] @@ -1186,6 +1212,11 @@ pub async fn send_and_receive_sdm_rebind_attest_info( let peer_data_hash = digest_sha384(&peer_data).map_err(|_| SPDM_STATUS_CRYPTO_ERROR)?; if mig_policy_hash_dst != peer_data_hash.as_slice() { error!("The received mig policy hash does not match the expected peer_data hash!\n"); + let session = spdm_requester + .common + .get_session_via_id(session_id) + .ok_or(SPDM_STATUS_INVALID_STATE_LOCAL)?; + session.teardown(); return Err(SPDM_STATUS_INVALID_MSG_FIELD); } @@ -1208,6 +1239,7 @@ pub async fn send_and_receive_sdm_rebind_attest_info( // Verify that the peer's REPORTDATA is bound to this SPDM session's TH1 let verified_report_peer = policy_check_result.unwrap(); + #[cfg(not(any(feature = "AzCVMEmu", feature = "test_mock_report")))] if verify_tdreport_data_binding(&verified_report_peer, b"MigTDRsp", &th1).is_err() { error!("Rebind peer REPORTDATA does not match expected TH1 binding!\n"); let session = spdm_requester @@ -1217,6 +1249,8 @@ pub async fn send_and_receive_sdm_rebind_attest_info( session.teardown(); return Err(SpdmStatus::from(MigrationResult::MutualAttestationError)); } + #[cfg(any(feature = "AzCVMEmu", feature = "test_mock_report"))] + let _ = (&th1, &verified_report_peer); } let vdm_attest_info_src_hash = diff --git a/src/migtd/src/spdm/spdm_rsp.rs b/src/migtd/src/spdm/spdm_rsp.rs index 2913bd1da..98ab8f21e 100644 --- a/src/migtd/src/spdm/spdm_rsp.rs +++ b/src/migtd/src/spdm/spdm_rsp.rs @@ -7,19 +7,13 @@ use crate::mig_policy; use crate::migration::pre_session_data::local_peer_data; #[cfg(all(feature = "main", feature = "policy_v2", feature = "vmcall-raw"))] use crate::migration::rebinding::{write_rebinding_session_token, write_servtd_rebind_attr}; -#[cfg(not(feature = "policy_v2"))] -use crate::migration::servtd_ext::verify_servtd_attr; #[cfg(feature = "policy_v2")] -use crate::migration::servtd_ext::{verify_servtd_attr, write_approved_servtd_ext_hash, ServtdExt}; +use crate::migration::servtd_ext::{write_approved_servtd_ext_hash, ServtdExt}; use crate::migration::MigrationResult; use crate::{ event_log::get_event_log, migration::{ - data::MigrationSessionKey, - session::{ - cal_mig_version, exchange_info, set_mig_version, write_msk, ExchangeInformation, - }, - MigtdMigrationInformation, + data::MigrationSessionKey, session::ExchangeInformation, MigtdMigrationInformation, }, }; use alloc::sync::Arc; @@ -54,12 +48,22 @@ pub struct ResponderContextEx<'a> { pub peer_data: Vec<u8>, pub info: ResponderContextExInfo<'a>, pub mig_info_exchanged: bool, + /// Populated by the migration responder VDM handler from the peer's + /// `ExchangeMigrationInfoReq`; consumed by the caller after the SPDM + /// loop returns to drive the post-session commit chain. + pub remote_information: Option<ExchangeInformation>, #[cfg(feature = "policy_v2")] pub servtd_ext: Option<ServtdExt>, } pub enum ResponderContextExInfo<'a> { - MigrationInformation(&'a MigtdMigrationInformation), + /// Migration responder context. `exchange_information` is computed by + /// the caller before the SPDM loop and used by the VDM handler to + /// populate the `ExchangeMigrationInfoRsp` payload. + MigrationInformation { + mig_info: &'a MigtdMigrationInformation, + exchange_information: &'a ExchangeInformation, + }, #[cfg(all(feature = "main", feature = "policy_v2", feature = "vmcall-raw"))] RebindInformation(&'a MigtdMigrationInformation), None, @@ -74,9 +78,16 @@ impl ResponderContextEx<'_> { } } +/// SAFETY: `ResponderContextEx` is `#[repr(C)]` with `ResponderContext` as +/// its first field, so a `&mut ResponderContext` that originated from a +/// live `&mut ResponderContextEx` can be upcast back to the outer struct +/// via a zero-offset pointer cast. The caller must ensure `inner` was +/// obtained from `ResponderContextEx::inner_mut` (or equivalent) and that +/// no other reference to the outer struct (or any of its other fields) is +/// live for the duration of the returned borrow. pub unsafe fn upcast_mut(inner: &mut ResponderContext) -> &mut ResponderContextEx { let ptr = inner as *mut ResponderContext as *mut u8; - let outer_ptr = ptr.sub(0) as *mut ResponderContextEx; + let outer_ptr = ptr as *mut ResponderContextEx; &mut *outer_ptr } @@ -142,6 +153,7 @@ pub fn spdm_responder<'a, T: AsyncRead + AsyncWrite + Unpin + Send + Sync + 'sta peer_data: Vec::new(), info: ResponderContextExInfo::None, mig_info_exchanged: false, + remote_information: None, #[cfg(feature = "policy_v2")] servtd_ext: None, }; @@ -152,54 +164,55 @@ pub fn spdm_responder<'a, T: AsyncRead + AsyncWrite + Unpin + Send + Sync + 'sta pub async fn spdm_responder_transfer_msk<'a>( spdm_responder_ex: &mut ResponderContextEx<'a>, mig_info: &'a MigtdMigrationInformation, + exchange_information: &'a ExchangeInformation, #[cfg(feature = "policy_v2")] peer_data: Vec<u8>, ) -> Result<(), SpdmStatus> { + let guard = super::AppContextGuard { + context: spdm_responder_ex, + common: |context| &mut context.responder_context.common, + }; + let spdm_responder_ex = &mut *guard.context; + #[cfg(not(feature = "policy_v2"))] let peer_data = Vec::new(); - spdm_responder_ex.peer_data = peer_data; - // Mark this responder as operating in migration mode so the migration-mode - // handlers (mig-attest op 0x03, mig-info op 0x05) accept the request; their - // MigrationInformation variant guard rejects rebind-mode confusion. - spdm_responder_ex.info = ResponderContextExInfo::MigrationInformation(mig_info); - - // Zeroize the responder key buffer on every return path. - let result = spdm_responder_transfer_msk_inner(spdm_responder_ex, mig_info).await; - spdm_responder_ex - .responder_context - .common - .app_context_data_buffer - .zeroize(); - - result -} - -async fn spdm_responder_transfer_msk_inner( - spdm_responder_ex: &mut ResponderContextEx<'_>, - mig_info: &MigtdMigrationInformation, -) -> Result<(), SpdmStatus> { - let spdm_responder = &mut spdm_responder_ex.responder_context; - let mut writer = Writer::init(&mut spdm_responder.common.app_context_data_buffer); - - let responder_app_context = SpdmAppContextData { - migration_info: mig_info.clone(), + spdm_responder_ex.info = ResponderContextExInfo::MigrationInformation { + mig_info, + exchange_information, + }; + spdm_responder_ex.mig_info_exchanged = false; + spdm_responder_ex.remote_information = None; + + // The VDM handler reads `mig_info` / `exchange_information` from + // `responder_ex.info`; no per-session app context data is required for + // the migration path beyond placeholder defaults. + let app_context = SpdmAppContextData { + migration_info: MigtdMigrationInformation::default(), private_key: PrivateKeyDer::default(), }; - responder_app_context - .encode(&mut writer) - .map_err(|_| SPDM_STATUS_BUFFER_FULL)?; - Box::pin(rsp_handle_message(spdm_responder)).await + crate::spdm::handshake::run_responder_message_loop(spdm_responder_ex, peer_data, app_context) + .await } pub async fn rsp_handle_message(spdm_responder: &mut ResponderContext) -> Result<(), SpdmStatus> { let mut sid = None; + let mut iter: u32 = 0; loop { + iter = iter.wrapping_add(1); + log::info!("BC> RSP-LOOP-{} await process_message\n", iter); let raw_packet = Arc::new(Mutex::new([0u8; config::RECEIVER_BUFFER_SIZE])); let mut raw_packet = raw_packet.lock(); let raw_packet = raw_packet.deref_mut(); raw_packet.zeroize(); let res = Box::pin(spdm_responder.process_message(false, 0, raw_packet)).await; + log::info!("BC> RSP-LOOP-{} process_message returned\n", iter); + + match res { + Ok(Ok(_)) => {} + Ok(Err(spdm_status)) => return Err(spdm_status), + Err(_) => return Err(SPDM_STATUS_RECEIVE_FAIL), + } let session_id = spdm_responder.common.runtime_info.get_last_session_id(); if session_id.is_some() { @@ -211,31 +224,9 @@ pub async fn rsp_handle_message(spdm_responder: &mut ResponderContext) -> Result .get_session_via_id(sid.unwrap()) .is_none() { - //Terminate the responder upon end_session received. + // Terminate the responder upon end_session received. break; } - - match res { - Ok(spdm_result) => { - match spdm_result { - Ok(_) => {} - Err(spdm_status) => { - if spdm_status.severity == StatusSeverity::ERROR - && matches!(spdm_status.status_code, StatusCode::VDM(_)) - { - return Err(spdm_status); - } - if spdm_status == SPDM_STATUS_INVALID_STATE_LOCAL { - //Terminate the responder upon invalid state. - return Err(spdm_status); - } - } - } - } - Err(_) => { - return Err(SPDM_STATUS_RECEIVE_FAIL); - } - } } Ok(()) } @@ -376,11 +367,12 @@ pub fn handle_exchange_mig_attest_info_req( reader: &mut Reader<'_>, vendor_defined_rsp_payload: &mut [u8], ) -> SpdmResult<usize> { + log::info!("BC> RSP-ATT-00 handle_exchange_mig_attest_info_req ENTER\n"); // Migration attestation messages must be handled only when migration info is set. let spdm_responder_ex = unsafe { upcast_mut(responder_context) }; if !matches!( &spdm_responder_ex.info, - ResponderContextExInfo::MigrationInformation(_) + ResponderContextExInfo::MigrationInformation { .. } ) { error!("Migration info is not set in responder context.\n"); return Err(SPDM_STATUS_INVALID_MSG_FIELD); @@ -456,8 +448,13 @@ pub fn handle_exchange_mig_attest_info_req( let report_data = build_report_data(b"MigTDRsp", &th1)?; + log::info!("BC> RSP-ATT-01 gen_quote_spdm (dst)\n"); //quote dst let quote_dst = gen_quote_spdm(&report_data)?; + log::info!( + "BC> RSP-ATT-02 gen_quote_spdm done, len={}\n", + quote_dst.len() + ); // Self-quote verification is only needed for policy v1, which uses // verified_report_local in authenticate_policy(). Policy v2 re-verifies // the quote internally via authenticate_remote(). @@ -581,6 +578,7 @@ pub fn handle_exchange_mig_attest_info_req( let spdm_responder_ex = upcast_mut(responder_context); spdm_responder_ex.peer_data.clone() }; + log::info!("BC> RSP-ATT-03 rsp_verify_peer_attestation_v2 BEGIN\n"); rsp_verify_peer_attestation_v2( "e_src_vec, &event_log_src_vec, @@ -592,7 +590,6 @@ pub fn handle_exchange_mig_attest_info_req( responder_context, session_id, )?; - // Persist SERVTD_EXT only after attestation verification succeeded, so // unverified peer-supplied data is never stored in the responder context // (its hash is later written to TDCS during MSK exchange in op 0x05). @@ -600,6 +597,7 @@ pub fn handle_exchange_mig_attest_info_req( let spdm_responder_ex = upcast_mut(responder_context); spdm_responder_ex.servtd_ext = ServtdExt::read_from_bytes(&servtd_ext_bytes_vec); }; + log::info!("BC> RSP-ATT-04 rsp_verify_peer_attestation_v2 OK\n"); } let mut writer = Writer::init(vendor_defined_rsp_payload); @@ -741,11 +739,16 @@ fn rsp_verify_peer_attestation_v2( let peer_data_hash = digest_sha384(peer_data).map_err(|_| SPDM_STATUS_CRYPTO_ERROR)?; if mig_policy_hash_peer != peer_data_hash.as_slice() { error!("The received mig policy hash does not match the expected peer_data hash!\n"); + let session = responder_context + .common + .get_session_via_id(session_id) + .ok_or(SPDM_STATUS_INVALID_STATE_LOCAL)?; + session.teardown(); return Err(SPDM_STATUS_INVALID_MSG_FIELD); } - // 2. Authenticate remote, verify init TDINFO integrity against ServtdExt, - // and evaluate policy with init TDINFO as reference. + // 2. Authenticate remote, verify init/current mapped-SVN ordering from + // ServtdExt, and evaluate the source against local policy. #[cfg(not(feature = "test_disable_ra_and_accept_all"))] { let verified_report_peer = match mig_policy::authenticate_migration_source_with_init_tdinfo( @@ -812,12 +815,13 @@ pub fn handle_exchange_mig_info_req( let spdm_responder_ex = unsafe { upcast_mut(responder_context) }; if !matches!( &spdm_responder_ex.info, - ResponderContextExInfo::MigrationInformation(_) + ResponderContextExInfo::MigrationInformation { .. } ) { error!("Migration info is not set in responder context.\n"); return Err(SPDM_STATUS_INVALID_MSG_FIELD); } + log::info!("BC> RSP-MIG-00 handle_exchange_mig_info_req ENTER\n"); // The VDM message for secret migration info exchange MUST be sent after mutual attested session establishment. let session_id = if let Some(sid) = session_id { sid @@ -905,38 +909,25 @@ pub fn handle_exchange_mig_info_req( }, }; - let mut reader = Reader::init(responder_context.common.app_context_data_buffer.as_ref()); - let responder_app_context = - SpdmAppContextData::read(&mut reader).ok_or(SPDM_STATUS_INVALID_MSG_SIZE)?; - let exchange_information = exchange_info(&responder_app_context.migration_info, false)?; - - verify_servtd_attr( - responder_app_context.migration_info.binding_handle, - &responder_app_context.migration_info.target_td_uuid, - )?; - - let mig_ver = cal_mig_version(false, &exchange_information, &remote_information)?; - set_mig_version(&responder_app_context.migration_info, mig_ver)?; - write_msk( - &responder_app_context.migration_info, - &remote_information.key, - )?; - - unsafe { - upcast_mut(responder_context).mig_info_exchanged = true; - } - - // Write APPROVED_SERVTD_EXT_HASH if SERVTD_EXT was received during attestation - #[cfg(feature = "policy_v2")] - { - let servtd_ext = unsafe { - let spdm_responder_ex = upcast_mut(responder_context); - spdm_responder_ex.servtd_ext - }; - if let Some(ext) = servtd_ext { - write_approved_servtd_ext_hash(&ext.calculate_approved_servtd_ext_hash()?)?; + // Read mig_info / exchange_information that the caller stashed in + // `responder_ex.info` before driving the session; stash the parsed + // `remote_information` for the caller to consume after the loop returns. + // + // SAFETY: `responder_context` was obtained from `&mut ResponderContextEx` + // via the SPDM dispatch path. See `upcast_mut` SAFETY notes. + let spdm_responder_ex = unsafe { upcast_mut(responder_context) }; + let exchange_information: &ExchangeInformation = match &spdm_responder_ex.info { + ResponderContextExInfo::MigrationInformation { + mig_info: _, + exchange_information, + } => *exchange_information, + _ => { + error!( + "Migration responder is missing ExchangeMigrationInfo context (caller did not set responder_ex.info)\n" + ); + return Err(SPDM_STATUS_INVALID_STATE_LOCAL); } - } + }; log::info!("Set MSK and report status\n"); @@ -944,6 +935,12 @@ pub fn handle_exchange_mig_info_req( let max_import_version = exchange_information.max_ver; let mig_session_key = exchange_information.key.as_bytes().to_vec(); + spdm_responder_ex.remote_information = Some(remote_information); + // Finalization now happens after the responder loop, so latch the + // accepted request here to prevent a replay from replacing the staged + // migration information before the caller commits it. + spdm_responder_ex.mig_info_exchanged = true; + let mut writer = Writer::init(vendor_defined_rsp_payload); let mut cnt = 0; let vdm_exchange_mig_info = VdmMessage { @@ -1179,6 +1176,11 @@ pub fn handle_exchange_rebind_attest_info_req( let peer_data_hash = digest_sha384(peer_data).map_err(|_| SPDM_STATUS_CRYPTO_ERROR)?; if mig_policy_hash_src_vec != peer_data_hash { error!("The received mig policy hash does not match the expected peer_data hash!\n"); + let session = responder_context + .common + .get_session_via_id(session_id) + .ok_or(SPDM_STATUS_INVALID_STATE_LOCAL)?; + session.teardown(); return Err(SPDM_STATUS_INVALID_MSG_FIELD); } @@ -1202,6 +1204,7 @@ pub fn handle_exchange_rebind_attest_info_req( // Verify that the peer's REPORTDATA is bound to this SPDM session's TH1 let verified_report_peer = policy_check_result.unwrap(); + #[cfg(not(any(feature = "AzCVMEmu", feature = "test_mock_report")))] if verify_tdreport_data_binding(&verified_report_peer, b"MigTDReq", &th1).is_err() { error!("Rebind peer REPORTDATA does not match expected TH1 binding!\n"); let session = responder_context @@ -1211,6 +1214,8 @@ pub fn handle_exchange_rebind_attest_info_req( session.teardown(); return Err(SpdmStatus::from(MigrationResult::MutualAttestationError)); } + #[cfg(any(feature = "AzCVMEmu", feature = "test_mock_report"))] + let _ = (&th1, &verified_report_peer); } unsafe { diff --git a/src/migtd/src/spdm/tests.rs b/src/migtd/src/spdm/tests.rs new file mode 100644 index 000000000..65a7c34a5 --- /dev/null +++ b/src/migtd/src/spdm/tests.rs @@ -0,0 +1,279 @@ +// Copyright (c) 2026 Microsoft Corporation +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +use super::*; +use crate::migration::session::ExchangeInformation; +use core::future::{pending, Future}; +use core::task::{Context, Poll, Waker}; +use spdmlib::{ + common::{session::SpdmSessionState, SpdmContext, INVALID_SESSION_ID}, + message::{SpdmMessageHeader, SpdmRequestResponseCode}, + protocol::SpdmVersion, +}; + +#[derive(Default)] +struct TestTransport { + fail_read: bool, + incoming: Vec<u8>, + offset: usize, +} + +impl AsyncRead for TestTransport { + async fn read(&mut self, buffer: &mut [u8]) -> async_io::Result<usize> { + if self.fail_read { + return Err(async_io::ErrorKind::ConnectionAborted.into()); + } + let size = buffer.len().min(self.incoming.len() - self.offset); + if size == 0 { + return pending().await; + } + buffer[..size].copy_from_slice(&self.incoming[self.offset..self.offset + size]); + self.offset += size; + Ok(size) + } +} + +impl AsyncWrite for TestTransport { + async fn write(&mut self, buffer: &[u8]) -> async_io::Result<usize> { + Ok(buffer.len()) + } +} + +fn finish_or_cancel<T>(future: impl Future<Output = Result<T, SpdmStatus>>, fail_read: bool) { + let mut future = Box::pin(future); + let mut context = Context::from_waker(Waker::noop()); + let result = future.as_mut().poll(&mut context); + if fail_read { + assert!(matches!(result, Poll::Ready(Err(_)))); + } else { + assert!(result.is_pending()); + } + // Dropping a pending exchange is how the outer session timeout cancels it. +} + +#[test] +fn requester_migration_app_context_is_wiped_on_cancellation_and_error() { + for fail_read in [false, true] { + let (mut requester, _) = spdm_requester(TestTransport { + fail_read, + ..Default::default() + }) + .unwrap(); + requester.common.app_context_data_buffer.fill(0xa5); + let mig_info = MigtdMigrationInformation::default(); + let exchange_information = ExchangeInformation::default(); + + finish_or_cancel( + spdm_requester_transfer_msk( + &mut requester, + &mig_info, + &exchange_information, + #[cfg(feature = "policy_v2")] + Vec::new(), + ), + fail_read, + ); + + assert!(requester + .common + .app_context_data_buffer + .iter() + .all(|byte| *byte == 0)); + } +} + +#[test] +fn responder_migration_app_context_is_wiped_on_cancellation_and_error() { + for fail_read in [false, true] { + let (mut responder, _) = spdm_responder(TestTransport { + fail_read, + ..Default::default() + }) + .unwrap(); + responder.mig_info_exchanged = true; + responder + .responder_context + .common + .app_context_data_buffer + .fill(0xa5); + let mig_info = MigtdMigrationInformation::default(); + let exchange_information = ExchangeInformation::default(); + + finish_or_cancel( + spdm_responder_transfer_msk( + &mut responder, + &mig_info, + &exchange_information, + #[cfg(feature = "policy_v2")] + Vec::new(), + ), + fail_read, + ); + + assert!(!responder.mig_info_exchanged); + assert!(responder + .responder_context + .common + .app_context_data_buffer + .iter() + .all(|byte| *byte == 0)); + } +} + +#[cfg(all(feature = "policy_v2", feature = "vmcall-raw"))] +#[test] +fn requester_rebind_app_context_is_wiped_on_cancellation_and_error() { + for fail_read in [false, true] { + let (mut requester, _) = spdm_requester(TestTransport { + fail_read, + ..Default::default() + }) + .unwrap(); + requester.common.app_context_data_buffer.fill(0xa5); + let mig_info = MigtdMigrationInformation::default(); + + finish_or_cancel( + spdm_requester_rebind_old(&mut requester, &mig_info, Vec::new()), + fail_read, + ); + + assert!(requester + .common + .app_context_data_buffer + .iter() + .all(|byte| *byte == 0)); + } +} + +#[cfg(all(feature = "policy_v2", feature = "vmcall-raw"))] +#[test] +fn responder_rebind_app_context_is_wiped_on_cancellation_and_error() { + for fail_read in [false, true] { + let (mut responder, _) = spdm_responder(TestTransport { + fail_read, + ..Default::default() + }) + .unwrap(); + responder + .responder_context + .common + .app_context_data_buffer + .fill(0xa5); + let mig_info = MigtdMigrationInformation::default(); + + finish_or_cancel( + spdm_responder_rebind_new(&mut responder, &mig_info, Vec::new()), + fail_read, + ); + + assert!(responder + .responder_context + .common + .app_context_data_buffer + .iter() + .all(|byte| *byte == 0)); + } +} + +fn assert_teardown_clears_sessions(context: &mut SpdmContext) { + for last_session_id in [Some(1), None] { + for cancel in [false, true] { + context.app_context_data_buffer.fill(0xa5); + for (index, session) in context.session.iter_mut().enumerate() { + session.setup(u32::try_from(index + 1).unwrap()).unwrap(); + session.set_session_state(if last_session_id.is_some() { + SpdmSessionState::SpdmSessionHandshaking + } else { + SpdmSessionState::SpdmSessionEstablished + }); + let mut secret = session.get_application_secret(); + secret.request_direction.encryption_key.data.fill(0xa5); + secret.request_direction.encryption_key.data_size = 32; + session.set_application_secret(secret); + } + // FINISH clears this field without removing the established session. + context.runtime_info.set_last_session_id(last_session_id); + + for _ in 0..2 { + let mut future = Box::pin(async { + let _guard = AppContextGuard { + context: &mut *context, + common: |context| context, + }; + if cancel { + pending::<()>().await; + } + }); + let mut task_context = Context::from_waker(Waker::noop()); + assert_eq!(future.as_mut().poll(&mut task_context).is_pending(), cancel); + drop(future); + + assert!(context + .app_context_data_buffer + .iter() + .all(|byte| *byte == 0)); + for session in &context.session { + assert_eq!(session.get_session_id(), INVALID_SESSION_ID); + assert_eq!( + session.get_session_state(), + SpdmSessionState::SpdmSessionNotStarted + ); + assert_eq!(session.get_application_secret(), Default::default()); + } + } + } + } +} + +#[test] +fn requester_teardown_clears_handshaking_and_established_sessions() { + let (mut requester, _) = spdm_requester(TestTransport::default()).unwrap(); + assert_teardown_clears_sessions(&mut requester.common); +} + +#[test] +fn responder_teardown_clears_handshaking_and_established_sessions() { + let (mut responder, _) = spdm_responder(TestTransport::default()).unwrap(); + assert_teardown_clears_sessions(&mut responder.responder_context.common); +} + +#[test] +fn responder_propagates_malformed_message_error() { + // GET_VERSION needs a two-byte payload after its header. + let mut incoming = vec![0u8; VMCALL_SPDM_MESSAGE_HEADER_SIZE + 2]; + let mut writer = Writer::init(&mut incoming); + vmcall_msg::VmCallMessageHeader { + version: vmcall_msg::VMCALL_SPDM_VERSION, + msg_type: vmcall_msg::VmCallMessageType::SpdmMessage, + length: 2, + } + .encode(&mut writer) + .unwrap(); + SpdmMessageHeader { + version: SpdmVersion::SpdmVersion10, + request_response_code: SpdmRequestResponseCode::SpdmRequestGetVersion, + } + .encode(&mut writer) + .unwrap(); + + let (mut responder, _) = spdm_responder(TestTransport { + incoming, + ..Default::default() + }) + .unwrap(); + let mig_info = MigtdMigrationInformation::default(); + let exchange_information = ExchangeInformation::default(); + let mut future = Box::pin(spdm_responder_transfer_msk( + &mut responder, + &mig_info, + &exchange_information, + #[cfg(feature = "policy_v2")] + Vec::new(), + )); + let mut context = Context::from_waker(Waker::noop()); + assert_eq!( + future.as_mut().poll(&mut context), + Poll::Ready(Err(SPDM_STATUS_INVALID_MSG_FIELD)) + ); +} diff --git a/src/policy/Cargo.toml b/src/policy/Cargo.toml index cc4b246c7..a29805fc7 100644 --- a/src/policy/Cargo.toml +++ b/src/policy/Cargo.toml @@ -9,6 +9,7 @@ edition = "2018" [dependencies] cc-measurement = { path = "../../deps/td-shim/cc-measurement"} chrono = { version = "0.4", default-features = false, features = ["alloc"] } +corim = { version = "0.1.3", default-features = false, features = ["profile-intel"], optional = true } crypto = { path = "../crypto" } log = { version = "0.4.13", optional = true } serde = { version = "1.0", default-features = false, features = ["derive", "alloc"]} @@ -20,3 +21,7 @@ td-shim-interface = { path = "../../deps/td-shim/td-shim-interface"} std = [] AzCVMEmu = [] policy_v2 = [] +# Opt-in signed CoRIM TCB-mapping collateral, keyed by the same tdinfo_hash as +# the legacy JSON collateral. The COSE signature and x5chain signer anchor are +# verified before the payload is decoded. +servtd_corim = ["dep:corim"] diff --git a/src/policy/src/lib.rs b/src/policy/src/lib.rs index a9ff6355c..cc0cdb073 100644 --- a/src/policy/src/lib.rs +++ b/src/policy/src/lib.rs @@ -54,6 +54,15 @@ pub enum PolicyError { QuoteGeneration, GetTdxReport, PeerCertChainValidation, + /// The `servtdTcbMappingIssuerChain` does not resolve to the RTMR1 signer + /// anchor enrolled directly or derived from the CFV policy issuer chain. + /// Because the chain bytes are redacted from RTMR2, this root+EKU binding + /// ensures the mapping signer matches the measured root of trust. + SignerAnchorMismatch, + /// A certificate in the servtd signer chain (TCB mapping or identity) is + /// listed in the authoritative signer CRL (`servtdCrl`), or that CRL + /// failed authentication. Fail-closed. + SignerRevoked, } pub struct Report<'a> { @@ -189,6 +198,16 @@ pub enum EventName { MigTdPolicy, SgxRootKey, MigTdPolicySigner, + /// Single RTMR2 extend for v2 policy: canonical bytes of `policyData`. + /// JSON packaging removes the TCB mapping and mapping issuer chain; + /// CoRIM-only policyData is measured in full + /// (see `doc/tcb_mapping_design_proposal.md`). Tag ID + /// `TAGGED_EVENT_ID_POLICY_DATA = 0x9`. Replaces the prior six per-field + /// extends; protects every retained `policyData` field (including + /// `forwardPolicy` / `backwardPolicy` and the identity issuer chain) by + /// construction, while keeping `servtdTcbMapping` updateable + /// post-IGVM-build. + MigTdPolicyData, Unknown, } @@ -201,6 +220,7 @@ impl From<&str> for EventName { "Digest.MigTdCoreSvn" => Self::MigTdCoreSvn, "Digest.MigTdPolicy" => Self::MigTdPolicy, "Digest.MigTdSgxRootKey" => Self::SgxRootKey, + "Digest.MigTdPolicyData" => Self::MigTdPolicyData, _ => Self::Unknown, } } diff --git a/src/policy/src/v2/measurement.rs b/src/policy/src/v2/measurement.rs new file mode 100644 index 000000000..044935d87 --- /dev/null +++ b/src/policy/src/v2/measurement.rs @@ -0,0 +1,781 @@ +// Copyright (c) 2026 Intel Corporation +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +//! Policy v2 measurement primitives, per `doc/tcb_mapping_design_proposal.md`. +//! +//! These helpers are used by both the runtime (`migtd::bin::migtd::main`) and +//! the offline build tool (`migtd-hash`) so the two compute identical values +//! and the runtime `replay_event_log` cross-check stays consistent. +//! +//! ## RTMR2 measurement scheme +//! +//! RTMR2 (`mr_index = 0x3`) is extended **once** with canonical `policyData`. +//! When `servtdCollateral` is present, its `servtdTcbMapping` and +//! `servtdTcbMappingIssuerChain` fields are removed. CoRIM-only `policyData` +//! omits `servtdCollateral` and is measured in full. +//! +//! | # | Field | Helper | Tag ID | EventName | +//! |---|-------|--------|--------|-----------| +//! | 1 | `policyData` (redacted: `servtdTcbMapping` + `servtdTcbMappingIssuerChain` omitted) | `extract_canonical_policy_data_bytes` | `0x9` | `MigTdPolicyData` | +//! +//! JSON packaging excludes two fields, for two different reasons: +//! * `servtdCollateral.servtdTcbMapping` — must remain updateable after the +//! IGVM is published (re-signed by the issuer without re-releasing the +//! image); it also carries the circular `tdinfo_hash`. +//! * `servtdCollateral.servtdTcbMappingIssuerChain` — its root+EKU identity is +//! already bound by the **RTMR1 signer anchor**, so measuring the chain bytes +//! again here would re-couple TCB-mapping-signer key rotation to +//! `tdinfo_hash`. +//! +//! Every other field of `policyData` — including `version`, `id`, `policySvn`, +//! `policy`, `forwardPolicy`, `backwardPolicy`, `collaterals`, +//! `servtdCollateral.majorVersion`, `servtdCollateral.minorVersion`, +//! `servtdCollateral.servtdIdentity` (with its signature), and +//! `servtdCollateral.servtdIdentityIssuerChain` — is bound into RTMR2 by +//! virtue of being inside `policyData`. This prevents playback of an obsolete +//! but validly signed identity in JSON-collateral builds. +//! +//! ## Canonicalization +//! +//! "Canonical" means: object keys sorted alphabetically at every nesting +//! level, no whitespace between tokens, array element order preserved, and +//! scalar values rendered by `serde_json` (RFC 8259 JSON literal form). +//! +//! Canonicalization is implemented manually by [`canonical_value_bytes`] and +//! does **not** rely on `serde_json::to_vec`'s ordering, because other crates +//! in this workspace enable `serde_json/preserve_order`. If feature +//! unification ever turns that on in the policy crate's build, the helper +//! still emits sorted output. +//! +//! ## RTMR1 signer anchor +//! +//! `compute_signer_anchor` returns the 48-byte value `A` where +//! `A = SHA384("MIGTD-RTMR1-ANCHOR-V1" || 0x00 || R || 0x00 || EKU_OID)`, +//! `R = SHA384(DER(root_cert))`, and `EKU_OID` is the DER-encoded, dedicated +//! signer-purpose Extended Key Usage OID from the leaf certificate. +//! `A` is the value extended into RTMR1 (replacing the old "hash the full +//! policy issuer chain PEM bytes" scheme). +//! +//! ## `tdinfo_hash` = `init_servtd_info_hash` +//! +//! The TDX module computes `init_servtd_info_hash = SHA384(TDINFO_STRUCT +//! masked by servtd_attr)`. For production MigTDs (`servtd_attr == 0`) this +//! simplifies to `SHA384(unmasked_TDINFO)`. The TCB mapping's +//! `svnMappings[].tdMeasurements.tdinfo_hash` stores this same value, +//! enabling MAA to look up `init_servtd_info_hash` directly against +//! svnMappings without any recomputation. +//! +//! Together, the single-extend RTMR2 (with `servtdTcbMapping` redacted) and +//! the RTMR1 signer anchor break the circular dependency that previously +//! prevented `svnMappings[].tdMeasurements` from being a stable, pre-signing +//! computable function of the build inputs. + +use alloc::{string::String, vec::Vec}; +use crypto::{ + extract_leaf_eku_oid_der_from_chain_pem, hash::digest_sha384, + split_chain_pem_to_leaf_and_root_der, SHA384_DIGEST_SIZE, +}; +use serde_json::Value; + +use crate::PolicyError; + +/// Domain-separation tag for the RTMR1 signer anchor (see +/// `doc/rtmr1_signer_anchor_proposal.md`, "Anchor formula"). Bumped on any +/// breaking change. +pub const SIGNER_ANCHOR_DOMAIN_TAG: &[u8] = b"MIGTD-RTMR1-ANCHOR-V1"; + +/// Single byte separator (`0x00`) between domain tag, R, and the EKU OID. +const SIGNER_ANCHOR_SEPARATOR: u8 = 0x00; + +/// Canonical `tdinfo_hash` used in svnMappings. +/// +/// Per the TDX module specification, the SEAM module computes: +/// `init_servtd_info_hash = SHA384(TDINFO_STRUCT masked by servtd_attr)` +/// +/// For a production MigTD with `servtd_attr == 0` (no IGNORE bits), masking +/// is a no-op, so `init_servtd_info_hash = SHA384(unmasked_TDINFO)`. +/// +/// The TCB mapping's `svnMappings[].tdMeasurements.tdinfo_hash` stores this +/// same value, enabling direct lookup: MAA can compare +/// `servtd_ext.init_servtd_info_hash` against svnMappings entries without +/// any additional computation. +/// +/// Callers MUST pass the SHA384 of the unmasked, fully-populated 512-byte +/// TDINFO_STRUCT (no IGNORE-mask bits applied). +pub fn compute_tdinfo_hash( + unmasked_tdinfo_sha384: &[u8], +) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + if unmasked_tdinfo_sha384.len() != SHA384_DIGEST_SIZE { + return Err(PolicyError::InvalidParameter); + } + + let mut out = [0u8; SHA384_DIGEST_SIZE]; + out.copy_from_slice(unmasked_tdinfo_sha384); + Ok(out) +} + +// --------------------------------------------------------------------------- +// Canonicalization +// --------------------------------------------------------------------------- + +/// Emit `v` as canonical JSON bytes into `out`: +/// +/// * **Object keys are sorted alphabetically** at every nesting level. This is +/// the property the runtime / migtd-hash / verifier all rely on, and the one +/// `serde_json::to_vec(Value)` does NOT guarantee when any workspace member +/// enables `serde_json/preserve_order` (which `migtd-policy-generator`, +/// `json-signer`, and `servtd-collateral-generator` all do). +/// * **No whitespace** between tokens. +/// * **Array element order is preserved** (JSON arrays are ordered). +/// * **Scalars** (null, bool, number, string) are emitted by `serde_json` — +/// their representation does not depend on `preserve_order`. +fn canonical_value_bytes_into(v: &Value, out: &mut Vec<u8>) -> Result<(), PolicyError> { + match v { + Value::Object(map) => { + out.push(b'{'); + let mut keys: Vec<&String> = map.keys().collect(); + keys.sort(); + for (i, k) in keys.iter().enumerate() { + if i > 0 { + out.push(b','); + } + // A `Value::String` of the key serializes to a JSON-encoded + // string literal (including the surrounding quotes and any + // necessary escapes). Always safe regardless of feature flags. + let key_bytes = serde_json::to_vec(&Value::String((*k).clone())) + .map_err(|_| PolicyError::InvalidPolicy)?; + out.extend_from_slice(&key_bytes); + out.push(b':'); + canonical_value_bytes_into(map.get(*k).ok_or(PolicyError::InvalidPolicy)?, out)?; + } + out.push(b'}'); + } + Value::Array(arr) => { + out.push(b'['); + for (i, e) in arr.iter().enumerate() { + if i > 0 { + out.push(b','); + } + canonical_value_bytes_into(e, out)?; + } + out.push(b']'); + } + other => { + let scalar_bytes = serde_json::to_vec(other).map_err(|_| PolicyError::InvalidPolicy)?; + out.extend_from_slice(&scalar_bytes); + } + } + Ok(()) +} + +/// Canonical JSON bytes of `v` (sorted object keys at every level, no +/// whitespace). See [`canonical_value_bytes_into`] for details. +pub fn canonical_value_bytes(v: &Value) -> Result<Vec<u8>, PolicyError> { + let mut out = Vec::new(); + canonical_value_bytes_into(v, &mut out)?; + Ok(out) +} + +// --------------------------------------------------------------------------- +// policyData extraction (single redacted extend) +// --------------------------------------------------------------------------- + +/// Parse `policy_input` and return the `policyData` value. Accepts both: +/// * the signed-wrapper form `{"policyData": {...}, "signature": "..."}`, and +/// * a bare `policyData` object (e.g. `policy_data_raw.json` content). +fn parse_policy_data(policy_input: &[u8]) -> Result<Value, PolicyError> { + let top: Value = + serde_json::from_slice(policy_input).map_err(|_| PolicyError::InvalidPolicy)?; + + let policy_data = match top.get("policyData") { + Some(v) => v.clone(), + None => top, + }; + + if !policy_data.is_object() { + return Err(PolicyError::InvalidPolicy); + } + Ok(policy_data) +} + +/// Canonical JSON bytes of `policyData`, INCLUDING the outer `{` / `}`. +/// JSON packaging removes `servtdCollateral.servtdTcbMapping` and +/// `servtdCollateral.servtdTcbMappingIssuerChain`; CoRIM-only `policyData` +/// omits `servtdCollateral` and is measured in full. +/// +/// This is the single buffer extended into RTMR2 by the runtime and by +/// `migtd-hash` (tag `TAGGED_EVENT_ID_POLICY_DATA = 0x9`, event name +/// `MigTdPolicyData`). Redacting `servtdTcbMapping` is what breaks the circular +/// dependency between `svnMappings[].tdMeasurements.tdinfo_hash` and RTMR2: +/// every other included `policyData` field is bound by virtue of being part of +/// the canonical object bytes, so the measurement automatically protects future +/// field additions without manual whitelist maintenance. +/// +/// JSON packaging redacts two fields: +/// * `servtdCollateral.servtdTcbMapping` (**strict** — its absence is an error) +/// because the release pipeline must re-issue (re-sign) the TCB mapping with +/// updated `svnMappings[]` entries without rebuilding the IGVM image, and it +/// carries the circular `tdinfo_hash`. +/// * `servtdCollateral.servtdTcbMappingIssuerChain` (**non-strict** — removed +/// if present) because its root+EKU identity is bound by the RTMR1 signer +/// anchor; measuring the chain bytes again here would re-couple +/// TCB-mapping-signer rotation to `tdinfo_hash`. +/// +/// Every other field — `version`, `id`, `policySvn`, `policy`, `forwardPolicy`, +/// `backwardPolicy`, `collaterals`, `servtdCollateral.majorVersion`, +/// `servtdCollateral.minorVersion`, `servtdCollateral.servtdIdentity` (with its +/// signature), and `servtdCollateral.servtdIdentityIssuerChain` — is bound into +/// RTMR2. +/// +/// ## Strict redaction (schema-drift defense) +/// +/// A missing `servtdCollateral` selects the CoRIM-only form: no JSON +/// endorsement bytes need redaction, so all of `policyData` is measured. +/// When `servtdCollateral` is present, redaction is **structurally strict**: +/// it must be an object with `servtdTcbMapping` as a direct child. A malformed +/// object or missing mapping is rejected with `PolicyError::InvalidPolicy`. +/// This prevents schema drift from silently moving mapping bytes into RTMR2 +/// and re-introducing the circular dependency. +pub fn extract_canonical_policy_data_bytes(policy_input: &[u8]) -> Result<Vec<u8>, PolicyError> { + let mut policy_data = parse_policy_data(policy_input)?; + + // Redact the servtd collateral sub-fields when a `servtdCollateral` object + // is present. A CoRIM-only policy omits `servtdCollateral` entirely; there + // is then nothing to redact and the whole `policyData` is measured as-is. + match policy_data.get_mut("servtdCollateral") { + None => {} + Some(value) => { + let coll = value.as_object_mut().ok_or(PolicyError::InvalidPolicy)?; + + if coll.remove("servtdTcbMapping").is_none() { + return Err(PolicyError::InvalidPolicy); + } + + // Also redact `servtdTcbMappingIssuerChain`: its root+EKU identity + // is bound by the RTMR1 signer anchor, so measuring the chain bytes + // again would re-couple leaf/intermediate-CA rotation to + // `tdinfo_hash`. + // + // Non-strict (remove if present): the security binding does not rest + // on this redaction: `RawPolicyData::verify` separately requires the + // chain that verifies `servtdTcbMapping` to hash to the RTMR1 signer + // anchor, so a swapped/absent chain fails closed there. + coll.remove("servtdTcbMappingIssuerChain"); + } + } + + canonical_value_bytes(&policy_data) +} + +/// Compute the RTMR1 signer anchor `A` from its component digests. +/// +/// `A = SHA384(SIGNER_ANCHOR_DOMAIN_TAG || 0x00 || R || 0x00 || EKU_OID)` +/// +/// where `R = SHA384(DER(root_cert))` and `EKU_OID` is the DER-encoded, +/// dedicated signer-purpose EKU OID from the leaf certificate. +pub fn compute_signer_anchor( + root_der: &[u8], + leaf_eku_oid_der: &[u8], +) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + let r = digest_sha384(root_der).map_err(|_| PolicyError::HashCalculation)?; + + let mut buf = Vec::with_capacity( + SIGNER_ANCHOR_DOMAIN_TAG.len() + 1 + r.len() + 1 + leaf_eku_oid_der.len(), + ); + buf.extend_from_slice(SIGNER_ANCHOR_DOMAIN_TAG); + buf.push(SIGNER_ANCHOR_SEPARATOR); + buf.extend_from_slice(&r); + buf.push(SIGNER_ANCHOR_SEPARATOR); + buf.extend_from_slice(leaf_eku_oid_der); + + let digest = digest_sha384(&buf).map_err(|_| PolicyError::HashCalculation)?; + let mut out = [0u8; SHA384_DIGEST_SIZE]; + out.copy_from_slice(&digest); + Ok(out) +} + +/// Compute the RTMR1 signer anchor directly from a PEM cert chain (leaf-first). +/// +/// Convenience wrapper combining the crypto crate's chain split + leaf EKU +/// extraction with `compute_signer_anchor`. +pub fn compute_signer_anchor_from_chain_pem( + chain_pem: &[u8], +) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + let (_leaf_der, root_der) = + split_chain_pem_to_leaf_and_root_der(chain_pem).map_err(|_| PolicyError::InvalidPolicy)?; + let leaf_eku_oid = extract_leaf_eku_oid_der_from_chain_pem(chain_pem) + .map_err(|_| PolicyError::InvalidPolicy)?; + compute_signer_anchor(&root_der, &leaf_eku_oid) +} + +/// Resolve a signer anchor from either representation carried in the CFV / +/// exchanged with a peer: +/// +/// * a **precomputed 48-byte anchor** (exactly `SHA384_DIGEST_SIZE` bytes) — +/// returned as-is (the CoRIM-only enrollment form, which does not carry a +/// full PEM), or +/// * a **PEM issuer chain** (leaf-first) — the anchor is derived via +/// [`compute_signer_anchor_from_chain_pem`] (the legacy JSON form). +/// +/// This lets the runtime accept either enrollment/exchange form and bind the +/// same RTMR1 anchor. A PEM is never 48 bytes, so the discriminator is +/// unambiguous. +pub fn resolve_signer_anchor(input: &[u8]) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + if input.len() == SHA384_DIGEST_SIZE { + let mut anchor = [0u8; SHA384_DIGEST_SIZE]; + anchor.copy_from_slice(input); + Ok(anchor) + } else { + compute_signer_anchor_from_chain_pem(input) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn signer_anchor_is_stable_for_fixed_inputs() { + // Fixed test vectors so offline + runtime implementations cannot diverge. + let root = b"the-root-DER-placeholder"; + let eku_oid_der = b"\x06\x0a\x2b\x06\x01\x04\x01\x81\xfd\x59\x01\x01"; + let a = compute_signer_anchor(root, eku_oid_der).unwrap(); + // Recompute and ensure deterministic. + let a2 = compute_signer_anchor(root, eku_oid_der).unwrap(); + assert_eq!(a, a2); + + // Verify the formula explicitly. + let r = digest_sha384(root).unwrap(); + let mut buf = Vec::new(); + buf.extend_from_slice(SIGNER_ANCHOR_DOMAIN_TAG); + buf.push(0u8); + buf.extend_from_slice(&r); + buf.push(0u8); + buf.extend_from_slice(eku_oid_der); + let expected = digest_sha384(&buf).unwrap(); + assert_eq!(&a[..], expected.as_slice()); + } + + #[test] + fn signer_anchor_changes_with_root_or_eku() { + let a = compute_signer_anchor(b"root1", b"\x06\x02\x2a\x03").unwrap(); + let b = compute_signer_anchor(b"root2", b"\x06\x02\x2a\x03").unwrap(); + let c = compute_signer_anchor(b"root1", b"\x06\x02\x2a\x04").unwrap(); + assert_ne!(a, b); + assert_ne!(a, c); + assert_ne!(b, c); + } + + #[test] + fn signer_anchor_from_chain_ignores_leaf_subject_and_key() { + let a = compute_signer_anchor_from_chain_pem(include_bytes!( + "../../../crypto/test/eku/signer_a.pem" + )) + .unwrap(); + let rotated = compute_signer_anchor_from_chain_pem(include_bytes!( + "../../../crypto/test/eku/signer_b.pem" + )) + .unwrap(); + let other_purpose = compute_signer_anchor_from_chain_pem(include_bytes!( + "../../../crypto/test/eku/signer_other_eku.pem" + )) + .unwrap(); + + assert_eq!(a, rotated); + assert_ne!(a, other_purpose); + } + + #[test] + fn signer_anchor_from_chain_requires_single_dedicated_eku() { + for chain in [ + include_bytes!("../../../crypto/test/eku/signer_no_eku.pem").as_slice(), + include_bytes!("../../../crypto/test/eku/signer_multiple_eku.pem").as_slice(), + include_bytes!("../../../crypto/test/eku/signer_any_eku.pem").as_slice(), + ] { + assert!(compute_signer_anchor_from_chain_pem(chain).is_err()); + } + } + + // ------------------------------------------------------------------ + // canonical_value_bytes + // ------------------------------------------------------------------ + + #[test] + fn canonical_value_sorts_keys_at_every_level() { + let a: Value = + serde_json::from_str(r#"{"b":{"y":2,"x":1},"a":[{"c":3,"b":2,"a":1}]}"#).unwrap(); + let b: Value = + serde_json::from_str(r#"{"a":[{"a":1,"b":2,"c":3}],"b":{"x":1,"y":2}}"#).unwrap(); + let out_a = canonical_value_bytes(&a).unwrap(); + let out_b = canonical_value_bytes(&b).unwrap(); + assert_eq!(out_a, out_b); + assert_eq!(&out_a, br#"{"a":[{"a":1,"b":2,"c":3}],"b":{"x":1,"y":2}}"#); + } + + #[test] + fn canonical_value_preserves_array_order() { + let v: Value = serde_json::from_str(r#"[3,1,2]"#).unwrap(); + assert_eq!(canonical_value_bytes(&v).unwrap(), b"[3,1,2]"); + } + + #[test] + fn canonical_value_emits_no_whitespace() { + let v: Value = serde_json::from_str("{\n \"a\" : 1 ,\n \"b\" : [ 2 , 3 ]\n}").unwrap(); + assert_eq!(canonical_value_bytes(&v).unwrap(), br#"{"a":1,"b":[2,3]}"#); + } + + // ------------------------------------------------------------------ + // extract_canonical_policy_data_bytes + // ------------------------------------------------------------------ + + /// Minimal bare-policyData with every nested field the redaction scheme + /// must handle: top-level fields, plus `servtdCollateral` containing both + /// `servtdIdentity` (measured) and `servtdTcbMapping` (redacted). + fn sample_bare_policy_data() -> &'static str { + r#"{"id":"X-uuid","version":"2.0","policySvn":7,"policy":[{"global":{"tcb":{"tcbDate":{"reference":"2023","operation":"ge"}}}},{"servtd":{"x":1}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentityIssuerChain":"chain","servtdIdentity":{"tdIdentity":{"id":"identity-1","version":1,"tcbLevels":[]},"signature":"deadbeef"},"servtdTcbMappingIssuerChain":"mapping-chain","servtdTcbMapping":{"svnMappings":[{"isvsvn":1}]}}}"# + } + + fn sample_wrapped_policy() -> alloc::string::String { + format!( + r#"{{"policyData":{},"signature":"sig"}}"#, + sample_bare_policy_data() + ) + } + + #[test] + fn extract_returns_outer_braces() { + let out = + extract_canonical_policy_data_bytes(sample_bare_policy_data().as_bytes()).unwrap(); + assert_eq!(out.first(), Some(&b'{')); + assert_eq!(out.last(), Some(&b'}')); + } + + #[test] + fn extract_redacts_servtd_tcb_mapping() { + // Two policies that differ ONLY in servtdCollateral.servtdTcbMapping + // must produce identical canonical bytes (the redaction is what makes + // tcbMapping updateable post-IGVM-build). + let a = r#"{"id":"X","version":"2","policySvn":1,"policy":[],"collaterals":{},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentityIssuerChain":"c","servtdIdentity":{"tdIdentity":{"id":"i"},"signature":"aa"},"servtdTcbMappingIssuerChain":"c","servtdTcbMapping":{"svnMappings":[{"isvsvn":1}]}}}"#; + let b = r#"{"id":"X","version":"2","policySvn":1,"policy":[],"collaterals":{},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentityIssuerChain":"c","servtdIdentity":{"tdIdentity":{"id":"i"},"signature":"aa"},"servtdTcbMappingIssuerChain":"c","servtdTcbMapping":{"svnMappings":[{"isvsvn":99},{"isvsvn":100}]}}}"#; + let out_a = extract_canonical_policy_data_bytes(a.as_bytes()).unwrap(); + let out_b = extract_canonical_policy_data_bytes(b.as_bytes()).unwrap(); + assert_eq!(out_a, out_b); + // And the redacted bytes must NOT contain the substring of either + // svnMappings payload. + assert!(!out_a + .windows(b"svnMappings".len()) + .any(|w| w == b"svnMappings")); + } + + #[test] + fn extract_measures_servtd_identity() { + // The signed identity is part of RTMR2. Replaying a different identity + // or signature must therefore change the measured policy bytes. + let a = r#"{"servtdCollateral":{"servtdIdentity":{"tdIdentity":{"id":"i1"},"signature":"aa"},"servtdTcbMapping":{}}}"#; + let b = r#"{"servtdCollateral":{"servtdIdentity":{"tdIdentity":{"id":"i1"},"signature":"bb"},"servtdTcbMapping":{}}}"#; + let out_a = extract_canonical_policy_data_bytes(a.as_bytes()).unwrap(); + let out_b = extract_canonical_policy_data_bytes(b.as_bytes()).unwrap(); + assert_ne!(out_a, out_b); + assert!(out_a + .windows(b"servtdIdentity".len()) + .any(|w| w == b"servtdIdentity")); + } + + #[test] + fn extract_measures_identity_chain_but_redacts_mapping_chain() { + // The identity chain is part of RTMR2, while the mapping chain is + // redacted and bound through the RTMR1 signer anchor. + let base = r#"{"servtdCollateral":{"servtdIdentityIssuerChain":"chain-A","servtdTcbMappingIssuerChain":"chain-A","servtdTcbMapping":{}}}"#; + let diff_identity = r#"{"servtdCollateral":{"servtdIdentityIssuerChain":"chain-B","servtdTcbMappingIssuerChain":"chain-A","servtdTcbMapping":{}}}"#; + let diff_mapping = r#"{"servtdCollateral":{"servtdIdentityIssuerChain":"chain-A","servtdTcbMappingIssuerChain":"chain-B","servtdTcbMapping":{}}}"#; + let out_base = extract_canonical_policy_data_bytes(base.as_bytes()).unwrap(); + let out_diff_identity = + extract_canonical_policy_data_bytes(diff_identity.as_bytes()).unwrap(); + let out_diff_mapping = + extract_canonical_policy_data_bytes(diff_mapping.as_bytes()).unwrap(); + assert_ne!(out_base, out_diff_identity); + assert_eq!(out_base, out_diff_mapping); + } + + #[test] + fn extract_redacts_servtd_tcb_mapping_issuer_chain() { + // Two policies that differ ONLY in + // servtdCollateral.servtdTcbMappingIssuerChain must produce identical + // canonical bytes (the chain is anchored by RTMR1, not RTMR2). This is + // what makes TCB-mapping-signer key/intermediate rotation + // tdinfo_hash-stable. + let a = r#"{"servtdCollateral":{"servtdTcbMappingIssuerChain":"old-leaf-chain","servtdTcbMapping":{}}}"#; + let b = r#"{"servtdCollateral":{"servtdTcbMappingIssuerChain":"rotated-leaf-chain","servtdTcbMapping":{}}}"#; + let out_a = extract_canonical_policy_data_bytes(a.as_bytes()).unwrap(); + let out_b = extract_canonical_policy_data_bytes(b.as_bytes()).unwrap(); + assert_eq!(out_a, out_b); + } + + #[test] + fn extract_accepts_signed_wrapper_and_matches_bare() { + // Extracting from `{"policyData": {...}, "signature": "..."}` must + // produce identical bytes to extracting from the bare object form. + let bare = sample_bare_policy_data(); + let wrapped = sample_wrapped_policy(); + let out_bare = extract_canonical_policy_data_bytes(bare.as_bytes()).unwrap(); + let out_wrapped = extract_canonical_policy_data_bytes(wrapped.as_bytes()).unwrap(); + assert_eq!(out_bare, out_wrapped); + } + + #[test] + fn extract_is_canonical_across_key_order() { + // The same policy serialised with different key orders must produce + // identical bytes after redaction + canonicalization. + let order_a = r#"{"version":"2.0","id":"X","policySvn":7,"policy":[{"b":2,"a":1}],"collaterals":{"teeType":129,"majorVersion":1,"minorVersion":0},"servtdCollateral":{"servtdIdentity":{"tdIdentity":{"version":1,"id":"i"},"signature":"aa"},"servtdTcbMapping":{"x":1}}}"#; + let order_b = r#"{"policy":[{"a":1,"b":2}],"id":"X","policySvn":7,"version":"2.0","servtdCollateral":{"servtdTcbMapping":{"x":1},"servtdIdentity":{"signature":"aa","tdIdentity":{"id":"i","version":1}}},"collaterals":{"minorVersion":0,"majorVersion":1,"teeType":129}}"#; + let out_a = extract_canonical_policy_data_bytes(order_a.as_bytes()).unwrap(); + let out_b = extract_canonical_policy_data_bytes(order_b.as_bytes()).unwrap(); + assert_eq!(out_a, out_b); + } + + #[test] + fn extract_rejects_non_object_top_level() { + assert!(extract_canonical_policy_data_bytes(b"\"just-a-string\"").is_err()); + assert!(extract_canonical_policy_data_bytes(b"[]").is_err()); + assert!(extract_canonical_policy_data_bytes(b"null").is_err()); + assert!(extract_canonical_policy_data_bytes(b"42").is_err()); + } + + #[test] + fn extract_rejects_malformed_json() { + assert!(extract_canonical_policy_data_bytes(b"{not-json").is_err()); + } + + #[test] + fn extract_allows_missing_servtd_collateral() { + // CoRIM-only policies omit `servtdCollateral` entirely: there is nothing + // to redact, so the whole `policyData` is measured as-is (Ok). The + // servtd endorsement is delivered as a separately-enrolled CoRIM. + let input = br#"{"version":"2.0","id":"X","policySvn":1,"policy":[],"collaterals":{}}"#; + assert!(extract_canonical_policy_data_bytes(input).is_ok()); + } + + #[test] + fn extract_measures_top_level_servtd_crl() { + let empty = br#"{"version":"2.0","id":"X","servtdCrl":"empty"}"#; + let revoked = br#"{"version":"2.0","id":"X","servtdCrl":"revoked"}"#; + let out_empty = extract_canonical_policy_data_bytes(empty).unwrap(); + let out_revoked = extract_canonical_policy_data_bytes(revoked).unwrap(); + assert_ne!(out_empty, out_revoked); + } + + #[test] + fn extract_rejects_non_object_servtd_collateral() { + // Schema-drift defense: type-confused servtdCollateral (null, + // string, array, number) MUST be rejected, not silently + // no-op'd. The current strongly-typed PolicyData rejects these + // upstream; the redaction layer enforces the same invariant + // even when called in isolation (e.g. from migtd-hash with raw + // input) so the runtime extender never sees an un-redacted + // policy. + for shape in [ + br#"{"servtdCollateral":null}"#.as_slice(), + br#"{"servtdCollateral":"a-string"}"#.as_slice(), + br#"{"servtdCollateral":[]}"#.as_slice(), + br#"{"servtdCollateral":42}"#.as_slice(), + ] { + assert!( + extract_canonical_policy_data_bytes(shape).is_err(), + "expected error for shape: {:?}", + core::str::from_utf8(shape).unwrap() + ); + } + } + + #[test] + fn extract_rejects_servtd_collateral_without_tcb_mapping() { + // Schema-drift defense: servtdCollateral present but missing + // servtdTcbMapping MUST be rejected. If servtdTcbMapping ever + // moves elsewhere (e.g. hoisted to a top-level peer of + // policyData, or nested under a new release-scoped wrapper), + // the hard-coded path in the redaction would redact the + // (now-empty) old location only and silently land the mapping + // bytes elsewhere in the canonical extend. Failing closed on + // missing servtdTcbMapping forces an explicit code update on + // every such schema migration. + let input = br#"{"servtdCollateral":{"a":1}}"#; + assert!(extract_canonical_policy_data_bytes(input).is_err()); + + let input2 = br#"{"servtdCollateral":{"majorVersion":1,"servtdIdentity":{"tdIdentity":{"id":"i"},"signature":"aa"}}}"#; + assert!(extract_canonical_policy_data_bytes(input2).is_err()); + } + + #[test] + fn extract_empty_tcb_mapping_object_is_equivalent_to_post_redaction() { + // T13 regression pin: the release pipeline's pre-final policy + // template carries `"servtdTcbMapping": {}` so the strict + // redaction in extract_canonical_policy_data_bytes accepts it + // (an empty object satisfies the present-and-then-removed + // contract). Under canonical redaction the result MUST be + // byte-equal to a final policy whose `servtdTcbMapping` + // contains the real signed mapping, because the redacted + // bytes contain neither either way. The end-to-end check in + // build_mock_quote_igvm.sh proves this invariant on an enrolled + // IGVM; this unit test pins it at the helper boundary so the + // release check cannot diverge from the helper. + let pre_final = r#"{"servtdCollateral":{"majorVersion":1,"servtdIdentity":{"tdIdentity":{"id":"i"},"signature":"aa"},"servtdTcbMapping":{}}}"#; + let final_pol = r#"{"servtdCollateral":{"majorVersion":1,"servtdIdentity":{"tdIdentity":{"id":"i"},"signature":"aa"},"servtdTcbMapping":{"svnMappings":[{"isvsvn":7,"tdMeasurements":{"tdinfo_hash":"deadbeef"}}],"signature":"bb"}}}"#; + let out_pre = extract_canonical_policy_data_bytes(pre_final.as_bytes()).unwrap(); + let out_final = extract_canonical_policy_data_bytes(final_pol.as_bytes()).unwrap(); + assert_eq!(out_pre, out_final); + } + + #[test] + fn extract_measures_forward_and_backward_policy() { + // Stripping forwardPolicy / backwardPolicy from a policy that has + // them MUST change the extend bytes — otherwise an attacker who can + // ship policy through ESRP could strip migration restrictions + // without changing the measured RTMR2. + let with_fwd_bwd = r#"{"policy":[],"forwardPolicy":[{"deny":"all"}],"backwardPolicy":[{"deny":"all"}],"servtdCollateral":{"servtdTcbMapping":{}}}"#; + let without = r#"{"policy":[],"servtdCollateral":{"servtdTcbMapping":{}}}"#; + let out_with = extract_canonical_policy_data_bytes(with_fwd_bwd.as_bytes()).unwrap(); + let out_without = extract_canonical_policy_data_bytes(without.as_bytes()).unwrap(); + assert_ne!(out_with, out_without); + } + + #[test] + fn extract_sample_policy_canonical_bytes() { + // Pin the canonical bytes for the sample policy as a regression + // fixture: any unintended change to canonicalization (key order, + // whitespace, redaction scope) will fail this assertion. + let out = + extract_canonical_policy_data_bytes(sample_bare_policy_data().as_bytes()).unwrap(); + let expected = br#"{"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129},"id":"X-uuid","policy":[{"global":{"tcb":{"tcbDate":{"operation":"ge","reference":"2023"}}}},{"servtd":{"x":1}}],"policySvn":7,"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentity":{"signature":"deadbeef","tdIdentity":{"id":"identity-1","tcbLevels":[],"version":1}},"servtdIdentityIssuerChain":"chain"},"version":"2.0"}"#; + assert_eq!(&out, expected); + } + + // ------------------------------------------------------------------ + // Schema-drift defense (fix for scenario 10) + // + // These tests are NOT about the current schema shape — they exist to + // catch a future schema change that introduces a new placement of + // `servtdTcbMapping` without updating the redaction logic. + // ------------------------------------------------------------------ + + /// Recursively count the number of object keys named `target` in `v` + /// and record the dotted path of each occurrence. + fn collect_key_paths( + v: &Value, + target: &str, + current: &mut alloc::string::String, + out: &mut Vec<alloc::string::String>, + ) { + match v { + Value::Object(map) => { + for (k, child) in map.iter() { + let prev_len = current.len(); + if !current.is_empty() { + current.push('.'); + } + current.push_str(k); + if k == target { + out.push(current.clone()); + } + collect_key_paths(child, target, current, out); + current.truncate(prev_len); + } + } + Value::Array(arr) => { + for (i, e) in arr.iter().enumerate() { + let prev_len = current.len(); + current.push_str(&format!("[{}]", i)); + collect_key_paths(e, target, current, out); + current.truncate(prev_len); + } + } + _ => {} + } + } + + #[test] + fn extract_input_has_servtd_tcb_mapping_only_at_expected_path() { + // Defense against (2) in the scenario-10 fix recommendation: + // if a future schema places `servtdTcbMapping` anywhere other + // than the single expected path `servtdCollateral.servtdTcbMapping` + // (e.g. nested under a release-scoped wrapper, or hoisted to a + // top-level peer of policyData), this test fails and forces an + // explicit code update to the redaction helper. + // + // Note: this asserts the property of the SAMPLE INPUT used by the + // test suite, not arbitrary inputs. Combined with + // `extract_canonical_bytes_do_not_contain_field_name` below, it + // pins both the schema fixture and the redaction completeness. + let v: Value = serde_json::from_str(sample_bare_policy_data()).unwrap(); + let mut paths = Vec::new(); + let mut cur = alloc::string::String::new(); + collect_key_paths(&v, "servtdTcbMapping", &mut cur, &mut paths); + assert_eq!( + paths.len(), + 1, + "servtdTcbMapping must appear exactly once in the sample; found at: {:?}", + paths + ); + assert_eq!(paths[0], "servtdCollateral.servtdTcbMapping"); + } + + #[test] + fn extract_canonical_bytes_do_not_contain_field_name() { + // Defense against schema drift / regression in the redaction + // helper: the literal substring `"servtdTcbMapping"` (the JSON + // key wrapped in quotes) MUST NOT appear anywhere in the + // canonical extend bytes. A regression that forgets to redact, + // or a refactor that adds a new wrapper containing the same + // key, would cause this assertion to fail. + // + // This complements `extract_redacts_servtd_tcb_mapping` (which + // pins the byte equivalence of two policies that differ only in + // mapping content) by adding a direct lexical check of the + // output. The two tests catch different failure modes: byte + // equivalence catches an additive leak via shared bytes, + // substring absence catches the field surviving anywhere in the + // output JSON. + let out = + extract_canonical_policy_data_bytes(sample_bare_policy_data().as_bytes()).unwrap(); + let needle = b"\"servtdTcbMapping\""; + assert!( + !out.windows(needle.len()).any(|w| w == needle), + "canonical output contained redacted field name: {}", + core::str::from_utf8(&out).unwrap_or("<non-utf8>") + ); + // Also check the inner key as a defense-in-depth measure. + let inner_needle = b"\"svnMappings\""; + assert!( + !out.windows(inner_needle.len()).any(|w| w == inner_needle), + "canonical output contained inner mapping key: {}", + core::str::from_utf8(&out).unwrap_or("<non-utf8>") + ); + // The TCB-mapping issuer chain is redacted too (measured into RTMR1), + // so its field name MUST NOT survive in the RTMR2 extend bytes. + let chain_needle = b"\"servtdTcbMappingIssuerChain\""; + assert!( + !out.windows(chain_needle.len()).any(|w| w == chain_needle), + "canonical output contained redacted issuer-chain field name: {}", + core::str::from_utf8(&out).unwrap_or("<non-utf8>") + ); + } + + // ------------------------------------------------------------------ + // tdinfo_hash (carried over unchanged) + // ------------------------------------------------------------------ + + #[test] + fn compute_tdinfo_hash_is_identity_passthrough() { + let inner = [0xAAu8; SHA384_DIGEST_SIZE]; + let got = compute_tdinfo_hash(&inner).unwrap(); + // compute_tdinfo_hash is now identity: the caller passes in + // SHA384(TDINFO) and the function returns it unchanged. + assert_eq!(&got[..], &inner[..]); + } + + #[test] + fn compute_tdinfo_hash_rejects_wrong_length() { + assert!(compute_tdinfo_hash(b"too-short").is_err()); + assert!(compute_tdinfo_hash(&[0u8; SHA384_DIGEST_SIZE + 1]).is_err()); + } +} diff --git a/src/policy/src/v2/mod.rs b/src/policy/src/v2/mod.rs index e553abbaa..a4bc255e7 100644 --- a/src/policy/src/v2/mod.rs +++ b/src/policy/src/v2/mod.rs @@ -11,6 +11,12 @@ mod collaterals; pub use collaterals::*; mod policy; pub use policy::*; +pub mod measurement; +pub use measurement::*; +#[cfg(feature = "servtd_corim")] +mod servtd_corim; +#[cfg(feature = "servtd_corim")] +pub use servtd_corim::*; impl<'a> Report<'a> { pub fn new(report: &'a [u8]) -> Result<Self, PolicyError> { diff --git a/src/policy/src/v2/policy.rs b/src/policy/src/v2/policy.rs index 096ccbff3..c0c73ae9b 100644 --- a/src/policy/src/v2/policy.rs +++ b/src/policy/src/v2/policy.rs @@ -12,127 +12,153 @@ use serde::{Deserialize, Serialize}; use serde_json::{self, value::RawValue}; use crate::{ - v2::{bytes_to_hex_string, hex_string_to_bytes, policy, verify_event_hash}, - CcEvent, Collaterals, EventName, PolicyError, ServtdCollateral, TdIdentity, TdTcbMapping, + v2::{ + bytes_to_hex_string, compute_signer_anchor_from_chain_pem, + measurement::extract_canonical_policy_data_bytes, policy, resolve_signer_anchor, + verify_event_hash, + }, + CcEvent, Collaterals, EventName, PolicyError, Report, ServtdCollateral, TdIdentity, + TdTcbMapping, }; +use crypto::SHA384_DIGEST_SIZE; + +#[cfg(feature = "servtd_corim")] +use crate::v2::ServtdCorim; + +/// Result of a successful servtd lookup: the MigTD's ISV SVN, and — when the +/// optional TD Identity is present — the TCB level (`tcb_date`, `tcb_status`) +/// recorded for that SVN. +/// +/// Produced by [`VerifiedPolicy::servtd_lookup_by_tdinfo_hash`] from either +/// the JSON collateral (one-hash `TdTcbMapping`, plus optional `TdIdentity`) +/// or, when attached, the CoRIM hash endorsement (`servtd_corim` feature). +/// Both resolve a `tdinfo_hash` to the endorsed `isvsvn`. `tcb_date` / +/// `tcb_status` are populated only from the optional JSON TD Identity; the +/// CoRIM path leaves them `None`. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ServtdLookup { + pub isvsvn: u16, + pub tcb_date: Option<String>, + pub tcb_status: Option<String>, +} #[derive(Clone, Copy, Debug)] -pub enum TcbStatus { +pub enum ServtdTcbStatus { UpToDate, - SWHardeningNeeded, - ConfigurationNeeded, - ConfigurationAndSWHardeningNeeded, OutOfDate, - OutOfDateConfigurationNeeded, Revoked, } -impl TcbStatus { +impl ServtdTcbStatus { pub fn as_str(&self) -> &str { match self { - TcbStatus::UpToDate => "UpToDate", - TcbStatus::SWHardeningNeeded => "SWHardeningNeeded", - TcbStatus::ConfigurationNeeded => "ConfigurationNeeded", - TcbStatus::ConfigurationAndSWHardeningNeeded => "ConfigurationAndSWHardeningNeeded", - TcbStatus::OutOfDate => "OutOfDate", - TcbStatus::OutOfDateConfigurationNeeded => "OutOfDateConfigurationNeeded", - TcbStatus::Revoked => "Revoked", + ServtdTcbStatus::UpToDate => "UpToDate", + ServtdTcbStatus::OutOfDate => "OutOfDate", + ServtdTcbStatus::Revoked => "Revoked", } } - // "UpToDate" == "SWHardeningNeeded" == "OutOfDate" >= "ConfigurationNeeded" == - // "ConfigurationAndSWHardeningNeeded" == "OutOfDateConfigurationNeeded” > "Revoked" + // "UpToDate" == "OutOfDate" > "Revoked" fn rank(&self) -> u8 { match self { - TcbStatus::UpToDate | TcbStatus::SWHardeningNeeded | TcbStatus::OutOfDate => 2, - TcbStatus::ConfigurationNeeded - | TcbStatus::ConfigurationAndSWHardeningNeeded - | TcbStatus::OutOfDateConfigurationNeeded => 1, - TcbStatus::Revoked => 0, + ServtdTcbStatus::UpToDate | ServtdTcbStatus::OutOfDate => 2, + ServtdTcbStatus::Revoked => 0, } } } -impl TryFrom<&str> for TcbStatus { +impl TryFrom<&str> for ServtdTcbStatus { type Error = PolicyError; fn try_from(value: &str) -> Result<Self, Self::Error> { match value { - "UpToDate" => Ok(TcbStatus::UpToDate), - "SWHardeningNeeded" => Ok(TcbStatus::SWHardeningNeeded), - "ConfigurationNeeded" => Ok(TcbStatus::ConfigurationNeeded), - "ConfigurationAndSWHardeningNeeded" => Ok(TcbStatus::ConfigurationAndSWHardeningNeeded), - "OutOfDate" => Ok(TcbStatus::OutOfDate), - "OutOfDateConfigurationNeeded" => Ok(TcbStatus::OutOfDateConfigurationNeeded), - "Revoked" => Ok(TcbStatus::Revoked), + "UpToDate" => Ok(ServtdTcbStatus::UpToDate), + "OutOfDate" => Ok(ServtdTcbStatus::OutOfDate), + "Revoked" => Ok(ServtdTcbStatus::Revoked), _ => Err(PolicyError::InvalidParameter), } } } -impl PartialOrd for TcbStatus { +impl PartialOrd for ServtdTcbStatus { fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(self.rank().cmp(&other.rank())) } } -impl PartialEq for TcbStatus { +impl PartialEq for ServtdTcbStatus { fn eq(&self, other: &Self) -> bool { self.rank() == other.rank() } } -impl Eq for TcbStatus {} +impl Eq for ServtdTcbStatus {} #[derive(Clone, Copy, Debug)] -pub enum ServtdTcbStatus { +pub enum TcbStatus { UpToDate, + SWHardeningNeeded, + ConfigurationNeeded, + ConfigurationAndSWHardeningNeeded, OutOfDate, + OutOfDateConfigurationNeeded, Revoked, } -impl ServtdTcbStatus { +impl TcbStatus { pub fn as_str(&self) -> &str { match self { - ServtdTcbStatus::UpToDate => "UpToDate", - ServtdTcbStatus::OutOfDate => "OutOfDate", - ServtdTcbStatus::Revoked => "Revoked", + TcbStatus::UpToDate => "UpToDate", + TcbStatus::SWHardeningNeeded => "SWHardeningNeeded", + TcbStatus::ConfigurationNeeded => "ConfigurationNeeded", + TcbStatus::ConfigurationAndSWHardeningNeeded => "ConfigurationAndSWHardeningNeeded", + TcbStatus::OutOfDate => "OutOfDate", + TcbStatus::OutOfDateConfigurationNeeded => "OutOfDateConfigurationNeeded", + TcbStatus::Revoked => "Revoked", } } - // "UpToDate" == "OutOfDate" > "Revoked" + // "UpToDate" == "SWHardeningNeeded" == "OutOfDate" >= "ConfigurationNeeded" == + // "ConfigurationAndSWHardeningNeeded" == "OutOfDateConfigurationNeeded” > "Revoked" fn rank(&self) -> u8 { match self { - ServtdTcbStatus::UpToDate | ServtdTcbStatus::OutOfDate => 2, - ServtdTcbStatus::Revoked => 0, + TcbStatus::UpToDate | TcbStatus::SWHardeningNeeded | TcbStatus::OutOfDate => 2, + TcbStatus::ConfigurationNeeded + | TcbStatus::ConfigurationAndSWHardeningNeeded + | TcbStatus::OutOfDateConfigurationNeeded => 1, + TcbStatus::Revoked => 0, } } } -impl TryFrom<&str> for ServtdTcbStatus { +impl TryFrom<&str> for TcbStatus { type Error = PolicyError; fn try_from(value: &str) -> Result<Self, Self::Error> { match value { - "UpToDate" => Ok(ServtdTcbStatus::UpToDate), - "OutOfDate" => Ok(ServtdTcbStatus::OutOfDate), - "Revoked" => Ok(ServtdTcbStatus::Revoked), + "UpToDate" => Ok(TcbStatus::UpToDate), + "SWHardeningNeeded" => Ok(TcbStatus::SWHardeningNeeded), + "ConfigurationNeeded" => Ok(TcbStatus::ConfigurationNeeded), + "ConfigurationAndSWHardeningNeeded" => Ok(TcbStatus::ConfigurationAndSWHardeningNeeded), + "OutOfDate" => Ok(TcbStatus::OutOfDate), + "OutOfDateConfigurationNeeded" => Ok(TcbStatus::OutOfDateConfigurationNeeded), + "Revoked" => Ok(TcbStatus::Revoked), _ => Err(PolicyError::InvalidParameter), } } } -impl PartialOrd for ServtdTcbStatus { +impl PartialOrd for TcbStatus { fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(self.rank().cmp(&other.rank())) } } -impl PartialEq for ServtdTcbStatus { +impl PartialEq for TcbStatus { fn eq(&self, other: &Self) -> bool { self.rank() == other.rank() } } -impl Eq for ServtdTcbStatus {} +impl Eq for TcbStatus {} /// Contains all required data to be evaluated against a rebinding policy #[derive(Debug, Clone, Default)] @@ -155,10 +181,11 @@ pub struct PolicyEvaluationInfo { /// The isvsvn of the MigTD TCB pub migtd_isvsvn: Option<u16>, - /// The status of the MigTD TCB + /// The status of the MigTD TCB (from the optional TD Identity) pub migtd_tcb_status: Option<String>, - /// The date of the MigTD TCB in ISO-8601 format, e.g. "2023-06-19T00:00:00Z" + /// The date of the MigTD TCB in ISO-8601 format (from the optional TD + /// Identity), e.g. "2023-06-19T00:00:00Z" pub migtd_tcb_date: Option<String>, /// The minimal crl_num of pck_crl @@ -166,19 +193,53 @@ pub struct PolicyEvaluationInfo { /// The minimal crl_num of root_ca_crl pub root_ca_crl_num: Option<u32>, + + /// The CRL number of the servtd signer CRL (`servtdCrl`), used + /// for monotonic anti-rollback of the signer revocation list. See + /// `doc/rtmr1_signer_anchor_proposal.md`, "servTD signer CRL". + pub servtd_crl_num: Option<u32>, } pub struct VerifiedPolicy<'a> { pub policy_data: policy::PolicyData<'a>, - pub servtd_identity: TdIdentity, - pub servtd_identity_issuer_chain: String, - pub servtd_tcb_mapping: TdTcbMapping, - pub servtd_tcb_mapping_issuer_chain: String, - /// The policy signing certificate chain (PEM) used to verify this policy. - pub policy_issuer_chain: String, + /// Verified one-hash TCB mapping from the JSON `servtdCollateral`. `None` + /// for a CoRIM-only policy (no `servtdCollateral`); lookups then resolve + /// through the attached CoRIM (fail-closed if none is attached). + pub servtd_tcb_mapping: Option<TdTcbMapping>, + /// Issuer chain (PEM) for the JSON mapping signer. `None` when the JSON + /// `servtdCollateral` is absent (CoRIM-only). + pub servtd_tcb_mapping_issuer_chain: Option<String>, + /// Optional MigTD TD Identity (`isvsvn -> (tcb_date, tcb_status)`), present + /// only when the JSON collateral ships a `servtdIdentity`. When absent, + /// policy is driven by the ISV SVN alone. + pub servtd_identity: Option<TdIdentity>, + /// Optional TD Identity issuer chain (PEM), present iff `servtd_identity` + /// is. Retained so the runtime can cross-check a peer's identity chain. + pub servtd_identity_issuer_chain: Option<String>, + /// Optional PEM CRL for the servTD signer chain, from + /// top-level `servtdCrl` or the legacy + /// `servtdCollateral.servtdCrl`. Retained so the runtime can cross-check a + /// peer's signer chain against the local trusted CRL. The top-level form + /// allows CoRIM-only policies to carry revocation state without restoring + /// JSON TCB-mapping enrollment. + pub servtd_crl: Option<String>, + /// The RTMR1 signer anchor `A = SHA384(tag ‖ H(rootDER) ‖ leafEkuOidDER)` + /// (hash of the root cert plus the leaf's dedicated signer-purpose EKU OID + /// DER) this policy was bound to (resolved from the CFV signer-anchor slot + /// or a PEM issuer chain). Used for the anchor-based peer cross-check. + pub signer_anchor: [u8; SHA384_DIGEST_SIZE], + /// Optional CoRIM-encoded servtd collateral. When attached it is the sole + /// authority for servtd lookups (fail-closed: a CoRIM miss is a miss, + /// with no fallback to the legacy JSON collateral). Only available with + /// the `servtd_corim` feature. + /// + /// For a peer policy, this must be the peer's authenticated CoRIM. + /// Using the local mapping breaks migration between independent releases. + #[cfg(feature = "servtd_corim")] + servtd_corim: Option<ServtdCorim>, } -impl VerifiedPolicy<'_> { +impl<'a> VerifiedPolicy<'a> { pub fn get_collaterals(&self) -> &Collaterals { &self.policy_data.collaterals } @@ -186,13 +247,130 @@ impl VerifiedPolicy<'_> { pub fn get_version(&self) -> &str { &self.policy_data.version } + + /// Whether servtd lookups use a JSON TD Identity that must provide status. + pub fn requires_servtd_tcb_status(&self) -> bool { + #[cfg(feature = "servtd_corim")] + if self.servtd_corim.is_some() { + return false; + } + self.servtd_identity.is_some() + } + + /// Attach decoded CoRIM servtd collateral. Once set, **all** servtd + /// lookups resolve against the CoRIM and the legacy JSON collateral is no + /// longer consulted. + /// + /// Callers attaching a CoRIM to a *peer's* `VerifiedPolicy` MUST have + /// already verified `corim`'s COSE signature/x5chain against that same + /// peer's own resolved `signer_anchor` (see `ServtdCorim::decode_signed`). + /// Never attach a locally-sourced CoRIM to a peer's policy. + #[cfg(feature = "servtd_corim")] + pub fn set_servtd_corim(&mut self, corim: ServtdCorim) { + self.servtd_corim = Some(corim); + } + + /// Verify and attach the peer's signed TCB-mapping CoRIM using its signer + /// anchor. Current and initial peer hash lookups then use this mapping. + /// Callers must still apply the local authoritative servTD CRL. + #[cfg(feature = "servtd_corim")] + pub fn attach_verified_peer_servtd_corim( + &mut self, + peer_servtd_corim_cose: &[u8], + ) -> Result<(), PolicyError> { + let corim = ServtdCorim::decode_signed(peer_servtd_corim_cose, 0, &self.signer_anchor)?; + self.servtd_corim = Some(corim); + Ok(()) + } + + /// Check every retained servTD signer chain against an authoritative CRL. + /// + /// For local initialization, `authoritative_crl` is the CRL measured in + /// this policy. For peer authentication, callers must pass the local + /// policy's CRL rather than the peer's delivered CRL. + pub fn verify_signer_chains_not_revoked( + &self, + authoritative_crl: &[u8], + ) -> Result<(), PolicyError> { + if let Some(mapping_chain) = self.servtd_tcb_mapping_issuer_chain.as_deref() { + crypto::verify_signer_chain_not_revoked( + crypto::SignerChain::Pem(mapping_chain.as_bytes()), + authoritative_crl, + ) + .map_err(|_| PolicyError::SignerRevoked)?; + } + if let Some(identity_chain) = self.servtd_identity_issuer_chain.as_deref() { + crypto::verify_signer_chain_not_revoked( + crypto::SignerChain::Pem(identity_chain.as_bytes()), + authoritative_crl, + ) + .map_err(|_| PolicyError::SignerRevoked)?; + } + #[cfg(feature = "servtd_corim")] + if let Some(corim) = self.servtd_corim.as_ref() { + corim.verify_signer_chain_not_revoked(authoritative_crl)?; + } + Ok(()) + } + + /// Resolve the MigTD ISV SVN (and, when the optional TD Identity is + /// present, its `tcb_date` / `tcb_status`) from a 48-byte `tdinfo_hash` + /// (= `init/cur_servtd_info_hash`). + /// + /// When the `servtd_corim` feature is enabled and a CoRIM is attached, it + /// is the sole authority (**fail-closed**: a CoRIM miss returns `None`, + /// the JSON collateral is not consulted) and returns SVN only (no TD + /// Identity date/status). Otherwise the lookup uses the JSON collateral's + /// `TdTcbMapping::get_engine_svn_by_tdinfo_hash`, then \u2014 if a `TdIdentity` + /// is present \u2014 `TdIdentity::get_tcb_level_by_svn` for the date/status. + pub fn servtd_lookup_by_tdinfo_hash(&self, tdinfo_hash: &[u8]) -> Option<ServtdLookup> { + #[cfg(feature = "servtd_corim")] + if let Some(corim) = &self.servtd_corim { + return corim.lookup_by_tdinfo_hash(tdinfo_hash); + } + // JSON path — hash -> SVN via the one-hash TCB mapping, then optional + // SVN -> (date, status) via the TD Identity when it is shipped. + let isvsvn = self + .servtd_tcb_mapping + .as_ref()? + .get_engine_svn_by_tdinfo_hash(tdinfo_hash)?; + let (tcb_date, tcb_status) = match &self.servtd_identity { + Some(identity) => { + let level = identity.get_tcb_level_by_svn(isvsvn)?; + (Some(level.tcb_date.clone()), Some(level.tcb_status.clone())) + } + None => (None, None), + }; + Some(ServtdLookup { + isvsvn, + tcb_date, + tcb_status, + }) + } + + /// Convenience: compute the `tdinfo_hash` from a verified `Report` and + /// resolve through [`servtd_lookup_by_tdinfo_hash`]. + /// + /// [`servtd_lookup_by_tdinfo_hash`]: VerifiedPolicy::servtd_lookup_by_tdinfo_hash + pub fn servtd_lookup_by_report(&self, report: &Report) -> Option<ServtdLookup> { + let hash = crate::v2::compute_tdinfo_hash_from_report(report).ok()?; + self.servtd_lookup_by_tdinfo_hash(&hash) + } } pub fn check_policy_integrity( policy: &[u8], events: &BTreeMap<EventName, CcEvent>, ) -> Result<(), PolicyError> { - if !verify_event_hash(events, &EventName::MigTdPolicy, policy)? { + // RTMR2 is extended once with canonical `policyData`. JSON collateral + // redacts the TCB mapping and mapping issuer chain; CoRIM-only policyData + // has no `servtdCollateral` and is measured in full. See + // `doc/tcb_mapping_design_proposal.md` for the rationale. The verifier + // recomputes those exact bytes via the same helper used by the runtime + // extender (`get_policy_and_measure`) and `migtd-hash` (offline RTMR2 + // simulator), then asserts the event-log entry's recorded digest matches. + let policy_data_bytes = extract_canonical_policy_data_bytes(policy)?; + if !verify_event_hash(events, &EventName::MigTdPolicyData, &policy_data_bytes)? { return Err(PolicyError::PolicyHashMismatch); } @@ -204,7 +382,16 @@ pub fn check_policy_integrity( pub struct RawPolicyData<'a> { #[serde(borrow)] pub policy_data: &'a RawValue, - pub signature: String, + /// Legacy outer policy-blob signature. + /// + /// The outer signature has been **removed** from the trust model (per + /// `doc/tcb_mapping_design_proposal.md`): `policyData` integrity is now + /// established solely by the RTMR2 measurement (`check_policy_integrity`), + /// not by an outer signature. This field is retained as an optional, + /// **ignored** value only so that pre-existing signed policy blobs still + /// deserialize. New policies omit it. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub signature: Option<String>, } impl<'a> RawPolicyData<'a> { @@ -218,59 +405,150 @@ impl<'a> RawPolicyData<'a> { Ok(policy_data.collaterals) } - /// Verify the policy signature and servtd collateral using the given issuer chain. + /// Verify the servtd collateral using the given (RTMR1-anchored) issuer + /// chain. + /// + /// The outer policy-blob signature has been **removed** from the trust + /// model: `policyData` integrity is established by the RTMR2 measurement + /// (`check_policy_integrity`), so this function no longer verifies an outer + /// signature. It parses `policyData` directly and verifies the inner servtd + /// collateral signatures against their embedded issuer chains. pub fn verify(&self, issuer_chain: &[u8]) -> Result<VerifiedPolicy<'a>, PolicyError> { - let policy_issuer_chain = core::str::from_utf8(issuer_chain) - .map_err(|_| PolicyError::InvalidPolicy)? - .to_string(); - - // Step 1: Verify signature over raw policy data - let policy_data = self.verify_policy_data_signature(issuer_chain)?; - - // Step 2: Verify servtd collateral signatures using their own embedded chains - let servtd_collateral = &policy_data.servtd_collateral; - let servtd_identity = servtd_collateral - .servtd_identity - .verify_signature(servtd_collateral.servtd_identity_issuer_chain.as_bytes())?; - let servtd_tcb_mapping = servtd_collateral - .servtd_tcb_mapping - .verify_signature(servtd_collateral.servtd_tcb_mapping_issuer_chain.as_bytes())?; + let verified_policy = self.verify_signatures_and_anchors(issuer_chain)?; + if let Some(servtd_crl) = verified_policy.servtd_crl.as_deref() { + verified_policy.verify_signer_chains_not_revoked(servtd_crl.as_bytes())?; + } + Ok(verified_policy) + } + + /// Verify a peer policy while applying only the caller-provided, + /// locally-authoritative servTD CRL to its signer chains. The peer's own + /// delivered CRL remains part of its measured policy data but is not + /// trusted for revocation decisions. + pub fn verify_with_authoritative_servtd_crl( + &self, + issuer_chain: &[u8], + authoritative_crl: Option<&[u8]>, + ) -> Result<VerifiedPolicy<'a>, PolicyError> { + let verified_policy = self.verify_signatures_and_anchors(issuer_chain)?; + if let Some(servtd_crl) = authoritative_crl { + verified_policy.verify_signer_chains_not_revoked(servtd_crl)?; + } + Ok(verified_policy) + } + + fn verify_signatures_and_anchors( + &self, + issuer_chain: &[u8], + ) -> Result<VerifiedPolicy<'a>, PolicyError> { + // `issuer_chain` is the RTMR1 signer-anchor source: either a + // precomputed 48-byte anchor (CoRIM-only enrollment) or a PEM issuer + // chain (legacy JSON enrollment). Both resolve to the same anchor. + let cfv_anchor = resolve_signer_anchor(issuer_chain)?; + + // The outer policy-blob signature is no longer part of the trust model + // (integrity comes from RTMR2). Parse policyData directly. + let policy_data: PolicyData<'a> = + serde_json::from_str(self.policy_data.get()).map_err(|_| PolicyError::InvalidPolicy)?; + + let servtd_crl = match ( + policy_data.servtd_crl.as_ref(), + policy_data + .servtd_collateral + .as_ref() + .and_then(|collateral| collateral.servtd_crl.as_ref()), + ) { + (Some(top_level), Some(legacy)) if top_level != legacy => { + return Err(PolicyError::InvalidCollateral); + } + (Some(top_level), _) => Some(top_level.clone()), + (None, legacy) => legacy.cloned(), + }; + + // Optional JSON servtd collateral. When absent (CoRIM-only), there is + // no embedded chain to verify/bind here: the enrolled anchor is bound + // to the CoRIM signer by `ServtdCorim::decode_signed`, and all servtd + // lookups resolve through the CoRIM attached post-verify (fail-closed + // when none is attached). + let ( + servtd_tcb_mapping, + servtd_tcb_mapping_issuer_chain, + servtd_identity, + servtd_identity_issuer_chain, + ) = match &policy_data.servtd_collateral { + Some(servtd_collateral) => { + // Verify servtd collateral signature using its embedded chain + let servtd_tcb_mapping = servtd_collateral.servtd_tcb_mapping.verify_signature( + servtd_collateral.servtd_tcb_mapping_issuer_chain.as_bytes(), + )?; + + // Verify the optional TD Identity signature against its embedded + // chain. `servtdIdentity` and `servtdIdentityIssuerChain` must + // be present or absent together; a half-present pair fails closed. + let servtd_identity = match ( + servtd_collateral.servtd_identity.as_ref(), + servtd_collateral.servtd_identity_issuer_chain.as_deref(), + ) { + (Some(raw_identity), Some(identity_chain)) => { + Some(raw_identity.verify_signature(identity_chain.as_bytes())?) + } + (None, None) => None, + _ => return Err(PolicyError::InvalidServtdIdentity), + }; - let servtd_identity_issuer_chain = servtd_collateral.servtd_identity_issuer_chain.clone(); - let servtd_tcb_mapping_issuer_chain = - servtd_collateral.servtd_tcb_mapping_issuer_chain.clone(); + // Bind the TCB-mapping signer chain to the RTMR1 signer anchor. + // `servtdTcbMappingIssuerChain` is redacted from RTMR2, so + // require the chain that verified `servtdTcbMapping` to resolve + // to the same root+EKU anchor committed to RTMR1. + // A swapped chain fails closed; leaf/intermediate rotation under + // the same root + EKU keeps the anchor stable. + let mapping_anchor = compute_signer_anchor_from_chain_pem( + servtd_collateral.servtd_tcb_mapping_issuer_chain.as_bytes(), + )?; + if cfv_anchor != mapping_anchor { + return Err(PolicyError::SignerAnchorMismatch); + } - // Step 3: Sanity checks + // The optional TD Identity and issuer chain are measured into + // RTMR2. Also require the chain to share the RTMR1 signer + // anchor so mapping and identity stay in one trust domain. + if let Some(identity_chain) = + servtd_collateral.servtd_identity_issuer_chain.as_deref() + { + let identity_anchor = + compute_signer_anchor_from_chain_pem(identity_chain.as_bytes())?; + if cfv_anchor != identity_anchor { + return Err(PolicyError::SignerAnchorMismatch); + } + } + + ( + Some(servtd_tcb_mapping), + Some(servtd_collateral.servtd_tcb_mapping_issuer_chain.clone()), + servtd_identity, + servtd_collateral.servtd_identity_issuer_chain.clone(), + ) + } + None => (None, None, None, None), + }; + + // Sanity checks if !policy_data.validate() { return Err(PolicyError::InvalidParameter); } Ok(VerifiedPolicy { policy_data, - servtd_identity, - servtd_identity_issuer_chain, servtd_tcb_mapping, servtd_tcb_mapping_issuer_chain, - policy_issuer_chain, + servtd_identity, + servtd_identity_issuer_chain, + servtd_crl, + signer_anchor: cfv_anchor, + #[cfg(feature = "servtd_corim")] + servtd_corim: None, }) } - - fn verify_policy_data_signature( - &self, - issuer_chain: &[u8], - ) -> Result<PolicyData<'a>, PolicyError> { - let signature = hex_string_to_bytes(&self.signature)?; - - crypto::verify_cert_chain_and_signature( - issuer_chain, - self.policy_data.get().as_bytes(), - &signature, - ) - .map_err(|_| PolicyError::SignatureVerificationFailed)?; - - serde_json::from_str::<PolicyData>(self.policy_data.get()) - .map_err(|_| PolicyError::InvalidPolicy) - } } #[derive(Debug, Serialize, Deserialize)] @@ -283,8 +561,15 @@ pub struct PolicyData<'a> { forward_policy: Option<Vec<PolicyTypes>>, backward_policy: Option<Vec<PolicyTypes>>, pub collaterals: Collaterals, - #[serde(borrow)] - pub servtd_collateral: ServtdCollateral<'a>, + /// Optional locally-authoritative servTD signer CRL. This top-level form + /// is used by CoRIM-only policies; the legacy copy nested under + /// `servtdCollateral` remains accepted for backward compatibility. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub servtd_crl: Option<String>, + /// Optional JSON servtd collateral. Absent for a CoRIM-only policy, whose + /// servtd endorsement is delivered as a separately-enrolled CoRIM. + #[serde(borrow, default, skip_serializing_if = "Option::is_none")] + pub servtd_collateral: Option<ServtdCollateral<'a>>, } impl<'a> PolicyData<'a> { @@ -365,7 +650,9 @@ impl<'a> PolicyData<'a> { /// Enforce non-optional deny checks. /// /// Reject `Revoked` platform status when global checks are enabled. - /// Always check engine status; treat unknown (`None`) as denied. + /// When TD Identity status is available, reject `Revoked`. SVN-only + /// JSON/CoRIM policies intentionally have no status; explicit servTD policy + /// fields and init/current SVN ordering enforce qualification where needed. fn enforce_mandatory_deny( value: &PolicyEvaluationInfo, skip_global: bool, @@ -378,14 +665,12 @@ impl<'a> PolicyData<'a> { } } - // Engine status must be known; fail closed on `None`. - match value.migtd_tcb_status.as_deref() { - Some(status) => { - if ServtdTcbStatus::try_from(status)? == ServtdTcbStatus::Revoked { - return Err(PolicyError::SvnMismatch); - } + // Callers reject missing status when JSON TD Identity is authoritative; + // CoRIM and SVN-only JSON may omit it. + if let Some(status) = value.migtd_tcb_status.as_deref() { + if ServtdTcbStatus::try_from(status)? == ServtdTcbStatus::Revoked { + return Err(PolicyError::SvnMismatch); } - None => return Err(PolicyError::UnqualifiedMigTdInfo), } Ok(()) @@ -527,6 +812,7 @@ impl PlatformPolicy { struct CrlPolicy { pck_crl_num: Option<PolicyProperty>, root_ca_crl_num: Option<PolicyProperty>, + servtd_crl_num: Option<PolicyProperty>, } impl CrlPolicy { @@ -549,6 +835,13 @@ impl CrlPolicy { } } + if let Some(property) = &self.servtd_crl_num { + let servtd_crl_num = value.servtd_crl_num.ok_or(PolicyError::CrlEvaluation)?; + if !property.evaluate_integer(servtd_crl_num, relative_reference.servtd_crl_num)? { + return Err(PolicyError::CrlEvaluation); + } + } + Ok(()) } } @@ -577,6 +870,10 @@ impl ServtdPolicy { } } + // `tcbDate` / `tcbStatus` bars require the optional TD Identity to be + // shipped. `migtd_tcb_date` / `migtd_tcb_status` are populated only when + // the lookup resolved through a `TdIdentity`; a date/status bar with no + // TD Identity present therefore fails closed here. if let Some(property) = &self.migtd_identity.tcb_date { if !property.evaluate_string( value @@ -865,14 +1162,14 @@ impl PolicyProperty { } } - /// Evaluate a ServtdTcbStatus property against a reference value + /// Evaluate a ServtdTcbStatus property against a reference value. fn evaluate_servtd_tcb_status( &self, value: ServtdTcbStatus, _relative_reference: Option<ServtdTcbStatus>, ) -> Result<bool, PolicyError> { // "UpToDate" is always allowed. - // "OutOfDate" is always allowed, because time stamp is not trusted. + // "OutOfDate" is always allowed, because the time stamp is not trusted. const ALWAYS_ALLOW: &[ServtdTcbStatus] = &[ServtdTcbStatus::UpToDate, ServtdTcbStatus::OutOfDate]; // "Revoked" is always denied. @@ -886,8 +1183,8 @@ impl PolicyProperty { return Ok(true); } - // Every status already falls into either the always-allow or always-deny - // set. + // Every status already falls into either the always-allow or + // always-deny set. Ok(false) } } @@ -895,7 +1192,16 @@ impl PolicyProperty { #[cfg(test)] mod test { use super::*; - use alloc::{string::ToString, vec}; + use alloc::{format, string::ToString, vec}; + + fn delivered_servtd_crl(policy: &RawPolicyData<'_>) -> String { + let policy_data: serde_json::Value = + serde_json::from_str(policy.policy_data.get()).unwrap(); + policy_data["servtdCollateral"]["servtdCrl"] + .as_str() + .unwrap() + .to_string() + } #[test] fn test_parse_policy_data() { @@ -909,7 +1215,572 @@ mod test { let policy = RawPolicyData::deserialize_from_json(policy_data).unwrap(); let issuer_chain = include_bytes!("../../test/policy_v2/cert_chain/policy_issuer_chain.pem"); - policy.verify(issuer_chain).unwrap(); + let verified = policy.verify(issuer_chain).unwrap(); + assert!(verified.requires_servtd_tcb_status()); + } + + /// SVN-only deployment: a policy whose `servtdCollateral` ships **no** + /// `servtdIdentity` (nor `servtdIdentityIssuerChain`) must still verify. + /// The optional TD Identity is absent, so: + /// * `verify()` succeeds (the independent `servtdTcbMapping` signature + /// and its RTMR1 anchor binding are unaffected by the missing identity); + /// * `servtd_identity` / `servtd_identity_issuer_chain` are `None`; + /// * a servtd lookup resolves the SVN but leaves `tcb_date` / `tcb_status` + /// unset (there is no date/status source without TD Identity). + /// + /// The fixture is derived from `policy_v2.json` by dropping the two + /// identity fields; the mapping signature signs only the `tdTcbMapping` + /// bytes, so it remains valid. + #[test] + fn test_verify_policy_svn_only_no_identity() { + use crate::v2::hex_string_to_bytes; + + let policy_data = include_bytes!("../../test/policy_v2/policy_v2_svn_only.json"); + let policy = RawPolicyData::deserialize_from_json(policy_data).unwrap(); + let issuer_chain = + include_bytes!("../../test/policy_v2/cert_chain/policy_issuer_chain.pem"); + let verified = policy.verify(issuer_chain).unwrap(); + + assert!(verified.servtd_identity.is_none()); + assert!(verified.servtd_identity_issuer_chain.is_none()); + assert!(!verified.requires_servtd_tcb_status()); + + // The SVN resolves, but there is no date/status without TD Identity. + let known_hash = hex_string_to_bytes( + &verified.servtd_tcb_mapping.as_ref().unwrap().svn_mappings[0] + .td_measurements + .tdinfo_hash, + ) + .unwrap(); + let lookup = verified + .servtd_lookup_by_tdinfo_hash(&known_hash) + .expect("known hash resolves"); + assert!(lookup.tcb_date.is_none()); + assert!(lookup.tcb_status.is_none()); + } + + /// SVN-only policy evaluation: with no TD Identity present, a `migtdIdentity` + /// policy that uses only an `isvsvn` bar passes, while a `tcbStatus` / + /// `tcbDate` bar fails closed because `migtd_tcb_status` / `migtd_tcb_date` + /// are unpopulated (there is no date/status source without TD Identity). + #[test] + fn servtd_policy_svn_only_bars_and_fail_closed() { + // SVN value present but no date/status (identity-absent lookup). + let mut value = PolicyEvaluationInfo { + migtd_isvsvn: Some(5), + ..Default::default() + }; + let relative = PolicyEvaluationInfo::default(); + + // isvsvn-only bar: passes when the SVN qualifies. + let svn_only: ServtdPolicy = serde_json::from_str( + r#"{"migtdIdentity":{"isvsvn":{"operation":"greater-or-equal","reference":5}}}"#, + ) + .unwrap(); + assert!(svn_only.evaluate(&value, &relative).is_ok()); + + // A tcbStatus bar with no TD Identity present fails closed. + let status_bar: ServtdPolicy = serde_json::from_str( + r#"{"migtdIdentity":{"isvsvn":{"operation":"greater-or-equal","reference":5},"tcbStatusAccepted":{"operation":"string-equal","reference":"UpToDate"}}}"#, + ) + .unwrap(); + assert!(status_bar.evaluate(&value, &relative).is_err()); + + // A tcbDate bar with no TD Identity present also fails closed. + let date_bar: ServtdPolicy = serde_json::from_str( + r#"{"migtdIdentity":{"tcbDate":{"operation":"greater-or-equal","reference":"2024-01-01T00:00:00Z"}}}"#, + ) + .unwrap(); + assert!(date_bar.evaluate(&value, &relative).is_err()); + + // Once the (optional) TD Identity supplies date/status, the same bars + // are satisfiable. + value.migtd_tcb_status = Some("UpToDate".to_string()); + value.migtd_tcb_date = Some("2025-01-01T00:00:00Z".to_string()); + assert!(status_bar.evaluate(&value, &relative).is_ok()); + assert!(date_bar.evaluate(&value, &relative).is_ok()); + } + + #[cfg(feature = "servtd_corim")] + #[test] + fn azure_corim_policy_uses_svn_only_servtd_rule() { + use crate::v2::hex_string_to_bytes; + + let policy: serde_json::Value = serde_json::from_slice(include_bytes!( + "../../../../config/Azure/policy_data_raw.json" + )) + .unwrap(); + let servtd = policy["policy"] + .as_array() + .unwrap() + .iter() + .find_map(|entry| entry.get("servtd")) + .unwrap() + .clone(); + let servtd: ServtdPolicy = serde_json::from_value(servtd).unwrap(); + + let corim = ServtdCorim::decode( + include_bytes!("../../test/policy_v2/corim/tcb_mapping.cbor"), + 0, + ) + .unwrap(); + let endorsed_hash = hex_string_to_bytes( + "347c6170a91341351937962e08a7695703e7b87984b1c69216372c380302ac420\ + d42381e4585007057b20b2579286384", + ) + .unwrap(); + let lookup = corim.lookup_by_tdinfo_hash(&endorsed_hash).unwrap(); + assert!(lookup.tcb_date.is_none()); + assert!(lookup.tcb_status.is_none()); + + let same_peer = PolicyEvaluationInfo { + migtd_isvsvn: Some(lookup.isvsvn), + migtd_tcb_date: lookup.tcb_date, + migtd_tcb_status: lookup.tcb_status, + ..Default::default() + }; + let same = PolicyEvaluationInfo { + migtd_isvsvn: Some(lookup.isvsvn), + ..Default::default() + }; + assert!(servtd.evaluate(&same_peer, &same).is_ok()); + + let newer_peer = PolicyEvaluationInfo { + migtd_isvsvn: Some(lookup.isvsvn + 1), + ..Default::default() + }; + assert!(servtd.evaluate(&newer_peer, &same).is_ok()); + + let newer_local = PolicyEvaluationInfo { + migtd_isvsvn: Some(lookup.isvsvn + 1), + ..Default::default() + }; + assert!(servtd.evaluate(&same_peer, &newer_local).is_err()); + } + + /// The outer policy-blob signature has been removed from the trust model. + /// A policy with **no** outer `signature` field must still deserialize and + /// verify — integrity is established by the RTMR2 measurement, checked + /// separately in `check_policy_integrity`. The `policyData` bytes (and thus + /// the inner servtd signatures) are preserved verbatim. + #[test] + fn test_verify_policy_without_outer_signature() { + let policy_data = include_bytes!("../../test/policy_v2/policy_v2.json"); + let signed = RawPolicyData::deserialize_from_json(policy_data).unwrap(); + assert!( + signed.signature.is_some(), + "fixture is expected to carry a legacy outer signature" + ); + + // Re-wrap the exact same policyData bytes with NO outer signature. + let no_sig = format!("{{\"policyData\":{}}}", signed.policy_data.get()); + let unsigned = RawPolicyData::deserialize_from_json(no_sig.as_bytes()).unwrap(); + assert!(unsigned.signature.is_none()); + + let issuer_chain = + include_bytes!("../../test/policy_v2/cert_chain/policy_issuer_chain.pem"); + unsigned.verify(issuer_chain).unwrap(); + } + + /// A bogus outer signature must be **ignored** (never verified), because + /// the outer signature is no longer part of the trust model. If it were + /// still verified this garbage value would fail closed. + #[test] + fn test_outer_signature_is_ignored() { + let policy_data = include_bytes!("../../test/policy_v2/policy_v2.json"); + let signed = RawPolicyData::deserialize_from_json(policy_data).unwrap(); + + let tampered = format!( + "{{\"policyData\":{},\"signature\":\"deadbeef\"}}", + signed.policy_data.get() + ); + let policy = RawPolicyData::deserialize_from_json(tampered.as_bytes()).unwrap(); + assert_eq!(policy.signature.as_deref(), Some("deadbeef")); + + // Verification succeeds despite the bogus outer signature. + policy + .verify(include_bytes!( + "../../test/policy_v2/cert_chain/policy_issuer_chain.pem" + )) + .unwrap(); + } + + /// RTMR1 signer-anchor binding (security-critical): because + /// `servtdTcbMappingIssuerChain` is redacted from RTMR2, its signer identity + /// is bound by requiring it to resolve to the RTMR1 signer anchor enrolled + /// directly or derived from the CFV issuer chain. An unrelated CFV + /// chain (different root + leaf signer EKU fingerprint) must fail closed with + /// `SignerAnchorMismatch` — even though the embedded chains still validate + /// the inner signatures. + #[test] + fn test_verify_policy_rejects_mapping_chain_anchor_mismatch() { + let policy_data = include_bytes!("../../test/policy_v2/policy_v2.json"); + let policy = RawPolicyData::deserialize_from_json(policy_data).unwrap(); + let unrelated_chain = + include_bytes!("../../test/policy_v2/cert_chain/unrelated_issuer_chain.pem"); + match policy.verify(unrelated_chain) { + Err(PolicyError::SignerAnchorMismatch) => {} + Err(other) => panic!("expected SignerAnchorMismatch, got {:?}", other), + Ok(_) => panic!("expected SignerAnchorMismatch, but verify() succeeded"), + } + } + + /// End-to-end `verify()` revocation enforcement: a policy whose delivered + /// servTD CRL revokes the signer leaf must fail closed + /// with `SignerRevoked`, while the same policy carrying a revocation-free + /// CRL verifies. The fixtures under `test/policy_v2/revocation/` are a + /// self-contained PKI (one signer for both identity and mapping) with + /// matching empty and revoking CRLs. + #[test] + fn verify_enforces_servtd_signer_revocation() { + let chain = include_bytes!("../../test/policy_v2/revocation/signer_chain.pem"); + + let ok = include_bytes!("../../test/policy_v2/revocation/policy_ok.json"); + RawPolicyData::deserialize_from_json(ok) + .unwrap() + .verify(chain) + .expect("policy with an unrevoked signer should verify"); + + let revoked = include_bytes!("../../test/policy_v2/revocation/policy_revoked.json"); + match RawPolicyData::deserialize_from_json(revoked) + .unwrap() + .verify(chain) + { + Err(PolicyError::SignerRevoked) => {} + Err(other) => panic!("expected SignerRevoked, got {:?}", other), + Ok(_) => panic!("expected SignerRevoked, but verify() succeeded"), + } + } + + /// Peer authentication must use the local CRL, never the CRL delivered in + /// the peer's measured policy. A locally revoking CRL rejects a peer that + /// advertises an empty CRL, while a local empty CRL accepts the same signer + /// even if the peer advertises a revoking CRL. + #[test] + fn peer_verification_uses_authoritative_local_servtd_crl() { + let chain = include_bytes!("../../test/policy_v2/revocation/signer_chain.pem"); + + let peer_empty = RawPolicyData::deserialize_from_json(include_bytes!( + "../../test/policy_v2/revocation/policy_ok.json" + )) + .unwrap(); + let empty_crl = delivered_servtd_crl(&peer_empty); + let peer_revoking = RawPolicyData::deserialize_from_json(include_bytes!( + "../../test/policy_v2/revocation/policy_revoked.json" + )) + .unwrap(); + let revoked_crl = delivered_servtd_crl(&peer_revoking); + + assert!(matches!( + peer_empty.verify_with_authoritative_servtd_crl(chain, Some(revoked_crl.as_bytes())), + Err(PolicyError::SignerRevoked) + )); + + peer_revoking + .verify_with_authoritative_servtd_crl(chain, Some(empty_crl.as_bytes())) + .expect("the peer CRL must not override the local CRL"); + } + + /// CoRIM-only policies can carry the authoritative CRL without restoring + /// the legacy JSON mapping. The CRL remains measured as part of policyData + /// and is retained until the separately enrolled CoRIM chain is attached. + #[test] + fn corim_only_policy_retains_top_level_servtd_crl() { + let raw = RawPolicyData::deserialize_from_json(include_bytes!( + "../../test/policy_v2/revocation/policy_ok.json" + )) + .unwrap(); + let mut policy_data: serde_json::Value = + serde_json::from_str(raw.policy_data.get()).unwrap(); + let servtd_crl = policy_data["servtdCollateral"]["servtdCrl"].take(); + let policy_data = policy_data.as_object_mut().unwrap(); + policy_data.remove("servtdCollateral"); + policy_data.insert("servtdCrl".to_string(), servtd_crl.clone()); + + let wrapped = format!( + r#"{{"policyData":{}}}"#, + serde_json::Value::Object(policy_data.clone()) + ); + let policy = RawPolicyData::deserialize_from_json(wrapped.as_bytes()).unwrap(); + let verified = policy + .verify(&[0xA5; SHA384_DIGEST_SIZE]) + .expect("CoRIM-only policy should retain its CRL"); + + assert!(verified.servtd_tcb_mapping.is_none()); + assert_eq!(verified.servtd_crl.as_deref(), servtd_crl.as_str()); + } + + #[test] + fn conflicting_servtd_crl_locations_fail_closed() { + let raw = RawPolicyData::deserialize_from_json(include_bytes!( + "../../test/policy_v2/revocation/policy_ok.json" + )) + .unwrap(); + let mut policy_data: serde_json::Value = + serde_json::from_str(raw.policy_data.get()).unwrap(); + policy_data["servtdCrl"] = serde_json::Value::String("different CRL".to_string()); + + let wrapped = format!(r#"{{"policyData":{policy_data}}}"#); + let policy = RawPolicyData::deserialize_from_json(wrapped.as_bytes()).unwrap(); + assert!(matches!( + policy.verify(include_bytes!( + "../../test/policy_v2/revocation/signer_chain.pem" + )), + Err(PolicyError::InvalidCollateral) + )); + } + + /// Anti-rollback floor on the servtd signer CRL number: a policy `crl` + /// block with `servtdCrlNum` rejects a delivered CRL whose number is below + /// the floor (a rolled-back revocation list), and rejects a missing number + /// when a floor is set. Fail-closed. Mirrors the pck/root_ca CRL floors. + #[test] + fn crl_policy_enforces_servtd_crl_num_floor() { + let policy: CrlPolicy = serde_json::from_str( + r#"{"servtdCrlNum":{"operation":"greater-or-equal","reference":4097}}"#, + ) + .unwrap(); + let reference = PolicyEvaluationInfo::default(); + + let mut value = PolicyEvaluationInfo::default(); + // At or above the floor passes. + value.servtd_crl_num = Some(4097); + assert!(policy.evaluate(&value, &reference).is_ok()); + value.servtd_crl_num = Some(5000); + assert!(policy.evaluate(&value, &reference).is_ok()); + // Below the floor (rolled-back CRL) fails closed. + value.servtd_crl_num = Some(4096); + assert!(policy.evaluate(&value, &reference).is_err()); + // Missing CRL number while a floor is set fails closed. + value.servtd_crl_num = None; + assert!(policy.evaluate(&value, &reference).is_err()); + } + + /// Once a CoRIM is attached, `servtd_lookup_by_tdinfo_hash` is + /// fail-closed: the legacy collateral is no longer consulted, so a hash + /// the legacy table resolves misses (the CoRIM does not know it), while a + /// hash the CoRIM knows resolves through it. + #[cfg(feature = "servtd_corim")] + #[test] + fn servtd_lookup_is_fail_closed_when_corim_attached() { + use crate::v2::{hex_string_to_bytes, ServtdCorim}; + + let policy_data = include_bytes!("../../test/policy_v2/policy_v2.json"); + let policy = RawPolicyData::deserialize_from_json(policy_data).unwrap(); + let issuer_chain = + include_bytes!("../../test/policy_v2/cert_chain/policy_issuer_chain.pem"); + let mut verified = policy.verify(issuer_chain).unwrap(); + + // A hash the *legacy* embedded tcb_mapping resolves. + let legacy_hash = hex_string_to_bytes( + &verified.servtd_tcb_mapping.as_ref().unwrap().svn_mappings[0] + .td_measurements + .tdinfo_hash, + ) + .unwrap(); + assert!(verified + .servtd_lookup_by_tdinfo_hash(&legacy_hash) + .is_some()); + + // Attach a CoRIM that only knows the pipeline sample's release + // (hash 347c6170…79286384 -> svn 1). + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cbor"); + verified.set_servtd_corim(ServtdCorim::decode(tcb, 0).unwrap()); + assert!(!verified.requires_servtd_tcb_status()); + + // Fail-closed: the legacy hash is no longer resolvable (no fallback). + assert!(verified + .servtd_lookup_by_tdinfo_hash(&legacy_hash) + .is_none()); + + // ...but a hash the CoRIM knows resolves through it. + let corim_hash = hex_string_to_bytes( + "347c6170a91341351937962e08a7695703e7b87984b1c69216372c380302ac420d42381e4585007057b20b2579286384", + ) + .unwrap(); + let hit = verified.servtd_lookup_by_tdinfo_hash(&corim_hash); + assert!(hit.is_some()); + assert_eq!(hit.unwrap().isvsvn, 1); + } + + // Peer SVN must be resolved through the peer TCB-mapping CoRIM. + #[cfg(feature = "servtd_corim")] + const CORIM_KNOWN_HASH_HEX: &str = "347c6170a91341351937962e08a7695703e7b87984b1c69216372c380302ac420d42381e4585007057b20b2579286384"; + + #[cfg(feature = "servtd_corim")] + fn base_verified_policy() -> VerifiedPolicy<'static> { + let policy_data = include_bytes!("../../test/policy_v2/policy_v2.json"); + let issuer_chain = + include_bytes!("../../test/policy_v2/cert_chain/policy_issuer_chain.pem"); + let policy = RawPolicyData::deserialize_from_json(policy_data).unwrap(); + policy.verify(issuer_chain).unwrap() + } + + /// Recover the RTMR1 signer anchor embedded in a signed COSE CoRIM + /// sample's own `x5chain`, running the real ES384 signature + chain + /// verification on the way. Mirrors the private + /// `servtd_corim::test::signer_anchor_from_sample` helper, which is + /// not reachable from this module. + #[cfg(feature = "servtd_corim")] + fn signer_anchor_from_cose_sample(cose: &[u8]) -> [u8; SHA384_DIGEST_SIZE] { + use crate::v2::compute_signer_anchor; + + let env = corim::types::signed::decode_signed_corim(cose).expect("decode COSE"); + let tbs = env.to_be_signed(&[]).expect("tbs"); + let chain = env.protected.x5chain.as_ref().expect("x5chain"); + let certs = chain.certs(); + let (root_der, leaf_eku_oids_der) = + crypto::verify_cose_sign1_es384_x5chain(&certs, &tbs, &env.signature) + .expect("verify signature"); + let leaf_eku_oid_der = leaf_eku_oids_der.first().expect("leaf asserts >= 1 EKU"); + compute_signer_anchor(&root_der, leaf_eku_oid_der).expect("anchor") + } + + /// Scenario 1: an older destination whose OWN local mapping does not + /// know a newer source's `tdinfo_hash` still accepts the source once + /// the source's own authenticated CoRIM (verified against the + /// SOURCE's own resolved signer anchor) is attached to the source's + /// `VerifiedPolicy`. The destination's local ignorance of the hash is + /// irrelevant: only the peer's own mapping is consulted. + #[cfg(feature = "servtd_corim")] + #[test] + fn peer_corim_resolves_hash_missing_from_destination_local_mapping() { + use crate::v2::hex_string_to_bytes; + + let corim_hash = hex_string_to_bytes(CORIM_KNOWN_HASH_HEX).unwrap(); + + // The destination's own local enrolled policy never saw this + // source release, so its own (legacy JSON) mapping does not know + // the hash. + let verified_dest = base_verified_policy(); + assert!(verified_dest + .servtd_lookup_by_tdinfo_hash(&corim_hash) + .is_none()); + + // The source's own `VerifiedPolicy`: attach the source's own + // signed CoRIM after verifying it against the SOURCE's own + // resolved signer anchor (never the destination's). + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cose"); + let mut verified_peer = base_verified_policy(); + verified_peer.signer_anchor = signer_anchor_from_cose_sample(tcb); + verified_peer + .attach_verified_peer_servtd_corim(tcb) + .expect("peer corim verifies against the peer's own anchor"); + + let hit = verified_peer.servtd_lookup_by_tdinfo_hash(&corim_hash); + assert_eq!( + hit.expect("peer's own CoRIM resolves its own release") + .isvsvn, + 1 + ); + } + + /// Scenario 2: once a peer's authenticated CoRIM is attached, a + /// `tdinfo_hash` it does not endorse fails closed (`None`), never + /// falling back to the destination's local mapping or any default + /// acceptance. `servtd_lookup_by_tdinfo_hash` is the single lookup + /// primitive shared by BOTH the current-release lookup + /// (`setup_evaluation_data`/`setup_evaluation_data_with_tdreport`, via + /// `servtd_lookup_by_report`) and the initial-release lookup + /// (`mig_policy::verify_init_servtd_svn_order`), so exercising it + /// here covers a missing hash at either call site. + #[cfg(feature = "servtd_corim")] + #[test] + fn peer_corim_missing_hash_fails_closed() { + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cose"); + let mut verified_peer = base_verified_policy(); + verified_peer.signer_anchor = signer_anchor_from_cose_sample(tcb); + verified_peer + .attach_verified_peer_servtd_corim(tcb) + .unwrap(); + + // Neither the peer's CoRIM (single endorsed release) nor any + // fallback resolves an unrelated hash. + let unknown_hash = [0xAAu8; SHA384_DIGEST_SIZE]; + assert!(verified_peer + .servtd_lookup_by_tdinfo_hash(&unknown_hash) + .is_none()); + } + + /// Scenario 3a: a peer CoRIM signed under a root/EKU anchor that does + /// not match the peer's own resolved RTMR1 signer anchor is rejected + /// outright and never attached. + #[cfg(feature = "servtd_corim")] + #[test] + fn attach_peer_corim_rejects_wrong_signer_anchor() { + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cose"); + let mut wrong_anchor = signer_anchor_from_cose_sample(tcb); + wrong_anchor[0] ^= 0xFF; + + let mut verified_peer = base_verified_policy(); + verified_peer.signer_anchor = wrong_anchor; + + assert!(verified_peer + .attach_verified_peer_servtd_corim(tcb) + .is_err()); + } + + /// Scenario 3b: after attaching, the peer CoRIM's signer chain is + /// still checked against the LOCAL authoritative servTD CRL (never a + /// peer-supplied one), and a revoked signer is rejected. + #[cfg(feature = "servtd_corim")] + #[test] + fn attach_peer_corim_then_local_crl_rejects_revoked_signer() { + let tcb = include_bytes!("../../test/policy_v2/corim/revocation/tcb_mapping.cose"); + let mut verified_peer = base_verified_policy(); + verified_peer.signer_anchor = signer_anchor_from_cose_sample(tcb); + verified_peer + .attach_verified_peer_servtd_corim(tcb) + .unwrap(); + + let local_crl = + include_bytes!("../../test/policy_v2/corim/revocation/crl_leaf_revoked.pem"); + assert!(matches!( + verified_peer.verify_signer_chains_not_revoked(local_crl), + Err(PolicyError::SignerRevoked) + )); + } + + /// Scenario 4 (best-effort proxy — see final report): bidirectional + /// signer-leaf rotation. `signer_a.pem`/`signer_b.pem` are two + /// independently rotated leaf keys under the SAME root + dedicated + /// signer EKU and resolve to the identical RTMR1 signer anchor + /// (`measurement::signer_anchor_from_chain_ignores_leaf_subject_and_key`). + /// This proves the property `attach_verified_peer_servtd_corim`'s + /// accept/reject decision depends on: anchor equality alone, not which + /// specific leaf-key generation produced the peer's transported + /// chain. A genuinely independent two-signer-key end-to-end CoRIM + /// rotation could not be exercised locally: this repository ships + /// only one signed CoRIM COSE sample key, and no tooling to mint a + /// second one was available in this environment. + #[cfg(feature = "servtd_corim")] + #[test] + fn rotated_leaf_keys_resolve_to_the_same_signer_anchor() { + let anchor_old = compute_signer_anchor_from_chain_pem(include_bytes!( + "../../../crypto/test/eku/signer_a.pem" + )) + .unwrap(); + let anchor_new = compute_signer_anchor_from_chain_pem(include_bytes!( + "../../../crypto/test/eku/signer_b.pem" + )) + .unwrap(); + assert_eq!( + anchor_old, anchor_new, + "rotated leaf keys under the same root+EKU must resolve to the \ + same anchor, so attach_verified_peer_servtd_corim's decision \ + never depends on which generation produced the peer's chain" + ); + + // A rotated-generation anchor that happens NOT to match this + // CoRIM sample's real signer (unrelated key material) still fails + // closed: rotation alone never grants acceptance, the anchor must + // genuinely match the CoRIM's own signer. + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cose"); + let mut verified_after_rotation = base_verified_policy(); + verified_after_rotation.signer_anchor = anchor_new; + assert!(verified_after_rotation + .attach_verified_peer_servtd_corim(tcb) + .is_err()); } #[test] @@ -922,11 +1793,12 @@ mod test { tcb_status: Some("UpToDate".to_string()), tcb_evaluation_number: Some(15), fmspc: Some([0x10, 0xC0, 0x6F, 0x00, 0x00, 0x00]), + migtd_isvsvn: None, migtd_tcb_status: None, migtd_tcb_date: None, - migtd_isvsvn: None, pck_crl_num: None, root_ca_crl_num: None, + servtd_crl_num: None, }; let relative_ref = PolicyEvaluationInfo::default(); assert!(global_policy.evaluate(&value, &relative_ref).is_ok()); @@ -1190,51 +2062,6 @@ mod test { ); } - #[test] - fn test_policy_servtd_tcb_status() { - let assert_servtd_tcb_status_allowed = - |policy: PolicyProperty, - relative_reference: ServtdTcbStatus, - allow_list: &[ServtdTcbStatus], - deny_list: &[ServtdTcbStatus]| { - for value in allow_list { - assert!(policy - .evaluate_servtd_tcb_status(*value, Some(relative_reference)) - .unwrap()); - } - for value in deny_list { - assert!(!policy - .evaluate_servtd_tcb_status(*value, Some(relative_reference)) - .unwrap()); - } - }; - let relative_reference = ServtdTcbStatus::UpToDate; - - // Test with an empty "allow-list" - let tcb_status_policy = PolicyProperty { - operation: "allow-list".to_string(), - reference: Reference::StringList(vec![]), - }; - assert_servtd_tcb_status_allowed( - tcb_status_policy, - relative_reference, - &[ServtdTcbStatus::UpToDate, ServtdTcbStatus::OutOfDate], - &[ServtdTcbStatus::Revoked], - ); - - // Test with an "allow-list" operation and "Revoked" reference - let tcb_status_policy = PolicyProperty { - operation: "allow-list".to_string(), - reference: Reference::StringList(vec!["Revoked".to_string()]), - }; - assert_servtd_tcb_status_allowed( - tcb_status_policy, - relative_reference, - &[ServtdTcbStatus::UpToDate, ServtdTcbStatus::OutOfDate], - &[ServtdTcbStatus::Revoked], - ); - } - #[test] fn test_policy_tcb_evaluation_number() { // Test with a value reference @@ -1261,6 +2088,8 @@ mod test { // No block: still deny `Revoked` platform status. let value = PolicyEvaluationInfo { tcb_status: Some("Revoked".to_string()), + migtd_isvsvn: Some(1), + migtd_tcb_status: Some("UpToDate".to_string()), ..PolicyEvaluationInfo::default() }; let relative = PolicyEvaluationInfo::default(); @@ -1275,6 +2104,7 @@ mod test { fn test_absent_block_denies_revoked_engine() { // No block: still deny `Revoked` engine status. let value = PolicyEvaluationInfo { + migtd_isvsvn: Some(1), migtd_tcb_status: Some("Revoked".to_string()), ..PolicyEvaluationInfo::default() }; @@ -1291,6 +2121,7 @@ mod test { // No block: non-`Revoked` status is allowed. let value = PolicyEvaluationInfo { tcb_status: Some("UpToDate".to_string()), + migtd_isvsvn: Some(1), migtd_tcb_status: Some("UpToDate".to_string()), ..PolicyEvaluationInfo::default() }; @@ -1306,6 +2137,7 @@ mod test { // In rebinding (`skip_global`), platform status is ignored. let value = PolicyEvaluationInfo { tcb_status: Some("Revoked".to_string()), + migtd_isvsvn: Some(1), migtd_tcb_status: Some("UpToDate".to_string()), ..PolicyEvaluationInfo::default() }; @@ -1317,20 +2149,40 @@ mod test { } #[test] - fn test_unclassifiable_engine_is_denied() { - // Fail closed: unknown engine status (`None`) is denied in all paths. + fn test_absent_block_allows_engine_without_identity_status() { + // With no servTD rule, absent identity status is valid for SVN-only + // policies and for asymmetric peer-mapping tests. let value = PolicyEvaluationInfo { tcb_status: Some("UpToDate".to_string()), - migtd_tcb_status: None, ..PolicyEvaluationInfo::default() }; let relative = PolicyEvaluationInfo::default(); assert!( - PolicyData::<'static>::evaluate_policy_block(None, &value, &relative, false).is_err() + PolicyData::<'static>::evaluate_policy_block(None, &value, &relative, false).is_ok() ); assert!( - PolicyData::<'static>::evaluate_policy_block(None, &value, &relative, true).is_err() + PolicyData::<'static>::evaluate_policy_block(None, &value, &relative, true).is_ok() ); } + + #[test] + fn test_servtd_rule_requires_endorsed_engine() { + let block = vec![PolicyTypes::Servtd( + serde_json::from_str( + r#"{"migtdIdentity":{"isvsvn":{"operation":"greater-or-equal","reference":1}}}"#, + ) + .unwrap(), + )]; + let value = PolicyEvaluationInfo::default(); + let relative = PolicyEvaluationInfo::default(); + + assert!(PolicyData::<'static>::evaluate_policy_block( + Some(&block), + &value, + &relative, + false + ) + .is_err()); + } } diff --git a/src/policy/src/v2/servtd_collateral.rs b/src/policy/src/v2/servtd_collateral.rs index 889aecf95..c9606c54b 100644 --- a/src/policy/src/v2/servtd_collateral.rs +++ b/src/policy/src/v2/servtd_collateral.rs @@ -7,27 +7,38 @@ use serde::{Deserialize, Serialize}; use serde_json::{self, value::RawValue}; use crate::{ - v2::{bytes_to_hex_string, hex_string_to_bytes}, + v2::{bytes_to_hex_string, compute_tdinfo_hash, hex_string_to_bytes}, MigTdInfoProperty, PolicyError, Report, }; -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct VerifiedServtdCollateral { - pub servtd_identity: TdIdentity, - pub servtd_tcb_mapping: TdTcbMapping, -} +use crypto::{hash::digest_sha384, SHA384_DIGEST_SIZE}; #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ServtdCollateral<'a> { pub major_version: u32, pub minor_version: u32, - pub servtd_identity_issuer_chain: String, - #[serde(borrow)] - pub servtd_identity: RawServtdIdentity<'a>, pub servtd_tcb_mapping_issuer_chain: String, + #[serde(borrow)] pub servtd_tcb_mapping: RawServtdTcbMapping<'a>, + /// Optional TD Identity issuer chain (PEM). Present only when the optional + /// `servtdIdentity` is shipped; measured into RTMR2 and also bound to the + /// RTMR1 signer anchor in `RawPolicyData::verify`. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub servtd_identity_issuer_chain: Option<String>, + /// Optional MigTD TD Identity (`isvsvn -> (tcb_date, tcb_status)`). + /// + /// JSON-only and optional (there is no CoRIM form). When present it lets + /// migration policy use `tcbDate` / `tcbStatus` bars; when absent, policy + /// is driven by the ISV SVN alone. See + /// `doc/tcb_mapping_design_proposal.md`. + #[serde(borrow, default, skip_serializing_if = "Option::is_none")] + pub servtd_identity: Option<RawServtdIdentity<'a>>, + /// Legacy location for the optional PEM CRL covering the servTD signer + /// chain. New policies use top-level `servtdCrl` so CoRIM-only enrollment + /// can carry the same authoritative CRL without a JSON TCB mapping. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub servtd_crl: Option<String>, } #[derive(Debug, Serialize, Deserialize)] @@ -59,6 +70,16 @@ impl<'a> RawServtdIdentity<'a> { } } +/// MigTD TD Identity (optional, JSON-only), simplified per the hash-based +/// TCB-mapping redesign. +/// +/// Because the TCB Mapping now matches by `SERVTD_INFO_HASH`, TD Identity no +/// longer describes the MigTD's `TDINFO_STRUCT`; the former register +/// descriptors (`xfam`, `attributes`, `mrConfigId`, `mrOwner`, +/// `mrOwnerConfig`, MRTD/RTMRs) and the SGX-enclave `mrsigner` / `isvProdId` +/// fields are dropped. It reduces to an envelope plus an +/// `isvsvn -> (tcb_date, tcb_status)` table. See +/// `doc/tcb_mapping_design_proposal.md`. #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TdIdentity { @@ -66,14 +87,6 @@ pub struct TdIdentity { pub version: u32, pub issue_date: String, pub next_update: String, - pub tcb_evaluation_number: u32, - pub xfam: String, - pub attributes: String, - pub mr_config_id: String, - pub mr_owner: String, - pub mr_owner_config: String, - pub mrsigner: String, - pub isv_prod_id: u16, pub tcb_levels: Vec<TcbLevel>, } @@ -131,8 +144,10 @@ impl<'a> RawServtdTcbMapping<'a> { ) .map_err(|_| PolicyError::SignatureVerificationFailed)?; - serde_json::from_str::<TdTcbMapping>(self.td_tcb_mapping.get()) - .map_err(|_| PolicyError::InvalidServtdTcbMapping) + let mapping = serde_json::from_str::<TdTcbMapping>(self.td_tcb_mapping.get()) + .map_err(|_| PolicyError::InvalidServtdTcbMapping)?; + mapping.validate()?; + Ok(mapping) } } @@ -143,8 +158,6 @@ pub struct TdTcbMapping { pub version: u32, pub issue_date: String, pub next_update: String, - pub mr_signer: String, - pub isv_prod_id: u16, pub svn_mappings: Vec<SvnMapping>, } @@ -155,73 +168,74 @@ pub struct SvnMapping { pub isvsvn: u16, } -#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] pub struct Measurements { - pub mrtd: String, - pub rtmr0: String, - pub rtmr1: String, - pub rtmr2: Option<String>, - pub rtmr3: Option<String>, + /// Single-hash measurement key per the TCB-mapping redesign + /// (`doc/tcb_mapping_design_proposal.md`). + /// + /// Equals `init_servtd_info_hash` for production MigTDs (servtd_attr=0): + /// tdinfo_hash = SHA384(unmasked TDINFO_STRUCT bytes) + /// + /// Hex-encoded (case-insensitive). The serde alias accepts both + /// the canonical snake_case key and the legacy camelCase spelling. + #[serde(rename = "tdinfo_hash", alias = "tdinfoHash")] + pub tdinfo_hash: String, } impl Measurements { - pub fn new_from_bytes( - mrtd: &[u8], - rtmr0: &[u8], - rtmr1: &[u8], - rtmr2: Option<&[u8]>, - rtmr3: Option<&[u8]>, - ) -> Self { + pub fn new_from_bytes(tdinfo_hash: &[u8]) -> Self { Measurements { - mrtd: bytes_to_hex_string(mrtd), - rtmr0: bytes_to_hex_string(rtmr0), - rtmr1: bytes_to_hex_string(rtmr1), - rtmr2: rtmr2.map(|b| bytes_to_hex_string(b)), - rtmr3: rtmr3.map(|b| bytes_to_hex_string(b)), + tdinfo_hash: bytes_to_hex_string(tdinfo_hash), } } fn to_ascii_uppercase(&self) -> Self { Measurements { - mrtd: self.mrtd.to_ascii_uppercase(), - rtmr0: self.rtmr0.to_ascii_uppercase(), - rtmr1: self.rtmr1.to_ascii_uppercase(), - rtmr2: self.rtmr2.as_ref().map(|v| v.to_ascii_uppercase()), - rtmr3: self.rtmr3.as_ref().map(|v| v.to_ascii_uppercase()), + tdinfo_hash: self.tdinfo_hash.to_ascii_uppercase(), } } } impl TdTcbMapping { + fn validate(&self) -> Result<(), PolicyError> { + for (index, mapping) in self.svn_mappings.iter().enumerate() { + let hash = hex_string_to_bytes(&mapping.td_measurements.tdinfo_hash) + .map_err(|_| PolicyError::InvalidServtdTcbMapping)?; + if hash.len() != SHA384_DIGEST_SIZE { + return Err(PolicyError::InvalidServtdTcbMapping); + } + + for previous in &self.svn_mappings[..index] { + if previous + .td_measurements + .tdinfo_hash + .eq_ignore_ascii_case(&mapping.td_measurements.tdinfo_hash) + && previous.isvsvn != mapping.isvsvn + { + return Err(PolicyError::InvalidServtdTcbMapping); + } + } + } + Ok(()) + } + + /// Look up the engine SVN for the TD represented by `report` by computing + /// `tdinfo_hash` (see `doc/tcb_mapping_design_proposal.md`, + /// "Measurement layout") and matching the + /// `svnMappings[].tdMeasurements.tdinfoHash` entries. pub fn get_engine_svn_by_report(&self, report: &Report) -> Option<u16> { - let measurements = Measurements { - mrtd: bytes_to_hex_string( - report - .get_migtd_info_property(&MigTdInfoProperty::MrTd) - .ok()?, - ), - rtmr0: bytes_to_hex_string( - report - .get_migtd_info_property(&MigTdInfoProperty::Rtmr0) - .ok()?, - ), - rtmr1: bytes_to_hex_string( - report - .get_migtd_info_property(&MigTdInfoProperty::Rtmr1) - .ok()?, - ), - rtmr2: Some(bytes_to_hex_string( - report - .get_migtd_info_property(&MigTdInfoProperty::Rtmr2) - .ok()?, - )), - rtmr3: Some(bytes_to_hex_string( - report - .get_migtd_info_property(&MigTdInfoProperty::Rtmr3) - .ok()?, - )), - }; - self.get_engine_svn_by_measurements(&measurements) + let tdinfo_hash = compute_tdinfo_hash_from_report(report).ok()?; + self.get_engine_svn_by_tdinfo_hash(&tdinfo_hash) + } + + /// Look up the engine SVN by an already-computed `tdinfo_hash` + /// (48 raw bytes). This is the canonical entry point for the redesign. + pub fn get_engine_svn_by_tdinfo_hash(&self, tdinfo_hash: &[u8]) -> Option<u16> { + if tdinfo_hash.len() != SHA384_DIGEST_SIZE { + return None; + } + let target = Measurements::new_from_bytes(tdinfo_hash); + self.get_engine_svn_by_measurements(&target) } pub fn get_engine_svn_by_measurements(&self, measurements: &Measurements) -> Option<u16> { @@ -261,38 +275,146 @@ impl TdTcbMapping { #[inline] fn compare_measurements(pattern: &Measurements, target: &Measurements) -> bool { - // Convert both to uppercase for case-insensitive comparison + // Hex strings are case-insensitive. let pattern = pattern.to_ascii_uppercase(); let target = target.to_ascii_uppercase(); + pattern.tdinfo_hash == target.tdinfo_hash + } +} - if pattern.mrtd != target.mrtd - || pattern.rtmr0 != target.rtmr0 - || pattern.rtmr1 != target.rtmr1 - { - return false; - } +/// Total size of `TdInfoStruct` packed bytes (per +/// `td-shim-tools::tee_info_hash::TdInfoStruct::pack`): +/// attributes(8) + xfam(8) + 8*sha384(48) + reserved(0x70) = 512. +/// +/// The 8 SHA-384 fields are, in order: +/// `mrtd`, `mrconfig_id`, `mrowner`, `mrownerconfig`, `rtmr0`, `rtmr1`, +/// `rtmr2`, `rtmr3`. +const TDINFO_PACKED_SIZE: usize = 8 + 8 + 8 * SHA384_DIGEST_SIZE + TDINFO_RESERVED_SIZE; +const TDINFO_RESERVED_SIZE: usize = 0x70; + +/// Pack the *unmasked* `TdInfoStruct` bytes from its 10 measurement fields in +/// the same canonical order used by `td-shim-tools` (and therefore by +/// `migtd-hash`). +/// +/// Field order: attributes, xfam, mrtd, mrconfigid, mrowner, mrownerconfig, +/// rtmr0, rtmr1, rtmr2, rtmr3, reserved(0x70 zero bytes). +/// +/// The trailing 0x70 bytes are zero. This corresponds to the SEAM module's +/// internal `TDINFO_STRUCT` layout used to compute `init_servtd_info_hash` +/// when a service TD is bound; for the bound MigTD itself, `servtd_hash` is +/// always zero (no nested bindings). +pub fn pack_unmasked_tdinfo( + attributes: &[u8; 8], + xfam: &[u8; 8], + mrtd: &[u8; SHA384_DIGEST_SIZE], + mrconfig_id: &[u8; SHA384_DIGEST_SIZE], + mrowner: &[u8; SHA384_DIGEST_SIZE], + mrownerconfig: &[u8; SHA384_DIGEST_SIZE], + rtmr0: &[u8; SHA384_DIGEST_SIZE], + rtmr1: &[u8; SHA384_DIGEST_SIZE], + rtmr2: &[u8; SHA384_DIGEST_SIZE], + rtmr3: &[u8; SHA384_DIGEST_SIZE], +) -> [u8; TDINFO_PACKED_SIZE] { + let mut buf = [0u8; TDINFO_PACKED_SIZE]; + let mut off = 0usize; + let mut put = |off: &mut usize, src: &[u8]| { + buf[*off..*off + src.len()].copy_from_slice(src); + *off += src.len(); + }; + put(&mut off, attributes); + put(&mut off, xfam); + put(&mut off, mrtd); + put(&mut off, mrconfig_id); + put(&mut off, mrowner); + put(&mut off, mrownerconfig); + put(&mut off, rtmr0); + put(&mut off, rtmr1); + put(&mut off, rtmr2); + put(&mut off, rtmr3); + // Trailing reserved region stays zero. + debug_assert_eq!(off, TDINFO_PACKED_SIZE - TDINFO_RESERVED_SIZE); + buf +} - // Optional RTMR2 / RTMR3: - // If pattern provides a value -> target must also provide and match. - // If pattern is None -> treated as wildcard (ignore target value). - if pattern.rtmr2.is_some() { - match (&pattern.rtmr2, &target.rtmr2) { - (Some(p), Some(t)) if p != t => return false, - (Some(_), None) => return false, - _ => {} - } - } +/// Compute `tdinfo_hash` from the 10 individual TDINFO measurement fields. +/// Equals `init_servtd_info_hash` for MigTDs bound with `servtd_attr == 0`. +/// +/// Formula: `SHA384(pack(attributes, xfam, mrtd, ..., rtmr3, reserved))` +pub fn compute_tdinfo_hash_from_fields( + attributes: &[u8; 8], + xfam: &[u8; 8], + mrtd: &[u8; SHA384_DIGEST_SIZE], + mrconfig_id: &[u8; SHA384_DIGEST_SIZE], + mrowner: &[u8; SHA384_DIGEST_SIZE], + mrownerconfig: &[u8; SHA384_DIGEST_SIZE], + rtmr0: &[u8; SHA384_DIGEST_SIZE], + rtmr1: &[u8; SHA384_DIGEST_SIZE], + rtmr2: &[u8; SHA384_DIGEST_SIZE], + rtmr3: &[u8; SHA384_DIGEST_SIZE], +) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + let packed = pack_unmasked_tdinfo( + attributes, + xfam, + mrtd, + mrconfig_id, + mrowner, + mrownerconfig, + rtmr0, + rtmr1, + rtmr2, + rtmr3, + ); + let inner = digest_sha384(&packed).map_err(|_| PolicyError::HashCalculation)?; + compute_tdinfo_hash(&inner) +} - if pattern.rtmr3.is_some() { - match (&pattern.rtmr3, &target.rtmr3) { - (Some(p), Some(t)) if p != t => return false, - (Some(_), None) => return false, - _ => {} - } - } +/// Extract a fixed-size array from a slice, validating length. +fn as_array<const N: usize>(slice: &[u8]) -> Result<&[u8; N], PolicyError> { + use core::convert::TryInto; + slice.try_into().map_err(|_| PolicyError::InvalidParameter) +} - true - } +/// Compute `tdinfo_hash` for the TD described by `report`. +/// +/// Returns the 48-byte hash, equals `init_servtd_info_hash` for +/// production MigTDs (`servtd_attr == 0`). +pub fn compute_tdinfo_hash_from_report( + report: &Report, +) -> Result<[u8; SHA384_DIGEST_SIZE], PolicyError> { + let attributes = + as_array::<8>(report.get_migtd_info_property(&MigTdInfoProperty::Attributes)?)?; + let xfam = as_array::<8>(report.get_migtd_info_property(&MigTdInfoProperty::Xfam)?)?; + let mrtd = + as_array::<SHA384_DIGEST_SIZE>(report.get_migtd_info_property(&MigTdInfoProperty::MrTd)?)?; + let mrconfig_id = as_array::<SHA384_DIGEST_SIZE>( + report.get_migtd_info_property(&MigTdInfoProperty::MrConfigId)?, + )?; + let mrowner = as_array::<SHA384_DIGEST_SIZE>( + report.get_migtd_info_property(&MigTdInfoProperty::MrOwner)?, + )?; + let mrownerconfig = as_array::<SHA384_DIGEST_SIZE>( + report.get_migtd_info_property(&MigTdInfoProperty::MrOwnerConfig)?, + )?; + let rtmr0 = + as_array::<SHA384_DIGEST_SIZE>(report.get_migtd_info_property(&MigTdInfoProperty::Rtmr0)?)?; + let rtmr1 = + as_array::<SHA384_DIGEST_SIZE>(report.get_migtd_info_property(&MigTdInfoProperty::Rtmr1)?)?; + let rtmr2 = + as_array::<SHA384_DIGEST_SIZE>(report.get_migtd_info_property(&MigTdInfoProperty::Rtmr2)?)?; + let rtmr3 = + as_array::<SHA384_DIGEST_SIZE>(report.get_migtd_info_property(&MigTdInfoProperty::Rtmr3)?)?; + compute_tdinfo_hash_from_fields( + attributes, + xfam, + mrtd, + mrconfig_id, + mrowner, + mrownerconfig, + rtmr0, + rtmr1, + rtmr2, + rtmr3, + ) } #[cfg(test)] @@ -303,78 +425,58 @@ mod test { fn test_get_engine_svn() { let engine_bytes = include_bytes!("../../test/policy_v2/tcb_mapping.json"); let engine: TdTcbMapping = serde_json::from_slice(engine_bytes).unwrap(); - let mrtd = String::from("E2C7DA7CF0D93973480F0A34A6FE52A204EA81B4F1B6CD16018F5B4CAEE7B3B544A9738464A7C95E1705E20687A0ADA6"); - let rtmr0 = String::from("518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4"); - let rtmr1 = String::from("518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4"); - let rtmr3 = String::from("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - - let mut td_measurements = Measurements { - mrtd: mrtd.clone(), - rtmr0, - rtmr1, - rtmr2: None, - rtmr3: Some(rtmr3), + engine.validate().unwrap(); + + // A source policy must retain both the historical hash that initialized + // the tenant TD and the current source MigTD hash. + let init_hash = engine.svn_mappings[0].td_measurements.tdinfo_hash.clone(); + let current_hash = engine.svn_mappings[1].td_measurements.tdinfo_hash.clone(); + let target = Measurements { + tdinfo_hash: init_hash.clone(), }; - assert_eq!( - engine.get_engine_svn_by_measurements(&td_measurements), - Some(1) - ); - - td_measurements.mrtd = String::from("abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"); - assert!(engine - .get_engine_svn_by_measurements(&td_measurements) - .is_none()); + assert_eq!(engine.get_engine_svn_by_measurements(&target), Some(1)); + let current = Measurements { + tdinfo_hash: current_hash, + }; + assert_eq!(engine.get_engine_svn_by_measurements(¤t), Some(2)); - td_measurements.mrtd = mrtd.to_ascii_lowercase(); - assert_eq!( - engine.get_engine_svn_by_measurements(&td_measurements), - Some(1) - ); + // Case-insensitive match. + let lower = Measurements { + tdinfo_hash: init_hash.to_ascii_lowercase(), + }; + assert_eq!(engine.get_engine_svn_by_measurements(&lower), Some(1)); - td_measurements.rtmr3 = None; - assert!(engine - .get_engine_svn_by_measurements(&td_measurements) - .is_none()); + // Wrong hash -> no match. + let bogus = Measurements { + tdinfo_hash: + "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" + .into(), + }; + assert!(engine.get_engine_svn_by_measurements(&bogus).is_none()); } #[test] - fn test_check_engine_not_older() { - let engine = - |tag: u8| Measurements::new_from_bytes(&[tag; 48], &[tag; 48], &[tag; 48], None, None); - let mapping = TdTcbMapping { - id: String::from("TEST"), - version: 1, - issue_date: String::from("2025-01-01T00:00:00Z"), - next_update: String::from("2026-01-01T00:00:00Z"), - mr_signer: String::from("00"), - isv_prod_id: 1, - svn_mappings: [(0xa1u8, 1u16), (0xb2, 2)] - .iter() - .map(|(tag, isvsvn)| SvnMapping { - td_measurements: engine(*tag), - isvsvn: *isvsvn, - }) - .collect(), - }; - - // Downgrade: peer engine older than the engine bound at init. - assert!(mapping - .check_engine_not_older(&engine(0xa1), &engine(0xb2)) - .is_err()); - assert!(mapping - .check_engine_not_older(&engine(0xb2), &engine(0xa1)) - .is_ok()); - assert!(mapping - .check_engine_not_older(&engine(0xa1), &engine(0xa1)) - .is_ok()); - - // Either side unresolvable on the local mapping is a rejection. - assert!(mapping - .check_engine_not_older(&engine(0xcc), &engine(0xa1)) - .is_err()); - assert!(mapping - .check_engine_not_older(&engine(0xa1), &engine(0xcc)) - .is_err()); + fn conflicting_duplicate_tdinfo_hash_is_invalid() { + let hash = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + let mapping: TdTcbMapping = serde_json::from_str(&format!( + r#"{{ + "id": "mapping", + "version": 1, + "issueDate": "2025-01-01T00:00:00Z", + "nextUpdate": "2026-01-01T00:00:00Z", + "svnMappings": [ + {{"tdMeasurements": {{"tdinfo_hash": "{hash}"}}, "isvsvn": 1}}, + {{"tdMeasurements": {{"tdinfo_hash": "{}"}}, "isvsvn": 2}} + ] + }}"#, + hash.to_ascii_lowercase() + )) + .unwrap(); + + assert!(matches!( + mapping.validate(), + Err(PolicyError::InvalidServtdTcbMapping) + )); } #[test] @@ -386,9 +488,159 @@ mod test { .servtd_tcb_mapping .verify_signature(collateral.servtd_tcb_mapping_issuer_chain.as_bytes()) .is_ok()); - assert!(collateral - .servtd_identity - .verify_signature(collateral.servtd_tcb_mapping_issuer_chain.as_bytes()) - .is_ok()); + } + + #[test] + fn td_identity_simplified_parse_and_lookup() { + // The simplified TD Identity carries only the envelope + tcbLevels; + // the dropped TDINFO / SGX-enclave fields must not be required. + let json = r#"{ + "id": "identity-1", + "version": 1, + "issueDate": "2025-01-01T00:00:00Z", + "nextUpdate": "2026-01-01T00:00:00Z", + "tcbLevels": [ + { "tcb": { "isvsvn": 1 }, "tcbDate": "2025-01-01T00:00:00Z", "tcbStatus": "Revoked" }, + { "tcb": { "isvsvn": 3 }, "tcbDate": "2025-06-01T00:00:00Z", "tcbStatus": "UpToDate" } + ] + }"#; + let identity = TdIdentity::deserialize_from_json(json.as_bytes()).unwrap(); + let level = identity.get_tcb_level_by_svn(3).expect("svn 3 present"); + assert_eq!(level.tcb.isvsvn, 3); + assert_eq!(level.tcb_date, "2025-06-01T00:00:00Z"); + assert_eq!(level.tcb_status, "UpToDate"); + + let level = identity + .get_tcb_level_by_svn(2) + .expect("svn 2 floor-matches svn 1"); + assert_eq!(level.tcb.isvsvn, 1); + assert_eq!(level.tcb_status, "Revoked"); + assert!(identity.get_tcb_level_by_svn(0).is_none()); + } + + #[test] + fn servtd_collateral_identity_is_optional() { + // With TD Identity present, both optional fields deserialize. + let with_identity = r#"{ + "majorVersion": 1, + "minorVersion": 0, + "servtdTcbMappingIssuerChain": "chain", + "servtdTcbMapping": { "tdTcbMapping": {}, "signature": "aa" }, + "servtdIdentityIssuerChain": "chain", + "servtdIdentity": { "tdIdentity": {}, "signature": "bb" } + }"#; + let coll: ServtdCollateral = + serde_json::from_slice(with_identity.as_bytes()).expect("parse with identity"); + assert!(coll.servtd_identity.is_some()); + assert!(coll.servtd_identity_issuer_chain.is_some()); + + // SVN-only: omitting the identity fields is valid and leaves them None. + let svn_only = r#"{ + "majorVersion": 1, + "minorVersion": 0, + "servtdTcbMappingIssuerChain": "chain", + "servtdTcbMapping": { "tdTcbMapping": {}, "signature": "aa" } + }"#; + let coll: ServtdCollateral = + serde_json::from_slice(svn_only.as_bytes()).expect("parse svn-only"); + assert!(coll.servtd_identity.is_none()); + assert!(coll.servtd_identity_issuer_chain.is_none()); + } + + /// Regression test for the TDINFO packed-size constant. The packed buffer + /// MUST be exactly 512 bytes (attributes(8) + xfam(8) + 8×SHA384(48) + + /// reserved(0x70)). If `TDINFO_PACKED_SIZE` is off by even one field, the + /// `pack_unmasked_tdinfo` helper panics on out-of-bounds write. + #[test] + fn packed_tdinfo_size_matches_servtd_ext_layout() { + assert_eq!(TDINFO_PACKED_SIZE, 512); + let attributes = [0x01u8; 8]; + let xfam = [0x02u8; 8]; + let m = [ + [0x10u8; SHA384_DIGEST_SIZE], + [0x20u8; SHA384_DIGEST_SIZE], + [0x30u8; SHA384_DIGEST_SIZE], + [0x40u8; SHA384_DIGEST_SIZE], + [0x50u8; SHA384_DIGEST_SIZE], + [0x60u8; SHA384_DIGEST_SIZE], + [0x70u8; SHA384_DIGEST_SIZE], + [0x80u8; SHA384_DIGEST_SIZE], + ]; + let packed = pack_unmasked_tdinfo( + &attributes, + &xfam, + &m[0], + &m[1], + &m[2], + &m[3], + &m[4], + &m[5], + &m[6], + &m[7], + ); + assert_eq!(packed.len(), 512); + // First 16 bytes: attributes || xfam. + assert_eq!(&packed[..8], &attributes); + assert_eq!(&packed[8..16], &xfam); + // The 8 SHA384 fields follow in the documented order. + for (i, expected) in m.iter().enumerate() { + let off = 16 + i * SHA384_DIGEST_SIZE; + assert_eq!(&packed[off..off + SHA384_DIGEST_SIZE], &expected[..]); + } + // Final 112 bytes are the all-zero reserved region. + assert!(packed[16 + 8 * SHA384_DIGEST_SIZE..] + .iter() + .all(|b| *b == 0)); + } + + /// Cross-implementation parity: `tdinfo_hash` computed from the + /// canonical 10 fields here MUST equal `SHA384(unmasked_TDINFO_512)` used + /// by `migtd-hash`, the TCB-mapping CoRIM production tools, and the bash + /// mock-test scripts. If they ever drift, runtime policy lookup silently + /// fails for all valid TDs. + #[test] + fn tdinfo_hash_matches_direct_sha384_formula() { + use crypto::hash::digest_sha384; + let attributes = [0xAAu8; 8]; + let xfam = [0xBBu8; 8]; + let mrtd = [0x11u8; SHA384_DIGEST_SIZE]; + let mrconfig_id = [0x22u8; SHA384_DIGEST_SIZE]; + let mrowner = [0x33u8; SHA384_DIGEST_SIZE]; + let mrownerconfig = [0x44u8; SHA384_DIGEST_SIZE]; + let rtmr0 = [0x55u8; SHA384_DIGEST_SIZE]; + let rtmr1 = [0x66u8; SHA384_DIGEST_SIZE]; + let rtmr2 = [0x77u8; SHA384_DIGEST_SIZE]; + let rtmr3 = [0x88u8; SHA384_DIGEST_SIZE]; + + let got = compute_tdinfo_hash_from_fields( + &attributes, + &xfam, + &mrtd, + &mrconfig_id, + &mrowner, + &mrownerconfig, + &rtmr0, + &rtmr1, + &rtmr2, + &rtmr3, + ) + .unwrap(); + + let packed = pack_unmasked_tdinfo( + &attributes, + &xfam, + &mrtd, + &mrconfig_id, + &mrowner, + &mrownerconfig, + &rtmr0, + &rtmr1, + &rtmr2, + &rtmr3, + ); + assert_eq!(packed.len(), 512); + let expected = digest_sha384(&packed).unwrap(); + + assert_eq!(&got[..], expected.as_slice()); } } diff --git a/src/policy/src/v2/servtd_corim.rs b/src/policy/src/v2/servtd_corim.rs new file mode 100644 index 000000000..57568ca8b --- /dev/null +++ b/src/policy/src/v2/servtd_corim.rs @@ -0,0 +1,686 @@ +// Copyright (c) 2026 Intel Corporation +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +//! CoRIM-based hash endorsement: decodes the signed TCB-mapping CoRIM generated +//! during a MigTD production release (referred to as the "producer" below) and +//! resolves a `tdinfo_hash` to a [`ServtdLookup`] (the MigTD ISV SVN). This is +//! the only alternative to the legacy JSON collateral; the legacy path stays +//! unchanged from the one-hash redesign. +//! +//! # One document +//! +//! The producer emits a single signed **TCB Mapping CoRIM** +//! (`SERVTD_INFO_HASH -> isvsvn`), which MigTD carries in its CFV. Each +//! authorized release contributes two triples in the shared `migration-td` +//! environment (`class = { vendor: "Intel", model: "TDX" }`, +//! `instance = #6.560("migration-td")`): +//! +//! * a `reference-triple` whose single `MeasurementMap.mval.digests[0]` is +//! the ServTD info hash (authenticity), and +//! * a `conditional-endorsement-series` (CES) triple whose series record +//! *selects* on that digest and *adds* `mval.svn = ExactValue(svn)`. +//! +//! The hash -> svn lookup is driven by the CES triples. There is no TD +//! Identity document: the SVN is the endorsement, and the MigTD `tcb_date` / +//! `tcb_status` translation moved to policy-authoring time (see +//! `doc/tcb_mapping_design_proposal.md`). +//! +//! # `no_std` +//! +//! Built `#![no_std]` in MigTD; decode uses +//! [`corim::validate::decode_and_validate_at`] (the `_at` variant) so no +//! `SystemTime` is touched. +//! +//! # Signature verification +//! +//! [`ServtdCorim::decode_signed`] verifies the surrounding `COSE_Sign1` +//! envelope: it checks the ES384 signature against the embedded RFC 9360 +//! `x5chain` (via the `crypto` crate) and binds the chain's trust anchor to +//! the RTMR1-measured policy signer anchor ([`compute_signer_anchor`]), so a +//! CoRIM is only trusted when signed by the same root-of-trust the firmware +//! measured from the CFV policy issuer chain. [`ServtdCorim::decode`] takes +//! already-verified inner payload bytes and performs decode + match only. + +use alloc::{collections::BTreeMap, vec::Vec}; +use core::convert::TryFrom; + +use corim::{ + types::{ + comid::ComidTag, + environment::EnvironmentMap, + measurement::{MeasurementMap, SvnChoice}, + signed::{decode_signed_corim, CoseAlgorithm, CwtClaims}, + triples::ConditionalEndorsementSeriesTriple, + }, + validate::decode_and_validate_at, +}; + +use crypto::SHA384_DIGEST_SIZE; + +use crate::{ + v2::{compute_signer_anchor, ServtdLookup}, + PolicyError, +}; + +// ---- MigTD CoRIM wire-format constants ----------------------------------- + +/// Component class for both documents: `class = { vendor: "Intel", +/// model: "TDX" }` (no `class-id`). The producer switched from a shared +/// class-id UUID to this vendor/model class. +pub const CLASS_VENDOR: &str = "Intel"; +/// See [`CLASS_VENDOR`]. +pub const CLASS_MODEL: &str = "TDX"; + +/// Instance bytes shared by both documents' environments +/// (`environment.instance = #6.560("migration-td")`). The TCB Mapping and +/// TD Identity CoRIMs are no longer distinguished by instance — they are +/// separate signed files, and within each the triple shape (digest-selecting +/// vs svn-selecting CES) determines the lookup. +pub const MIGRATION_TD_INSTANCE_BYTES: &[u8] = b"migration-td"; + +// `tcb_date` and `tcb_status` are carried under the Intel-profile extension +// keys re-exported from `corim::profile::intel`: +// MVAL_TEE_TCBDATE = -72 (`tee.tcbdate`, CBOR #6.1(epoch-seconds)) +// MVAL_TEE_TCBSTATUS = -88 (`tee.tcbstatus`, text) +// No MigTD-local key numbers are defined here. + +/// Decoded CoRIM servtd collateral: the TCB Mapping document (hash -> svn). +pub struct ServtdCorim { + /// CoMID tags from the TCB Mapping CoRIM (digest-selecting CES). + tcb_mapping: Vec<ComidTag>, + /// Verified leaf-first COSE `x5chain`, retained so callers can apply the + /// locally authoritative servTD CRL after signature/anchor verification. + signer_chain: Option<Vec<Vec<u8>>>, +} + +impl ServtdCorim { + /// Decode the TCB Mapping CoRIM blob (CBOR, `#6.501` unsigned wrapper) and + /// validate it structurally per draft-ietf-rats-corim-10. + /// `now_epoch_secs` evaluates any embedded validity windows. + /// + /// Signature verification of the surrounding `COSE_Sign1` envelope is the + /// caller's responsibility; this input is the inner payload bytes. + pub fn decode(tcb_mapping_cbor: &[u8], now_epoch_secs: i64) -> Result<Self, PolicyError> { + let (_c1, tcb_mapping) = decode_and_validate_at(tcb_mapping_cbor, now_epoch_secs) + .map_err(|_| PolicyError::InvalidServtdTcbMapping)?; + validate_unique_hash_svns(&tcb_mapping)?; + Ok(Self { + tcb_mapping, + signer_chain: None, + }) + } + + /// Decode from the **signed** TCB Mapping CoRIM document + /// (`COSE_Sign1-corim`, `#6.18`) shipped in the `.cose` file, verifying the + /// signature before any payload byte is trusted. + /// + /// The COSE envelope is parsed, its embedded RFC 9360 `x5chain` and ES384 + /// signature are verified, and the chain's trust anchor is bound to + /// `expected_signer_anchor` — the RTMR1-measured policy signer anchor + /// derived from the CFV policy issuer chain (see [`compute_signer_anchor`]). + /// This ties the CoRIM signer to the exact root-of-trust the firmware + /// measured at boot, mirroring how the legacy JSON collateral is rooted in + /// the measured policy issuer chain. Only after the anchor matches is the + /// inner CoRIM payload (`bstr .cbor #6.501(corim-map)`) extracted and + /// decoded via [`decode`](Self::decode). + pub fn decode_signed( + tcb_mapping_cose: &[u8], + now_epoch_secs: i64, + expected_signer_anchor: &[u8; SHA384_DIGEST_SIZE], + ) -> Result<Self, PolicyError> { + let (tcb_payload, signer_chain) = + verify_and_extract_payload(tcb_mapping_cose, expected_signer_anchor) + .map_err(|_| PolicyError::InvalidServtdTcbMapping)?; + let mut corim = Self::decode(&tcb_payload, now_epoch_secs)?; + corim.signer_chain = Some(signer_chain); + Ok(corim) + } + + /// Apply an authenticated servTD CRL to the verified COSE signer chain. + /// + /// The CRL must come from the local measured policy. Peer-supplied CRLs + /// must never be passed here as authority. + pub fn verify_signer_chain_not_revoked(&self, servtd_crl: &[u8]) -> Result<(), PolicyError> { + let signer_chain = self + .signer_chain + .as_ref() + .ok_or(PolicyError::SignatureVerificationFailed)?; + let signer_chain: Vec<&[u8]> = signer_chain.iter().map(|cert| cert.as_slice()).collect(); + crypto::verify_signer_chain_not_revoked(crypto::SignerChain::Der(&signer_chain), servtd_crl) + .map_err(|_| PolicyError::SignerRevoked) + } + + /// Resolve `SERVTD_INFO_HASH -> isvsvn` via the TCB Mapping CES triples. + /// + /// The digest is matched by **value** only; the producer currently labels + /// the 48-byte SHA-384 ServTD info hash with the SHA-256 algorithm id + /// (see the design-review gap note), so the algorithm field is not + /// enforced here. + fn svn_for_hash(&self, hash: &[u8]) -> Option<u16> { + for comid in &self.tcb_mapping { + let Some(ces_list) = comid.triples.conditional_endorsement_series.as_ref() else { + continue; + }; + for ces in ces_list { + if let Some(svn) = ces_svn_for_hash(ces, hash) { + return Some(svn); + } + } + } + None + } + + /// Number of CoMID tags in the TCB Mapping document. Exposed for + /// diagnostics. + pub fn comid_count(&self) -> usize { + self.tcb_mapping.len() + } + + /// Resolve the MigTD ISV SVN for the MigTD whose masked `TDINFO_STRUCT` + /// hashes to `tdinfo_hash` (the 48-byte `init/cur_servtd_info_hash`). + /// Returns `None` if the hash is not endorsed by this CoRIM. + pub fn lookup_by_tdinfo_hash(&self, tdinfo_hash: &[u8]) -> Option<ServtdLookup> { + let isvsvn = self.svn_for_hash(tdinfo_hash)?; + // The CoRIM path endorses `hash -> SVN` only; there is no CoRIM form of + // TD Identity, so date/status are left unset. + Some(ServtdLookup { + isvsvn, + tcb_date: None, + tcb_status: None, + }) + } +} + +// ---- COSE_Sign1 envelope + signature verification -------------------------- + +/// Verify a signed `COSE_Sign1-corim` (`#6.18`) and return its attached CoRIM +/// payload bytes (`bstr .cbor #6.501(corim-map)`) plus the verified `x5chain`. +/// +/// The signature and RTMR1-anchor checks are performed before any byte is +/// returned. The caller retains the returned chain and applies the locally +/// authoritative servTD CRL before trusting the CoRIM: +/// 1. Parse the COSE envelope; require an **attached** payload. +/// 2. Require the protected `alg` to be ES384/ESP384 (ECDSA-P384/SHA-384) and +/// an RFC 9360 `x5chain` to be present. +/// 3. Verify the x5chain integrity and the COSE signature over the +/// `Sig_structure1` TBS (delegated to the `crypto` crate). +/// 4. Bind the chain's root plus **any** EKU purpose the leaf asserts to +/// `expected_signer_anchor` — the RTMR1-measured policy signer anchor — so +/// the CoRIM signer is the same root-of-trust the firmware measured from the +/// CFV. The anchor is recomputed for each asserted purpose and one must +/// reproduce the measured value; otherwise it is fatal (fail-closed). +fn verify_and_extract_payload( + cose: &[u8], + expected_signer_anchor: &[u8; SHA384_DIGEST_SIZE], +) -> Result<(Vec<u8>, Vec<Vec<u8>>), PolicyError> { + let envelope = + decode_signed_corim(cose).map_err(|_| PolicyError::SignatureVerificationFailed)?; + + if has_cwt_time_claims(envelope.protected.cwt_claims.as_ref()) { + return Err(PolicyError::SignatureVerificationFailed); + } + + // Only ECDSA-P384/SHA-384 is supported by the crypto crate. Accept both + // the deprecated polymorphic ES384 (-35, what the producer emits today) + // and its fully-specified RFC 9864 replacement ESP384 (-51). + match envelope.protected.alg { + CoseAlgorithm::Es384 | CoseAlgorithm::Esp384 => {} + _ => return Err(PolicyError::SignatureVerificationFailed), + } + + let x5chain = envelope + .protected + .x5chain + .as_ref() + .ok_or(PolicyError::SignatureVerificationFailed)?; + let certs = x5chain.certs(); + + let tbs = envelope + .to_be_signed(&[]) + .map_err(|_| PolicyError::SignatureVerificationFailed)?; + + let (root_der, leaf_eku_oids_der) = + crypto::verify_cose_sign1_es384_x5chain(&certs, &tbs, &envelope.signature) + .map_err(|_| PolicyError::SignatureVerificationFailed)?; + + // Anchor-first match: the signer leaf may assert the dedicated MigTD + // policy-signer purpose alongside unrelated EKUs (e.g. a code-signing OID). + // Recompute the signer anchor for each asserted purpose and accept iff one + // reproduces the RTMR1-measured `expected_signer_anchor` under the presented + // root. This binds the CoRIM signer to the measured root-of-trust without + // the firmware hard-coding which EKU OID identifies the signer. + let mut anchor_matches = false; + for leaf_eku_oid_der in &leaf_eku_oids_der { + if compute_signer_anchor(&root_der, leaf_eku_oid_der)? == *expected_signer_anchor { + anchor_matches = true; + break; + } + } + if !anchor_matches { + return Err(PolicyError::SignatureVerificationFailed); + } + + let payload = envelope + .payload + .ok_or(PolicyError::SignatureVerificationFailed)?; + let signer_chain = certs.iter().map(|cert| cert.to_vec()).collect(); + Ok((payload, signer_chain)) +} + +fn has_cwt_time_claims(claims: Option<&CwtClaims>) -> bool { + matches!(claims, Some(claims) if claims.nbf.is_some() || claims.exp.is_some()) +} + +// ---- Environment matching -------------------------------------------------- + +/// Both documents now share `class = { vendor: "Intel", model: "TDX" }` and +/// `instance = #6.560("migration-td")`. A triple is in the migration-TD +/// environment iff both match. +fn is_migration_td_environment(env: &EnvironmentMap) -> bool { + use corim::types::common::InstanceIdChoice; + + let class_ok = env + .class + .as_ref() + .map(|c| { + c.vendor.as_deref() == Some(CLASS_VENDOR) && c.model.as_deref() == Some(CLASS_MODEL) + }) + .unwrap_or(false); + + let instance_ok = matches!( + env.instance.as_ref(), + Some(InstanceIdChoice::Bytes(b)) if b.as_slice() == MIGRATION_TD_INSTANCE_BYTES + ); + + class_ok && instance_ok +} + +// ---- TCB Mapping (CES) helpers -------------------------------------------- + +/// If this CES triple is in the migration-TD environment and its first +/// series record selects on `hash`, return the SVN it adds. +fn ces_svn_for_hash(ces: &ConditionalEndorsementSeriesTriple, hash: &[u8]) -> Option<u16> { + if !is_migration_td_environment(&ces.condition().environment) { + return None; + } + for record in ces.series() { + let selected = record + .selection() + .first() + .and_then(digest_value) + .map(|d| d == hash) + .unwrap_or(false); + if !selected { + continue; + } + if let Some(svn) = record.addition().first().and_then(svn_exact) { + return u16::try_from(svn).ok(); + } + } + None +} + +/// First digest value of a measurement (the ServTD info hash). +fn digest_value(m: &MeasurementMap) -> Option<&[u8]> { + Some(m.mval.digests.as_ref()?.first()?.value()) +} + +/// The exact SVN carried by a measurement's `mval.svn`, if present. +fn svn_exact(m: &MeasurementMap) -> Option<u64> { + match m.mval.svn { + Some(SvnChoice::ExactValue(n)) => Some(n), + _ => None, + } +} + +fn validate_unique_hash_svns(tcb_mapping: &[ComidTag]) -> Result<(), PolicyError> { + let mut mappings = BTreeMap::<Vec<u8>, u16>::new(); + + for comid in tcb_mapping { + let Some(ces_list) = comid.triples.conditional_endorsement_series.as_ref() else { + continue; + }; + for ces in ces_list { + if !is_migration_td_environment(&ces.condition().environment) { + continue; + } + for record in ces.series() { + let Some(hash) = record.selection().first().and_then(digest_value) else { + continue; + }; + let Some(svn) = record + .addition() + .first() + .and_then(svn_exact) + .and_then(|svn| u16::try_from(svn).ok()) + else { + continue; + }; + + if let Some(previous) = mappings.insert(hash.to_vec(), svn) { + if previous != svn { + return Err(PolicyError::InvalidServtdTcbMapping); + } + } + } + } + } + + Ok(()) +} + +#[cfg(test)] +mod test { + use super::*; + use alloc::{vec, vec::Vec}; + use corim::{ + builder::{ComidBuilder, CorimBuilder}, + types::{ + common::{InstanceIdChoice, TagIdChoice}, + corim::CorimId, + environment::{ClassMap, EnvironmentMap}, + measurement::{Digest, MeasurementValuesMap}, + signed::SignedCorimBuilder, + triples::{CesCondition, ConditionalSeriesRecord, ReferenceTriple}, + }, + }; + + /// Producer's (mislabeled) digest alg id — see the SHA-256/SHA-384 gap. + const SHA256_ALG: i64 = 1; + + fn class() -> ClassMap { + ClassMap { + class_id: None, + vendor: Some(CLASS_VENDOR.into()), + model: Some(CLASS_MODEL.into()), + layer: None, + index: None, + } + } + + fn migration_td_env() -> EnvironmentMap { + EnvironmentMap { + class: Some(class()), + instance: Some(InstanceIdChoice::Bytes( + MIGRATION_TD_INSTANCE_BYTES.to_vec(), + )), + group: None, + } + } + + fn ref_triple(hash: &[u8]) -> ReferenceTriple { + ReferenceTriple::new( + migration_td_env(), + vec![MeasurementMap { + mkey: None, + mval: MeasurementValuesMap { + digests: Some(vec![Digest::new(SHA256_ALG, hash.to_vec())]), + ..MeasurementValuesMap::new() + }, + authorized_by: None, + }], + ) + } + + fn ces_triple(hash: &[u8], svn: u16) -> ConditionalEndorsementSeriesTriple { + let condition = CesCondition { + environment: migration_td_env(), + claims_list: Vec::new(), + authorized_by: None, + }; + let selection = MeasurementMap { + mkey: None, + mval: MeasurementValuesMap { + digests: Some(vec![Digest::new(SHA256_ALG, hash.to_vec())]), + ..MeasurementValuesMap::new() + }, + authorized_by: None, + }; + let addition = MeasurementMap { + mkey: None, + mval: MeasurementValuesMap { + svn: Some(SvnChoice::ExactValue(svn as u64)), + ..MeasurementValuesMap::new() + }, + authorized_by: None, + }; + ConditionalEndorsementSeriesTriple::new( + condition, + vec![ConditionalSeriesRecord::new( + vec![selection], + vec![addition], + )], + ) + } + + /// Build a TCB Mapping CoRIM mirroring `TcbMappingCorim::add_release`: + /// a reference-triple plus a CES triple per `(hash, svn)`. + fn build_tcb_mapping(entries: &[(Vec<u8>, u16)]) -> Vec<u8> { + let mut comid = ComidBuilder::new(TagIdChoice::Text("migtd-tcb-mapping".into())); + for (hash, svn) in entries { + comid = comid.add_reference_triple(ref_triple(hash)); + comid = comid.add_conditional_endorsement_series(ces_triple(hash, *svn)); + } + let comid = comid.build().expect("build tcb-mapping comid"); + CorimBuilder::new(CorimId::Text("migtd-tcb-mapping".into())) + .add_comid_tag(comid) + .expect("attach comid") + .build_bytes() + .expect("encode corim") + } + + fn hash(byte: u8) -> Vec<u8> { + vec![byte; 48] + } + + #[test] + fn hash_lookup_resolves_svn() { + let tcb = build_tcb_mapping(&[(hash(0xAA), 5), (hash(0xBB), 7)]); + let provider = ServtdCorim::decode(&tcb, 0).expect("decode"); + assert_eq!(provider.comid_count(), 1); + + let hit = provider.lookup_by_tdinfo_hash(&hash(0xAA)).expect("match"); + assert_eq!(hit.isvsvn, 5); + + let hit2 = provider.lookup_by_tdinfo_hash(&hash(0xBB)).expect("match"); + assert_eq!(hit2.isvsvn, 7); + } + + #[test] + fn duplicate_hash_with_same_svn_is_valid() { + let tcb = build_tcb_mapping(&[(hash(0xAA), 5), (hash(0xAA), 5)]); + let provider = ServtdCorim::decode(&tcb, 0).expect("decode"); + let hit = provider.lookup_by_tdinfo_hash(&hash(0xAA)).expect("match"); + assert_eq!(hit.isvsvn, 5); + } + + #[test] + fn conflicting_duplicate_hash_is_invalid() { + let tcb = build_tcb_mapping(&[(hash(0xAA), 5), (hash(0xAA), 7)]); + assert!(matches!( + ServtdCorim::decode(&tcb, 0), + Err(PolicyError::InvalidServtdTcbMapping) + )); + } + + #[test] + fn unknown_hash_misses() { + let tcb = build_tcb_mapping(&[(hash(0xAA), 5)]); + let provider = ServtdCorim::decode(&tcb, 0).expect("decode"); + assert!(provider.lookup_by_tdinfo_hash(&hash(0xCC)).is_none()); + } + + #[test] + fn wrong_length_hash_misses() { + let tcb = build_tcb_mapping(&[(hash(0xAA), 5)]); + let provider = ServtdCorim::decode(&tcb, 0).expect("decode"); + assert!(provider.lookup_by_tdinfo_hash(&[0xAA; 32]).is_none()); + } + + /// Interop regression: decode the inner CoRIM payload from a real + /// pipeline-signed sample (envelope stripped) and resolve the endorsed + /// release `347c6170…79286384 -> svn 1`. + #[test] + fn interop_with_producer() { + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cbor"); + let provider = ServtdCorim::decode(tcb, 0).expect("decode producer CoRIM CBOR"); + + let mut hash = [0u8; 48]; + hex_decode( + "347c6170a91341351937962e08a7695703e7b87984b1c69216372c380302ac42\ + 0d42381e4585007057b20b2579286384", + &mut hash, + ); + let hit = provider + .lookup_by_tdinfo_hash(&hash) + .expect("sample hash -> svn 1"); + assert_eq!(hit.isvsvn, 1); + + assert!(provider.lookup_by_tdinfo_hash(&[0xCC; 48]).is_none()); + } + + #[test] + fn rejects_cwt_nbf_and_exp_claims() { + assert!(!has_cwt_time_claims(Some(&CwtClaims::new("test-signer")))); + assert!(has_cwt_time_claims(Some( + &CwtClaims::new("test-signer").with_nbf(1) + ))); + assert!(has_cwt_time_claims(Some( + &CwtClaims::new("test-signer").with_exp(-1) + ))); + + let payload = build_tcb_mapping(&[(hash(0xAA), 5)]); + let claims = CwtClaims::new("test-signer").with_nbf(1).with_exp(-1); + let cose = SignedCorimBuilder::new(CoseAlgorithm::Es384, payload) + .set_cwt_claims(claims) + .build_with_signature(vec![0; 96]) + .expect("build signed CoRIM"); + assert!(matches!( + verify_and_extract_payload(&cose, &[0; SHA384_DIGEST_SIZE]), + Err(PolicyError::SignatureVerificationFailed) + )); + } + + /// End-to-end with a real signed `COSE_Sign1` pipeline sample: verify the + /// envelope's ES384 signature + `x5chain`, bind the signer to the RTMR1 + /// signer anchor, then resolve a hash. The sample endorses a single + /// release: `347c6170…79286384 -> svn 1`. + #[test] + fn interop_with_signed_cose_samples() { + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cose"); + + // The anchor the firmware would measure into RTMR1 for this signer. + // Deriving it exercises the real ES384 + chain verification path. + let anchor = signer_anchor_from_sample(tcb); + + // 2025-01-01T00:00:00Z — inside the endorsement validity window. + let provider = + ServtdCorim::decode_signed(tcb, 1_735_689_600, &anchor).expect("decode signed COSE"); + + let mut hash = [0u8; 48]; + hex_decode( + "347c6170a91341351937962e08a7695703e7b87984b1c69216372c380302ac42\ + 0d42381e4585007057b20b2579286384", + &mut hash, + ); + let hit = provider + .lookup_by_tdinfo_hash(&hash) + .expect("signed-sample hash -> svn 1"); + assert_eq!(hit.isvsvn, 1); + } + + /// Fail-closed: a signer anchor that does not match the COSE x5chain's + /// root-of-trust must be rejected, even though the signature itself is + /// cryptographically valid. This is the RTMR1 binding that ties the CoRIM + /// signer to the firmware-measured policy issuer. + #[test] + fn signed_cose_rejects_unmeasured_signer() { + let tcb = include_bytes!("../../test/policy_v2/corim/tcb_mapping.cose"); + + let mut wrong = signer_anchor_from_sample(tcb); + wrong[0] ^= 0xFF; // any anchor other than the signer's + + assert!(ServtdCorim::decode_signed(tcb, 1_735_689_600, &wrong).is_err()); + } + + #[test] + fn signed_cose_accepts_non_revoked_signer_chain() { + let tcb = include_bytes!("../../test/policy_v2/corim/revocation/tcb_mapping.cose"); + let crl = include_bytes!("../../test/policy_v2/corim/revocation/crl_empty.pem"); + let anchor = signer_anchor_from_sample(tcb); + + let provider = ServtdCorim::decode_signed(tcb, 0, &anchor).expect("decode signed COSE"); + provider + .verify_signer_chain_not_revoked(crl) + .expect("non-revoked CoRIM signer should be accepted"); + } + + #[test] + fn signed_cose_rejects_revoked_leaf() { + let tcb = include_bytes!("../../test/policy_v2/corim/revocation/tcb_mapping.cose"); + let crl = include_bytes!("../../test/policy_v2/corim/revocation/crl_leaf_revoked.pem"); + let anchor = signer_anchor_from_sample(tcb); + + let provider = ServtdCorim::decode_signed(tcb, 0, &anchor).expect("decode signed COSE"); + assert!(matches!( + provider.verify_signer_chain_not_revoked(crl), + Err(PolicyError::SignerRevoked) + )); + } + + #[test] + fn signed_cose_rejects_revoked_intermediate() { + let tcb = include_bytes!("../../test/policy_v2/corim/revocation/tcb_mapping.cose"); + let crl = + include_bytes!("../../test/policy_v2/corim/revocation/crl_intermediate_revoked.pem"); + let anchor = signer_anchor_from_sample(tcb); + + let provider = ServtdCorim::decode_signed(tcb, 0, &anchor).expect("decode signed COSE"); + assert!(matches!( + provider.verify_signer_chain_not_revoked(crl), + Err(PolicyError::SignerRevoked) + )); + } + + #[test] + fn signed_cose_rejects_crl_from_wrong_authority() { + let tcb = include_bytes!("../../test/policy_v2/corim/revocation/tcb_mapping.cose"); + let wrong_crl = include_bytes!("../../../crypto/test/crl/crl_empty.pem"); + let anchor = signer_anchor_from_sample(tcb); + + let provider = ServtdCorim::decode_signed(tcb, 0, &anchor).expect("decode signed COSE"); + assert!(matches!( + provider.verify_signer_chain_not_revoked(wrong_crl), + Err(PolicyError::SignerRevoked) + )); + } + + /// Recover a signer anchor `A = compute_signer_anchor(root, leaf-EKU)` + /// from a sample's embedded x5chain, running the full signature + chain + /// verification on the way (so a tampered sample would fail here). The leaf + /// may assert several EKU purposes; any one of them reproduces an anchor + /// that `decode_signed`'s anchor-first match will accept, so the first + /// asserted purpose is used. + fn signer_anchor_from_sample(cose: &[u8]) -> [u8; SHA384_DIGEST_SIZE] { + let env = decode_signed_corim(cose).expect("decode COSE"); + let tbs = env.to_be_signed(&[]).expect("tbs"); + let chain = env.protected.x5chain.as_ref().expect("x5chain"); + let certs = chain.certs(); + let (root_der, leaf_eku_oids_der) = + crypto::verify_cose_sign1_es384_x5chain(&certs, &tbs, &env.signature) + .expect("verify signature"); + let leaf_eku_oid_der = leaf_eku_oids_der.first().expect("leaf asserts >= 1 EKU"); + compute_signer_anchor(&root_der, leaf_eku_oid_der).expect("anchor") + } + + fn hex_decode(s: &str, out: &mut [u8]) { + let bytes: Vec<u8> = s.bytes().filter(|b| !b.is_ascii_whitespace()).collect(); + assert_eq!(bytes.len(), out.len() * 2); + for (i, byte) in out.iter_mut().enumerate() { + let hi = (bytes[2 * i] as char).to_digit(16).unwrap() as u8; + let lo = (bytes[2 * i + 1] as char).to_digit(16).unwrap() as u8; + *byte = (hi << 4) | lo; + } + } +} diff --git a/src/policy/test/policy_v2/cert_chain/policy_issuer_chain.pem b/src/policy/test/policy_v2/cert_chain/policy_issuer_chain.pem index a96fc9001..8a43f97ec 100644 --- a/src/policy/test/policy_v2/cert_chain/policy_issuer_chain.pem +++ b/src/policy/test/policy_v2/cert_chain/policy_issuer_chain.pem @@ -1,45 +1,47 @@ -----BEGIN CERTIFICATE----- -MIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw +MIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw dDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy YTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV -TWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1 -NTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50 +TWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy +MjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50 YSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ -bmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z -Wc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b -y2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE -FHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl -W1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH -tMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz -cCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X +bmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl +Uy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb +tIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/ +BAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA +xB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG +CCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt +aFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim +3TOl4G9HofEZt+KxtJ2RtWDESw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw +MIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw XzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy YTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB -MB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx +MB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx CzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln VEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp -YXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu -mwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH -XrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB -aNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8 -FY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU -XtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu -QDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr +YXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX +OeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4 +ARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd +/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD +aAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l +gSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d +zw3fC7CR1QR/ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw +MIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw XzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy YTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB -MB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx +MB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx CzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln VEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd -ArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK -xW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD -VR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK -BggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v -f4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W -rPSb+wS9KsT0dcF2DU5F12BycQ== +K4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4 +e4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa +avI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD +VR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK +BggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM +mtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7 +HFibzfq7pmApshWt7mQ80fRu/Q== -----END CERTIFICATE----- diff --git a/src/policy/test/policy_v2/cert_chain/unrelated_issuer_chain.pem b/src/policy/test/policy_v2/cert_chain/unrelated_issuer_chain.pem new file mode 100644 index 000000000..6384c928b --- /dev/null +++ b/src/policy/test/policy_v2/cert_chain/unrelated_issuer_chain.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIICBjCCAYygAwIBAgIUQfMe6jmoFe9dKYc/KLiGbCVu8UwwCgYIKoZIzj0EAwMw +LjETMBEGA1UECgwKTWlnVEQgVGVzdDEXMBUGA1UEAwwOVW5yZWxhdGVkIFJvb3Qw +HhcNMjYwNzIxMDIyMzUzWhcNMjcwNzIxMDIyMzUzWjAwMRMwEQYDVQQKDApNaWdU +RCBUZXN0MRkwFwYDVQQDDBBVbnJlbGF0ZWQgU2lnbmVyMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEWnV5+gwl2L6dTssw0MKmMgk67fGGYbo/1BCspyv3A4SRtrFBg2Ph +t4947ks9JN9+ESfRjl7J18mQOGPGowl75tnkmGqbWP9hFHIt5j+C0nMqn/HVgxj4 +lxD+G34fqfFeo2kwZzAOBgNVHQ8BAf8EBAMCB4AwFQYDVR0lBA4wDAYKKwYBBAGB +/VkBATAdBgNVHQ4EFgQUIRIBLqLwgx1nFT2PRgfdxNIyO10wHwYDVR0jBBgwFoAU +OHmmIU1AaFhoVBcxouAB7zUublUwCgYIKoZIzj0EAwMDaAAwZQIwQC2ttTNpmekr +zP0Hqsg3fC94PPEFKiS8JRU6xFE/mQZ/Ri9N5Z/gb3nNHbYYr5HiAjEAi9GvSGXz +u7s6+mMPUUDxcSuMFEac0b2QY0aJVJfLILKk6SfVthqJlEr/s2VFv/Ga +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB/TCCAYSgAwIBAgIUAmNEj7QEN9MI389PBHKUDSAPsFYwCgYIKoZIzj0EAwMw +LjETMBEGA1UECgwKTWlnVEQgVGVzdDEXMBUGA1UEAwwOVW5yZWxhdGVkIFJvb3Qw +HhcNMjYwNzIxMDIyMzUzWhcNMzYwNzE4MDIyMzUzWjAuMRMwEQYDVQQKDApNaWdU +RCBUZXN0MRcwFQYDVQQDDA5VbnJlbGF0ZWQgUm9vdDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABJ7lRkmM4Vtfg5EU1m9Rk7pmoYs22v5/o4TuYQ9v3qarf93tuRtOslf4 +eSnUjLnmszpWSkCAeCFwCrdnFjKQDIoJaoUTVQ7p/VNOrwvaWMLkehh0ZkjIh3Be +EeIpPZ7sFaNjMGEwHQYDVR0OBBYEFDh5piFNQGhYaFQXMaLgAe81Lm5VMB8GA1Ud +IwQYMBaAFDh5piFNQGhYaFQXMaLgAe81Lm5VMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMBi5nqaDACPqS3FisL3Up2Qs +QaPM86RuGNUrtxGhFkwZJ2O5CPGPkGE1N+VwAwUKFAIwMIwQgwLlImffkOOXaJuh +c28+AwkuqV/ZyUsd8ylMLvn97l9+ArC5CnpPOpUdvrOc +-----END CERTIFICATE----- diff --git a/src/policy/test/policy_v2/corim/revocation/crl_empty.pem b/src/policy/test/policy_v2/corim/revocation/crl_empty.pem new file mode 100644 index 000000000..3c1d91d88 --- /dev/null +++ b/src/policy/test/policy_v2/corim/revocation/crl_empty.pem @@ -0,0 +1,7 @@ +-----BEGIN X509 CRL----- +MIHsMHQCAQEwCgYIKoZIzj0EAwMwNDEeMBwGA1UEAwwVTWlnVEQgQ29SSU0gVGVz +dCBSb290MRIwEAYDVQQKDAlNaWNyb3NvZnQXDTI2MDcyNjA0MTA1MloXDTM2MDcy +MzA0MTA1MlqgDzANMAsGA1UdFAQEAgIQADAKBggqhkjOPQQDAwNoADBlAjA4+7BY +QS8BS+2OodUXEk+c3Np1Ygcbhz92WDGTjkGIW1km5gcyyp/xrxCjlNSMsEUCMQCk +ju72mtW/Fm20r2Q5Vm81VuAxh79kku3F4wLL1ISZ5andXR5BIU7LKdcak6cDPBA= +-----END X509 CRL----- diff --git a/src/policy/test/policy_v2/corim/revocation/crl_intermediate_revoked.pem b/src/policy/test/policy_v2/corim/revocation/crl_intermediate_revoked.pem new file mode 100644 index 000000000..768ce4876 --- /dev/null +++ b/src/policy/test/policy_v2/corim/revocation/crl_intermediate_revoked.pem @@ -0,0 +1,8 @@ +-----BEGIN X509 CRL----- +MIIBBDCBiwIBATAKBggqhkjOPQQDAzA0MR4wHAYDVQQDDBVNaWdURCBDb1JJTSBU +ZXN0IFJvb3QxEjAQBgNVBAoMCU1pY3Jvc29mdBcNMjYwNzI2MDQxMDUyWhcNMzYw +NzIzMDQxMDUyWjAVMBMCAhAAFw0yNjA3MjYwNDEwNTJaoA8wDTALBgNVHRQEBAIC +EAEwCgYIKoZIzj0EAwMDaAAwZQIwaKkOus0qoJpaaK4/zKfPmkw7KiQj9LlD+0QX +qd8vseW4XqjpPD+/6mLbGF6F2CyvAjEAov+Z1hG+ApWlNKpDcGS1LvEdbbAFDE49 +EYo0TTM0psG34bHqPxhM+VboaIJ56fgp +-----END X509 CRL----- diff --git a/src/policy/test/policy_v2/corim/revocation/crl_leaf_revoked.pem b/src/policy/test/policy_v2/corim/revocation/crl_leaf_revoked.pem new file mode 100644 index 000000000..94e86a012 --- /dev/null +++ b/src/policy/test/policy_v2/corim/revocation/crl_leaf_revoked.pem @@ -0,0 +1,8 @@ +-----BEGIN X509 CRL----- +MIIBCzCBkwIBATAKBggqhkjOPQQDAzA8MSYwJAYDVQQDDB1NaWdURCBDb1JJTSBU +ZXN0IEludGVybWVkaWF0ZTESMBAGA1UECgwJTWljcm9zb2Z0Fw0yNjA3MjYwNDEw +NTJaFw0zNjA3MjMwNDEwNTJaMBUwEwICIAAXDTI2MDcyNjA0MTA1MlqgDzANMAsG +A1UdFAQEAgIgADAKBggqhkjOPQQDAwNnADBkAjAfNeYUhGhOESpUJwLEPbnHWsg5 +WS/73u8YHWAFWgVTdypFmhI8u5KX38Yy+7ovsmECMEyv2uWDRwTscE/51JXay4Si +cjnV9Vxr7n0nZbCLUPaGjfhQEs76PuJ2lVg7RH8+Vw== +-----END X509 CRL----- diff --git a/src/policy/test/policy_v2/corim/revocation/tcb_mapping.cose b/src/policy/test/policy_v2/corim/revocation/tcb_mapping.cose new file mode 100644 index 000000000..ac4164878 Binary files /dev/null and b/src/policy/test/policy_v2/corim/revocation/tcb_mapping.cose differ diff --git a/src/policy/test/policy_v2/corim/tcb_mapping.cbor b/src/policy/test/policy_v2/corim/tcb_mapping.cbor new file mode 100644 index 000000000..f37e5fb3e Binary files /dev/null and b/src/policy/test/policy_v2/corim/tcb_mapping.cbor differ diff --git a/src/policy/test/policy_v2/corim/tcb_mapping.cose b/src/policy/test/policy_v2/corim/tcb_mapping.cose new file mode 100644 index 000000000..4dd0b3539 Binary files /dev/null and b/src/policy/test/policy_v2/corim/tcb_mapping.cose differ diff --git a/src/policy/test/policy_v2/policy_data.json b/src/policy/test/policy_v2/policy_data.json index ff5daf9c4..3f4f40f14 100644 --- a/src/policy/test/policy_v2/policy_data.json +++ b/src/policy/test/policy_v2/policy_data.json @@ -1 +1 @@ -{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":13},"tcbDate":{"operation":"greater-or-equal","reference":"2025-01-01T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjUxMDIx\nMTAwMDQ1WhcNMjUxMTIwMTAwMDQ1WqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIhAMyASL3c\nx2EzWL2vYSgVohy/wFV4CRDaDjg+jr2a1hiMAiBJ0EydeGFHj8SHaGyDwXOVzpJR\nL3cPZdDrut6pXRKdUw==\n-----END X509 CRL-----\n","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:35Z\",\"nextUpdate\":\"2025-11-20T09:44:35Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"6f9cf0afa28bc6434a141f849c0920d842b8ec1651cc3bffb1fecc916af91195b750950fbea44e0071bd1a3647d7a55ea9a0fe0c58f66ef700e3aa2b4616405b\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:36Z\",\"nextUpdate\":\"2025-11-20T09:44:36Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"70c93242def0bf52e292ffb548ad3a219d9be54e0764d0c28fe5a6805c2321f02dc8de8dc93dcaf5d8dfbcda869af8be9ea3fc07d3dd64f6652ec77c7bb14f7d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:37Z\",\"nextUpdate\":\"2025-11-20T09:44:37Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a3a55dc486f550f535978f890365b03fcdcba8c90a273bdec1d57bc7f501dd108d514feb445d0521c28110a02384b13415dd0a9497651e15f8e61532fa92c64b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:47:41Z\",\"nextUpdate\":\"2025-11-20T09:47:41Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"00d8093fe0e80be196794b1876b376ea41bb44d7af2bbc0814bf2d2bc800a4107652ebf346ab852035b2fca22c557887e5f89a40382569392be6d66139e6f10f\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:40Z\",\"nextUpdate\":\"2025-11-20T09:44:40Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"056f99c9823ba9a8215898756d866c0dd22a88ebfb39762c84cb72b2873c1af32b59cd551fc8a236e2dcc61413f0634548291a34cafbc985a3a0e6d4a6b13286\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:42Z\",\"nextUpdate\":\"2025-11-20T09:44:42Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"96959d2b488667845e33570700387b0ecf19210a3056859b310c8b87873e58f94cc0cdb11e0a4328948abb952b5c91dce0199582a39b596a089bfd99bc630412\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:43Z\",\"nextUpdate\":\"2025-11-20T09:44:43Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a014048ff8bed6c8eb8f040fd730944dc797c0a81410888637ede908b56d150ccabd352b46d1d692d8bdcfd4c908c8c66f6c5a63a3065f5cb81c84a3e405c3ac\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:44Z\",\"nextUpdate\":\"2025-11-20T09:44:44Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"34a7fdc12879c5fd74642251c896d41c05fd3cf89c633c7640f8799b3de88e5607d602b89aa525a5ae5febcad8846e6e3d6dd08ca12199aa762f64e7fd843d07\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:46Z\",\"nextUpdate\":\"2025-11-20T09:44:46Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"10721ed2805aa913b76ccd8ee6eedf18f8db70573ab158ae6f1d8c1fc9529babc81af8866965afae550479ee1621383ff03bcfb8d9c5ca3ee50bfcb3ae2be73e\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:47Z\",\"nextUpdate\":\"2025-11-20T09:44:47Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"6759cb09cb2686414749b863a284273c587fd7825106c1f854b3249901d3fecaef8b152b5b947540ad1f49c04f5031f3681ad8ac4bcad5c54b6ae72c0c26f2d7\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:48Z\",\"nextUpdate\":\"2025-11-20T09:44:48Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"6639a8db412a07e163db290e36b63594f7fa2409184e96c952454bef4a6034c937cb629a49e92a57eae3a6dee1d1b77617389c9095b2d5c7569f8335512be132\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:50Z\",\"nextUpdate\":\"2025-11-20T09:44:50Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"03e210a7e12af4a3b1f1eca77b30ef3e52b262a53681dc31733c58face31945d71ebce458af7422a72910d3dc7a7641ff1e05843bab16eda0429bf91ae72b527\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:51Z\",\"nextUpdate\":\"2025-11-20T09:44:51Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f789a0cdbbcb4475e988ff598cf63e1640f23c9c340e3cdd2ecd8e99607511be1d020d02bda4b7e5364bdf2f251ad72965519fb578fee1efa86927bdc8279690\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:52Z\",\"nextUpdate\":\"2025-11-20T09:44:52Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c97da1d2116279e490db192e5daf7793951473da3a231e09309b882a1e02528f3efe56ff9fff0f718db1aa94aeba4c9256d435e51c075aab5af85db2e43c109e\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:53Z\",\"nextUpdate\":\"2025-11-20T09:44:53Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ba5cbb2dfd8589a8de85243b8c376a07016d3e8d4eecadc0803e909dfb829b05e1978362fb17dddad611190eced87431ea138bd743cb165ded7dcc2fc8de9c70\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:54Z\",\"nextUpdate\":\"2025-11-20T09:44:54Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"e0080569485b49d471cb1fb0246a089e90d3f8b4f696d586cf40b87d4ea7ec711ccc63a4bb5023417575ec2e62c99ae1e0a0ac8514fb2b7c919552dfb15c2687\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:55Z\",\"nextUpdate\":\"2025-11-20T09:44:55Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7b47307324b11bb25a8c13ee295f052290ea5e50ff216fb59ec5b5fba4ac363da03b98c930c347501d4654438ee1c4dd2e5a6bf4001419d3f79c90ce483340eb\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:56Z\",\"nextUpdate\":\"2025-11-20T09:44:56Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4208d603a0c646cdfba3a764de628aabf599d844ec36901373d8b70b0b03dedac28ad21769cf7d288045936e43f520f9cbd38cd4a09ae770fef67c1508b35300\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:57Z\",\"nextUpdate\":\"2025-11-20T09:44:57Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"274fed414afb6217575b8487ca1554d61bc5092f0085c89b9aac7b3f7585a679723f843828d695626927af11bc2b9f0f7a50243cef471ebdd664a0f6db391e75\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:58Z\",\"nextUpdate\":\"2025-11-20T09:44:58Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ae4a3c73b3ca87ae3a897baf0f0a62c5ae335a00a39118e9be8dcd28e2bd3bbb8be7e56293617f27f2d10e0282eefc6d4b965505774dca4b7478febdd654b040\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:59Z\",\"nextUpdate\":\"2025-11-20T09:44:59Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8be7cbb359c180b54d61066ee4a120662bb721e863754557705c5d591a4df70d18bea90fe309958448422dcc7ef55d1cf26b44d6a9c15ec733f30f74d87800d1\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:00Z\",\"nextUpdate\":\"2025-11-20T09:45:00Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"96930bf1e63d69a94325123ff73ec127f670267d15e23fe119ae226354bc7c53707c1fd812d3e6648639883d81709494d96d6061e71c586f6f4d5ff743337587\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:01Z\",\"nextUpdate\":\"2025-11-20T09:45:01Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"02e92c4d0dedf02a2a11522b8626d426da8dc5d3be26e66bd11039b9786fe88bf65e07257a06d16fb570a3304261b3c35952b686423e84ac8bdc5038d417deb3\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:02Z\",\"nextUpdate\":\"2025-11-20T09:45:02Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5e1784749fd8b95b4c8773833a1041cfd2b85f13658fa22cd69a3f9de9cc43d371a3eef0de86d3effe08dc4a1dca81dcf3ab65344a222ea9523a8726772c3aa5\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:03Z\",\"nextUpdate\":\"2025-11-20T09:45:03Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"25f80ad77ef746554afc7104f58b7ec995a19150738c71029e0a0137ecf1b3af439affe7f4d9f8c298852d71f3fa516f4127eb6147ffc0965e6a5babf2fd8660\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:04Z\",\"nextUpdate\":\"2025-11-20T09:45:04Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7379d069530fd76842570f993ac8f615c509e3889fe93bb87e8b40faa46e3604ec2c21458af982065f7b392007d38a0fa12321e116379c82cfaefaa3ecaff21\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2025-10-21T09:44:31Z\",\"nextUpdate\":\"2025-11-20T09:44:31Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f1f88349d25691d01a443ae086d480cdbf525ea8593ec61a32e4f943c054b6df18677d26bd733c0542128940fd5c792ac11c6bb50a9750f1f8d60d9b674607a5\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1\nNTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z\nWc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b\ny2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE\nFHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl\nW1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH\ntMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz\ncCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu\nmwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH\nXrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB\naNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8\nFY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU\nXtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu\nQDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd\nArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK\nxW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD\nVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v\nf4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W\nrPSb+wS9KsT0dcF2DU5F12BycQ==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3064023028CAFFB4B83AD5A8E00A2FD7BDA58E176495E5591E1D9EB9FBC80FD0ABFDA06705B316AD2299BFCD07B82524336328A102306A11A93912045B2438FCD719F84F78D0CDB91CCFC9ED55FF49B47C518CC6071D0B5662E3AECAB78E786000C477A18773"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1\nNTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z\nWc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b\ny2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE\nFHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl\nW1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH\ntMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz\ncCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu\nmwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH\nXrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB\naNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8\nFY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU\nXtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu\nQDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd\nArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK\nxW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD\nVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v\nf4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W\nrPSb+wS9KsT0dcF2DU5F12BycQ==\n-----END CERTIFICATE-----\n","servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","mrSigner":"00000000000000000000000000000000","isvProdId":1,"svnMappings":[{"tdMeasurements":{"mrtd":"E2C7DA7CF0D93973480F0A34A6FE52A204EA81B4F1B6CD16018F5B4CAEE7B3B544A9738464A7C95E1705E20687A0ADA6","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4"},"isvsvn":1}]},"signature":"306602310096D8260507E3F02698895732273709837C0CBF42DA29AA0891A18F8F4FEC648826E1E0DFB5C590B953F65B5EFB77F0B8023100B18CC20F8EF7C1D4E1CBCAEFF17C0722AC6213A0B7E83FDD580CA760BBDA91D25E714CFA2240BCEBDF039646D749ED84"}}} \ No newline at end of file +{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"}} \ No newline at end of file diff --git a/src/policy/test/policy_v2/policy_v2.json b/src/policy/test/policy_v2/policy_v2.json index d914e6f4f..2edd0606a 100644 --- a/src/policy/test/policy_v2/policy_v2.json +++ b/src/policy/test/policy_v2/policy_v2.json @@ -1 +1 @@ -{"policyData":{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":13},"tcbDate":{"operation":"greater-or-equal","reference":"2025-01-01T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjUxMDIx\nMTAwMDQ1WhcNMjUxMTIwMTAwMDQ1WqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIhAMyASL3c\nx2EzWL2vYSgVohy/wFV4CRDaDjg+jr2a1hiMAiBJ0EydeGFHj8SHaGyDwXOVzpJR\nL3cPZdDrut6pXRKdUw==\n-----END X509 CRL-----\n","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:35Z\",\"nextUpdate\":\"2025-11-20T09:44:35Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"6f9cf0afa28bc6434a141f849c0920d842b8ec1651cc3bffb1fecc916af91195b750950fbea44e0071bd1a3647d7a55ea9a0fe0c58f66ef700e3aa2b4616405b\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:36Z\",\"nextUpdate\":\"2025-11-20T09:44:36Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"70c93242def0bf52e292ffb548ad3a219d9be54e0764d0c28fe5a6805c2321f02dc8de8dc93dcaf5d8dfbcda869af8be9ea3fc07d3dd64f6652ec77c7bb14f7d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:37Z\",\"nextUpdate\":\"2025-11-20T09:44:37Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a3a55dc486f550f535978f890365b03fcdcba8c90a273bdec1d57bc7f501dd108d514feb445d0521c28110a02384b13415dd0a9497651e15f8e61532fa92c64b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:47:41Z\",\"nextUpdate\":\"2025-11-20T09:47:41Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"00d8093fe0e80be196794b1876b376ea41bb44d7af2bbc0814bf2d2bc800a4107652ebf346ab852035b2fca22c557887e5f89a40382569392be6d66139e6f10f\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:40Z\",\"nextUpdate\":\"2025-11-20T09:44:40Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"056f99c9823ba9a8215898756d866c0dd22a88ebfb39762c84cb72b2873c1af32b59cd551fc8a236e2dcc61413f0634548291a34cafbc985a3a0e6d4a6b13286\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:42Z\",\"nextUpdate\":\"2025-11-20T09:44:42Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"96959d2b488667845e33570700387b0ecf19210a3056859b310c8b87873e58f94cc0cdb11e0a4328948abb952b5c91dce0199582a39b596a089bfd99bc630412\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:43Z\",\"nextUpdate\":\"2025-11-20T09:44:43Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a014048ff8bed6c8eb8f040fd730944dc797c0a81410888637ede908b56d150ccabd352b46d1d692d8bdcfd4c908c8c66f6c5a63a3065f5cb81c84a3e405c3ac\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:44Z\",\"nextUpdate\":\"2025-11-20T09:44:44Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"34a7fdc12879c5fd74642251c896d41c05fd3cf89c633c7640f8799b3de88e5607d602b89aa525a5ae5febcad8846e6e3d6dd08ca12199aa762f64e7fd843d07\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:46Z\",\"nextUpdate\":\"2025-11-20T09:44:46Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"10721ed2805aa913b76ccd8ee6eedf18f8db70573ab158ae6f1d8c1fc9529babc81af8866965afae550479ee1621383ff03bcfb8d9c5ca3ee50bfcb3ae2be73e\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:47Z\",\"nextUpdate\":\"2025-11-20T09:44:47Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"6759cb09cb2686414749b863a284273c587fd7825106c1f854b3249901d3fecaef8b152b5b947540ad1f49c04f5031f3681ad8ac4bcad5c54b6ae72c0c26f2d7\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:48Z\",\"nextUpdate\":\"2025-11-20T09:44:48Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"6639a8db412a07e163db290e36b63594f7fa2409184e96c952454bef4a6034c937cb629a49e92a57eae3a6dee1d1b77617389c9095b2d5c7569f8335512be132\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:50Z\",\"nextUpdate\":\"2025-11-20T09:44:50Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"03e210a7e12af4a3b1f1eca77b30ef3e52b262a53681dc31733c58face31945d71ebce458af7422a72910d3dc7a7641ff1e05843bab16eda0429bf91ae72b527\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:51Z\",\"nextUpdate\":\"2025-11-20T09:44:51Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f789a0cdbbcb4475e988ff598cf63e1640f23c9c340e3cdd2ecd8e99607511be1d020d02bda4b7e5364bdf2f251ad72965519fb578fee1efa86927bdc8279690\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:52Z\",\"nextUpdate\":\"2025-11-20T09:44:52Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c97da1d2116279e490db192e5daf7793951473da3a231e09309b882a1e02528f3efe56ff9fff0f718db1aa94aeba4c9256d435e51c075aab5af85db2e43c109e\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:53Z\",\"nextUpdate\":\"2025-11-20T09:44:53Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ba5cbb2dfd8589a8de85243b8c376a07016d3e8d4eecadc0803e909dfb829b05e1978362fb17dddad611190eced87431ea138bd743cb165ded7dcc2fc8de9c70\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:54Z\",\"nextUpdate\":\"2025-11-20T09:44:54Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"e0080569485b49d471cb1fb0246a089e90d3f8b4f696d586cf40b87d4ea7ec711ccc63a4bb5023417575ec2e62c99ae1e0a0ac8514fb2b7c919552dfb15c2687\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:55Z\",\"nextUpdate\":\"2025-11-20T09:44:55Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7b47307324b11bb25a8c13ee295f052290ea5e50ff216fb59ec5b5fba4ac363da03b98c930c347501d4654438ee1c4dd2e5a6bf4001419d3f79c90ce483340eb\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:56Z\",\"nextUpdate\":\"2025-11-20T09:44:56Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4208d603a0c646cdfba3a764de628aabf599d844ec36901373d8b70b0b03dedac28ad21769cf7d288045936e43f520f9cbd38cd4a09ae770fef67c1508b35300\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:57Z\",\"nextUpdate\":\"2025-11-20T09:44:57Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"274fed414afb6217575b8487ca1554d61bc5092f0085c89b9aac7b3f7585a679723f843828d695626927af11bc2b9f0f7a50243cef471ebdd664a0f6db391e75\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:58Z\",\"nextUpdate\":\"2025-11-20T09:44:58Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ae4a3c73b3ca87ae3a897baf0f0a62c5ae335a00a39118e9be8dcd28e2bd3bbb8be7e56293617f27f2d10e0282eefc6d4b965505774dca4b7478febdd654b040\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:44:59Z\",\"nextUpdate\":\"2025-11-20T09:44:59Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8be7cbb359c180b54d61066ee4a120662bb721e863754557705c5d591a4df70d18bea90fe309958448422dcc7ef55d1cf26b44d6a9c15ec733f30f74d87800d1\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:00Z\",\"nextUpdate\":\"2025-11-20T09:45:00Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"96930bf1e63d69a94325123ff73ec127f670267d15e23fe119ae226354bc7c53707c1fd812d3e6648639883d81709494d96d6061e71c586f6f4d5ff743337587\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:01Z\",\"nextUpdate\":\"2025-11-20T09:45:01Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"02e92c4d0dedf02a2a11522b8626d426da8dc5d3be26e66bd11039b9786fe88bf65e07257a06d16fb570a3304261b3c35952b686423e84ac8bdc5038d417deb3\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:02Z\",\"nextUpdate\":\"2025-11-20T09:45:02Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5e1784749fd8b95b4c8773833a1041cfd2b85f13658fa22cd69a3f9de9cc43d371a3eef0de86d3effe08dc4a1dca81dcf3ab65344a222ea9523a8726772c3aa5\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:03Z\",\"nextUpdate\":\"2025-11-20T09:45:03Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"25f80ad77ef746554afc7104f58b7ec995a19150738c71029e0a0137ecf1b3af439affe7f4d9f8c298852d71f3fa516f4127eb6147ffc0965e6a5babf2fd8660\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2025-10-21T09:45:04Z\",\"nextUpdate\":\"2025-11-20T09:45:04Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7379d069530fd76842570f993ac8f615c509e3889fe93bb87e8b40faa46e3604ec2c21458af982065f7b392007d38a0fa12321e116379c82cfaefaa3ecaff21\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2025-10-21T09:44:31Z\",\"nextUpdate\":\"2025-11-20T09:44:31Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f1f88349d25691d01a443ae086d480cdbf525ea8593ec61a32e4f943c054b6df18677d26bd733c0542128940fd5c792ac11c6bb50a9750f1f8d60d9b674607a5\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1\nNTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z\nWc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b\ny2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE\nFHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl\nW1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH\ntMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz\ncCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu\nmwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH\nXrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB\naNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8\nFY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU\nXtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu\nQDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd\nArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK\nxW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD\nVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v\nf4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W\nrPSb+wS9KsT0dcF2DU5F12BycQ==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3064023028CAFFB4B83AD5A8E00A2FD7BDA58E176495E5591E1D9EB9FBC80FD0ABFDA06705B316AD2299BFCD07B82524336328A102306A11A93912045B2438FCD719F84F78D0CDB91CCFC9ED55FF49B47C518CC6071D0B5662E3AECAB78E786000C477A18773"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1\nNTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z\nWc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b\ny2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE\nFHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl\nW1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH\ntMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz\ncCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu\nmwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH\nXrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB\naNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8\nFY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU\nXtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu\nQDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd\nArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK\nxW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD\nVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v\nf4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W\nrPSb+wS9KsT0dcF2DU5F12BycQ==\n-----END CERTIFICATE-----\n","servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","mrSigner":"00000000000000000000000000000000","isvProdId":1,"svnMappings":[{"tdMeasurements":{"mrtd":"E2C7DA7CF0D93973480F0A34A6FE52A204EA81B4F1B6CD16018F5B4CAEE7B3B544A9738464A7C95E1705E20687A0ADA6","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4"},"isvsvn":1}]},"signature":"306602310096D8260507E3F02698895732273709837C0CBF42DA29AA0891A18F8F4FEC648826E1E0DFB5C590B953F65B5EFB77F0B8023100B18CC20F8EF7C1D4E1CBCAEFF17C0722AC6213A0B7E83FDD580CA760BBDA91D25E714CFA2240BCEBDF039646D749ED84"}}},"signature":"3066023100C0BCAF2F7E635F39497F14B322376D6097E3476FC0BC4C5DAD826C5C647F0A30C113BA4947B83E4CC94D079C45320C39023100A88DEEB488D00B8AAD1939CCB73EAF3E91E1C6BE9B515E33A375D3D1FB0C45A9A17241622D834C161A27D8C03BBB6CBF"} \ No newline at end of file +{"policyData":{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"}},"signature":"3065023100C621FF5BCB1C20AC294F2AE46BE90549D8C5CFB7FF1C156D9A58C7EFB4A525B88F4F1909769ECC906A7A7AA01BFDD0F5023034AD6F84B41DC0CD63D2603D3F7FA8FB8D5E17FD30D400C1D48AEAF9C688BD8C6E8AC64D833DF12DC910250A23601CA8"} \ No newline at end of file diff --git a/src/policy/test/policy_v2/policy_v2_svn_only.json b/src/policy/test/policy_v2/policy_v2_svn_only.json new file mode 100644 index 000000000..d5af6c947 --- /dev/null +++ b/src/policy/test/policy_v2/policy_v2_svn_only.json @@ -0,0 +1 @@ +{"policyData":{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":5},"tcbDate":{"operation":"greater-or-equal","reference":"2022-11-09T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}},"crl":{"pckCrlNum":{"operation":"greater-or-equal","reference":1},"rootCaCrlNum":{"operation":"greater-or-equal","reference":1}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICmjCCAkCgAwIBAgIUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTM0MTAzMTEyMzM0N1owcDEiMCAG\nA1UEAwwZSW50ZWwgU0dYIFBDSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwg\nQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTEL\nMAkGA1UEBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQwp+Lc+TUBtg1H\n+U8JIsMsbjHjCkTtXb8jPM6r2dhu9zIblhDZ7INfqt3Ix8XcFKD8k0NEXrkZ66qJ\nXa1KzLIKo4G/MIG8MB8GA1UdIwQYMBaAFOnoRFJTNlxLGJoR/EMYLKXcIIBIMFYG\nA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8vc2J4LWNlcnRpZmljYXRlcy50cnVzdGVk\nc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQU\nWSPTp0qoY1QuOXCt4A8HK1ckKrcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwCgYIKoZIzj0EAwIDSAAwRQIhAJ1q+FTz+gUuVfBQuCgJsFrL2TTS\ne1aBZ53O52TjFie6AiAriPaRahUX9Oa9kGLlAchWXKT6j4RWSR50BqhrN3UT4A==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBITCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDkxNjExNTMxMloX\nDTI2MDkxNjExNTMxMlqgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOnoRFJT\nNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMCA0gAMEUCIQDv5KEBogNCzPgupOPj\nFIYJaOubypBPCGqnE0XcYTgFDwIgeSfXk71tIbV5lqp6gWCpN98/xu/8c7y36EV3\npkfootI=\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIBKTCB0AIBATAKBggqhkjOPQQDAjBwMSIwIAYDVQQDDBlJbnRlbCBTR1ggUENL\nIFBsYXRmb3JtIENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEUMBIGA1UE\nBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUxcNMjYwNzAx\nMDk0NjIzWhcNMjYwNzMxMDk0NjIzWqAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgw\nFoAUWSPTp0qoY1QuOXCt4A8HK1ckKrcwCgYIKoZIzj0EAwIDSAAwRQIgcGtzcbJl\n2S3wCJYxAd7KNnRsztqrU+u2NaDupYb0lTgCIQCA6I7FwSIA0s2r9sVOz6dIqV1w\naBnaP08fyNmvo7VbCA==\n-----END X509 CRL-----","platforms":[{"fmspc":"20C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3d0d3653b9341dc41c362f8f7cd38e9f4b829d057811ce6cafbcc77f167b6447522b4717b3d5c58a71648eec12af0b8e935edbb6cd773c4ceb7ad90e68cf001e\"}"},{"fmspc":"0400F1300000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1300000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bcb9b79749670cca6342f83b2a5590595faf905d450ec175c7efdf9ff4dca6ad1dc3d10b8570ab0318a5bc3fd24c58a1729f09994b47bd0f82d49cfbb71ee3dd\"}"},{"fmspc":"10A06E040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"3bb24f39c796226e15a38616fe60e4c28d7ec28acb5d67e25b659555b29f404f472a7b0f9ee26fa065941ce915966f7c3759f52e27dc07bb1c2a29da08bb094d\"}"},{"fmspc":"40806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5320e541877e904a23caa7ee30c8ca7d794a72617b4c16cf6028746731fee7248f2583eda07683edcbd3e08e14e91d846cfafa7355866e10d6150bf8b47ae269\"}"},{"fmspc":"0400F1370000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1370000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"361c382377cc1515aa6f6f5d74a3b8ab02aca6eafb30f97322715f61fdfcfffa549c12f4e74e4769fd248483124cc2228c134577cf3bd199fbd3d03244a80610\"}"},{"fmspc":"0400F1100000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1100000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d33030e843729d88c8b9c5a4aae1185f6a0f43a2fc6bdbf7eff62ae0dc14411ae097b3a50ae6d411748950aa2c0953adbbb128d59bc337bede6792b0248a2a3b\"}"},{"fmspc":"10806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T09:46:20Z\",\"nextUpdate\":\"2026-07-31T09:46:20Z\",\"fmspc\":\"10806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":10,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-05-28T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":9,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2020-03-22T00:00:00Z\",\"tcbStatus\":\"OutOfDate\"}]},\"signature\":\"19a007d6ca2b8a300ce6ff7d34f93ef32a98462b6c1b003a8a230743be6c7ec80cfcb869dfb9be29c5e30d4d14817899d5249ddb1d146f04b623f87010837657\"}"},{"fmspc":"50A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"28e87299fb0ed2b63890a895f6b8fe86abcf087c7023f79cb93aaa3ceb8fdefd694ec5bcaed2fb00e83e9696557ff70b1649107de1269f477723db74cd815653\"}"},{"fmspc":"B0806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"B0806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"da0312fbe582e1d32136ddd517abf928c2c9ccdcb686d3306a6c4401a96190d6fdd753da816ffaa27d7b536298713f48de3f45d1a7a8e364d3ea75159452614c\"}"},{"fmspc":"00A06F010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"a1309265fe850a27482fc8cdb2854cab6ff10f5ca4099af209a676a062b4b45943155227d431d4058c47c70be382dc43defde577b980412653b59ec4e298a23b\"}"},{"fmspc":"00A06D070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"98641e3b215e1134191c0637028cd6031ab109354d8c68083769bd63757418d83c2837f396ecad4f7e1e13176b0b2367e46cd1045dc6032df731c7edebe124e2\"}"},{"fmspc":"60806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"60806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"85ecac3694bcca3320c5ce5cdbc67bbec0d85ae9642561a13e47e6dafb1bec844c9b023760b33ea981bec268d814aa039e27063674b41671e079f39bb3509cfd\"}"},{"fmspc":"10A06E050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06E050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"0a8a99b3c165ef65b54c2e313764342850bfd1c31aa201f2cfdb93399a115ae3f20faabbf53f1bb66565c58763eb300c852a0fa796aa065b64b79138585f5682\"}"},{"fmspc":"40A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"40A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f049caf6905eebfbba2a1eccc7e96268a4c4f3d7d8a31ca340f260ea2035ec596cf5fe7bef4e86f42ecd2014b6a10feace6e622df152ce6faf74eafb54329dee\"}"},{"fmspc":"0400F1000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"589d8a6a5a60f3e12b303f6bd0ab9b3e70ad77500216936a5245c734443c6ea847a682b28324aa99e705f974446a66bad79fab7ee0291d62650db0c7681bd61b\"}"},{"fmspc":"50A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"50A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8ef380408be7b4d51e2e19c03cecd5685467d0203719efeeac19c44d79b2b4358695345ec7adfb3abb71698001ddeb0de24adba24cc82ede59c4c828b3c52f59\"}"},{"fmspc":"00A06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"126fd0874cbcee488f4fa793f0ca020f41a5f44965622b6e7768f9b4e677e7920105bbf3c3735e3ed7c6ad3f4e501534ee8e6c29df6a0c4367287d3d5176c72f\"}"},{"fmspc":"0400F1070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"b35cffb8b5af48c3026ee5ae3ad56bb1b45ef872ca2ec744a562073ffb57940cff890454f385ef57a39a5941fd4aa6049ce502be027ef5cf1b33f12bb4af9fd0\"}"},{"fmspc":"10806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9ed0865391001855b2e35740fdeb3978b284364201d1d568cc8c85bd640e707767c73cad516c00e2b29a2e81963fe5560c93ef20f391e936b33db74c1aa5b26c\"}"},{"fmspc":"20D06D010000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20D06D010000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5214de9edac3522fe9a68abba903fc88c59c37651c8f4bf2b79bebf2381fc32907dc9790ed883d15a948b7ba91f4ad8fe1712c56390d8398ac0641a55eb80f21\"}"},{"fmspc":"00A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"ac626a284a933532e9ad33ce2c2dbc24ad7e79dbef9a33dc8697fed09e2c46e5a8f508d057dc619d801eded0536502fb9be503a626cc5cbb2b02dd3da1f0b921\"}"},{"fmspc":"10A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":0,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"5ab60c67e4c6477c8767bf2b615cf985211e1ee3a3ecb06cd045b2907f5e120cd3f2dad24c2143d887e0596b8ffdb477e0edf417509a871f932e06debceff864\"}"},{"fmspc":"00C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"00C06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"f787aeb769a57e7aa4e8cd64ba199b71966d6ffb441b9a5de66bcbc4e93b65f049da696bdefad506e3ece86249a4688b12f077bb559f1cace27899a5a4541f2c\"}"},{"fmspc":"30806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c7bfb3a1d338bb64803c232efff231a25871dd14b06ecd4d119adc6998b0c90bd8d3f109af79f40d4cb24c2e939c596c2ab0896b289569b8d3dadc920900a98a\"}"},{"fmspc":"0400F1200000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"0400F1200000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"8c8c10f373ab61fa882f2f10f3885cea3b4ad34cfcbef833be573cbf631e7e84c31ad26ec05ee640fd91aa0ef0433e53c4d0fbc82c14cf055aabd698a96da216\"}"},{"fmspc":"20806F070000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F070000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d6154c177ad2e3f782dba2df4bf13e2fe2f6a07e20ae09d63cd4e1c3a7caca1afdecbc2c6959619e810926f6d6df4fe5b6d62e7a3f3abfc0bc440e768084298d\"}"},{"fmspc":"10806F040000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10806F040000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"c04cb69c8a57965018da713e624baa6c11f290f762b1b73cf01f90087334ba8d6c33e10fb3ca766b7dd99d87387b8b4241f25f3e91328c160c193deb70ec0bdb\"}"},{"fmspc":"10D06D000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10D06D000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"29ec7d93a60c101cd878f061467e933088dd0f393d8cbfd26ecba14cdf22c839b89b9fca57440105770449c022b3f7c1c514b294a46e504718b81deda3620d76\"}"},{"fmspc":"20806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20806F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"89ccc75f7e47334690d6ac8ba90d0ea84850d837ce51698dfe7b4b778476afd09fcd3119e3bc93e660b195e7db805d69cf8ed4ce1705eed3beaca4de8027ec8d\"}"},{"fmspc":"30A06E000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"30A06E000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"d5550e6e74aed8bd2806e47cbdc99ed75b833401896a662727b5ff62e205e118e17afc952158d54b132719eebe45a5dde9e8c501dcba827320f76f1053460f8b\"}"},{"fmspc":"10A06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"10A06F000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"7ce7382154fbea591d0851952f283b16edf79ce56cba3757dd2297cfd0296c6bc3408eaa416ae14d13936f7662ba42741f4e718888dc0ad9f2630fde233810fa\"}"},{"fmspc":"20A06D050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2026-07-01T10:00:45Z\",\"nextUpdate\":\"2026-07-31T10:00:45Z\",\"fmspc\":\"20A06D050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":5,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_02\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_05\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":1,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":0,\"tdxtcbcomponents\":[{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":1,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"4fceb18caf6eb5ba2ca7138d55d24a6b8d81f99147383bcb5dec755572bf5a24d496fdcdbda75ce076682703685fdac3c9b0f0f53059ab2a3d8d0a8cba9631eb\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICkDCCAjagAwIBAgIUTh8n662T/sqPZK+7n3H67/KGwu0wCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE5MTAzMTEyMzM0N1oXDTI2MTAzMTEyMzM0N1owbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOnYw9LbN/JmyUttXa0M\niBEenjPbxbR4C8MuVYxDI+Le8lDBLp9X4wMzCAUF/fI/31giClXp/y0erLbLZjdV\n07+jgbkwgbYwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0f\nBE8wTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBROHyfr\nrZP+yo9kr7ufcfrv8obC7TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAK\nBggqhkjOPQQDAgNIADBFAiEA9xQeifK+2abQGnrAgk0hrOhdyvJQorh2cEMn4Gwr\n4hoCIFHW5qQ9G2wBJ4GMNQqv/oMfbPtzmyTlaWWzwxkqM0CT\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIClDCCAjmgAwIBAgIVAOnoRFJTNlxLGJoR/EMYLKXcIIBIMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xOTEwMzEwOTQ5MjFaFw00OTEyMzEyMzU5NTlaMGgxGjAY\nBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3Jh\ndGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\nEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE/6D/1WHNrWwPmNMIyBKMW5\nJ6JzMsjo6xP2vkK1cdZGb1PGRP/C/8ECgiDkmklmzwLzLi+000m7LLrtKJA3oC2j\ngb8wgbwwHwYDVR0jBBgwFoAU6ehEUlM2XEsYmhH8QxgspdwggEgwVgYDVR0fBE8w\nTTBLoEmgR4ZFaHR0cHM6Ly9zYngtY2VydGlmaWNhdGVzLnRydXN0ZWRzZXJ2aWNl\ncy5pbnRlbC5jb20vSW50ZWxTR1hSb290Q0EuZGVyMB0GA1UdDgQWBBTp6ERSUzZc\nSxiaEfxDGCyl3CCASDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB\nATAKBggqhkjOPQQDAgNJADBGAiEAzw9zdUiUHPMUd0C4mx41jlFZkrM3y5f1lgnV\nO7FbjOoCIQCoGtUmT4cXt7V+ySHbJ8Hob9AanpvXNH1ER+/gZF+opQ==\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2026-07-01T10:33:44Z\",\"nextUpdate\":\"2026-07-31T10:33:44Z\",\"tcbEvaluationDataNumber\":5,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":0},\"tcbDate\":\"2022-11-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"bccb9464275b040819102bd2357fb77e2f1936f218c4d06afebe55b97d7bf416c7d70839897df145c94c6cc65a090c274f94df9b158c245fd37c344272527703\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"}},"signature":"3065023100C621FF5BCB1C20AC294F2AE46BE90549D8C5CFB7FF1C156D9A58C7EFB4A525B88F4F1909769ECC906A7A7AA01BFDD0F5023034AD6F84B41DC0CD63D2603D3F7FA8FB8D5E17FD30D400C1D48AEAF9C688BD8C6E8AC64D833DF12DC910250A23601CA8"} diff --git a/src/policy/test/policy_v2/revocation/policy_ok.json b/src/policy/test/policy_v2/revocation/policy_ok.json new file mode 100644 index 000000000..c5c6005e8 --- /dev/null +++ b/src/policy/test/policy_v2/revocation/policy_ok.json @@ -0,0 +1 @@ +{"policyData":{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":13},"tcbDate":{"operation":"greater-or-equal","reference":"2023-07-01T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","90C06F000000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICljCCAj2gAwIBAgIVAJVvXc29G+HpQEnJ1PQzzgFXC95UMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xODA1MjExMDUwMTBaFw0zMzA1MjExMDUwMTBaMHAxIjAg\nBgNVBAMMGUludGVsIFNHWCBQQ0sgUGxhdGZvcm0gQ0ExGjAYBgNVBAoMEUludGVs\nIENvcnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0Ex\nCzAJBgNVBAYTAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENSB/7t21lXSO\n2Cuzpxw74eJB72EyDGgW5rXCtx2tVTLq6hKk6z+UiRZCnqR7psOvgqFeSxlmTlJl\neTmi2WYz3qOBuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBS\nBgNVHR8ESzBJMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2Vy\ndmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUlW9d\nzb0b4elAScnU9DPOAVcL3lQwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB\nAf8CAQAwCgYIKoZIzj0EAwIDRwAwRAIgXsVki0w+i6VYGW3UF/22uaXe0YJDj1Ue\nnA+TjD1ai5cCICYb1SAmD5xkfTVpvo4UoyiSYxrDWLmUR4CI9NKyfPN+\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBIDCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDMyMDExMjE1N1oX\nDTI2MDQwMzExMjE1N1qgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFCJlDNZa\nnTSJ84O0lVK/UBs5JwasMAoGCCqGSM49BAMCA0cAMEQCIDDJ/OFDjaCpTk//3UbJ\nZQ45O+blp4YtTk5zUnky0ErzAiBlOe/j9zTD198g2d/EYw4cf/BDmg+OzhAfFbXq\n/5tPMw==\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIL1zCCC30CAQEwCgYIKoZIzj0EAwIwcDEiMCAGA1UEAwwZSW50ZWwgU0dYIFBD\nSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNV\nBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MTEx\nMDIxNDcxOVoXDTI1MTIxMDIxNDcxOVowggqpMDMCFG/DTlAj5yiSNDXWGqS4PGGB\nZq01Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAO+ubpcV/KE7h+Mz\n6CYe1tmQqSatFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAP1ghkhi\nnLpzB4tNSS9LPqdBrQjNFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIV\nAIr5JBhOHVr93XPD1joS9ei1c35WFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMK\nAQEwNAIVALEleXjPqczdB1mr+MXKcvrjp4qbFw0yNTExMTAyMTQ3MTlaMAwwCgYD\nVR0VBAMKAQEwMwIUdP6mFKlyvg4oQ/IFmDWBHthy+bMXDTI1MTExMDIxNDcxOVow\nDDAKBgNVHRUEAwoBATA0AhUA+cTvVrOrSNV34Qi67fS/iAFCFLkXDTI1MTExMDIx\nNDcxOVowDDAKBgNVHRUEAwoBATAzAhQHHeB3j55fxPKHjzDWsHyaMOazCxcNMjUx\nMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDQCFQDN4kJPlyzqlP8jmTf02AwlAp3W\nCxcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFGwzGeUQm2RQfTzxEyzg\nA0nvUnMZFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAN8I11a2anSX\n9DtbtYraBNP096k3Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIUKK9I\nW2z2fkCaOdXLWu5FmPeo+nsXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0\nAhUA+4strsCSytqKqbxP8vHCDQNGZowXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUE\nAwoBATA0AhUAzUhQrFK9zGmmpvBYyLxXu9C1+GQXDTI1MTExMDIxNDcxOVowDDAK\nBgNVHRUEAwoBATA0AhUAmU3TZm9SdfuAX5XdAr1QyyZ52K0XDTI1MTExMDIxNDcx\nOVowDDAKBgNVHRUEAwoBATAzAhQHAhNpACUidNkDXu31RXRi+tDvTBcNMjUxMTEw\nMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFGHyv3Pjm04EqifYAb1z0kMZtb+AFw0y\nNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIUOZK+hRuWkC7/OJWebC7/GwZR\npLUXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAzAhQP2kOgC2jqebfC3q6s\nC0mL37KvkBcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFGOfE5pQQP3P\n8ZHopPsb8IbtYDlxFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAJWd\nUz+SSdweUTVEzcgwvxm38fMBFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEw\nMwIUeuN3SKn5EvTGO6erB8WTzh0dEYEXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUE\nAwoBATAzAhQTiEszJpk4wZWqFw/KddoXdTjfCxcNMjUxMTEwMjE0NzE5WjAMMAoG\nA1UdFQQDCgEBMDQCFQCF08k4G3en4E0RnJ5a1nSf8/+rhxcNMjUxMTEwMjE0NzE5\nWjAMMAoGA1UdFQQDCgEBMDQCFQCTiHykQR56kjvR/tKBmylJ8gG1tBcNMjUxMTEw\nMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFCSY3GKDkwmW/YvyOjesviajvtRXFw0y\nNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAIpm8adJSIZnaJzDkDrFTGYr\ncS5zFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAK/BNhC902y3mF0Q\nZIGogNOgH9oHFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAO/gSywz\n0DaqyWymc78emke2TVy7Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIV\nAIPZrI2LtQnRxsgJrXEuhDBVntfzFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMK\nAQEwMwIUeTH9ULUHHBu/xbe23ti0W52LhSkXDTI1MTExMDIxNDcxOVowDDAKBgNV\nHRUEAwoBATAzAhQfog4pcL3l1X97jd+DOUhOHx0IIxcNMjUxMTEwMjE0NzE5WjAM\nMAoGA1UdFQQDCgEBMDMCFB6HssOzLY0j5BHO80GXuVrwyK31Fw0yNTExMTAyMTQ3\nMTlaMAwwCgYDVR0VBAMKAQEwNAIVAJr9LukKRzVQoWfZlpEUN8dQLR8JFw0yNTEx\nMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIURIGw8RcooTtpbT6px3CgsV7FjdoX\nDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAp4WfV5gu8OZ9N7yO8u9a\nyDX/GqkXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAnWd1O4HkcJCu\np2P77ExFSbzbmTMXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAzAhQ0v7t6\nHZxWgUfhGLYU97du0+9o3xcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMC\nFCw8xv6SedsVFtXOOfKomM2loXXhFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMK\nAQEwMwIUcXlIaHUJI0vpeeS33ObzG+9ktowXDTI1MTExMDIxNDcxOVowDDAKBgNV\nHRUEAwoBATA0AhUAnXbvLDnBNuhli25zlrHXRFonYx8XDTI1MTExMDIxNDcxOVow\nDDAKBgNVHRUEAwoBATA0AhUAw+Al/KmV829ZtIRnk54+NOY2Gm8XDTI1MTExMDIx\nNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAjF9rMlfaBbF0KeLmG6ll1nMwYGoXDTI1\nMTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAoXxRci7B4MMnj+i98FIFnL7E\n5kgXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAzAhQ0uk/Xa95TCSEM8d0f\n+0lMY4qRVxcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFAQ+BJGdquE0\nQySDlQlNKi6s/Hb+Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIUR/xX\nfS0JTL3ycHFe1oSKk4Va00sXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAz\nAhR9YqL15vOG5GllP///BF0KgXjo5xcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQD\nCgEBMDQCFQDE7UX+Amu2pH6uw16oC370B84GLBcNMjUxMTEwMjE0NzE5WjAMMAoG\nA1UdFQQDCgEBMDQCFQDPmDEHejyk8aLFaGe/VbGOzL7/2BcNMjUxMTEwMjE0NzE5\nWjAMMAoGA1UdFQQDCgEBMDMCFGwrgdfqLkNnIM4p8dCxzLeiGGAPFw0yNTExMTAy\nMTQ3MTlaMAwwCgYDVR0VBAMKAQGgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaA\nFJVvXc29G+HpQEnJ1PQzzgFXC95UMAoGCCqGSM49BAMCA0gAMEUCIQD0RW5z1XhH\nshEHUDoCwV+E/oPU2KkJov8crzIwjwIamAIgfwPSEiTXLS3fKAohav2sv9FoOK+l\nZC1WF9Afo6UM11c=\n-----END X509 CRL-----","platforms":[{"fmspc":"50806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2024-09-18T05:15:56Z\",\"nextUpdate\":\"2024-10-18T05:15:56Z\",\"fmspc\":\"50806f000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":16,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":6,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-02-15T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00837\"]},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":5,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2018-01-04T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00106\",\"INTEL-SA-00115\",\"INTEL-SA-00135\",\"INTEL-SA-00203\",\"INTEL-SA-00220\",\"INTEL-SA-00233\",\"INTEL-SA-00270\",\"INTEL-SA-00293\",\"INTEL-SA-00320\",\"INTEL-SA-00329\",\"INTEL-SA-00381\",\"INTEL-SA-00389\",\"INTEL-SA-00477\",\"INTEL-SA-00837\"]}]},\"signature\":\"4daddccfa807a40bc2af47c4255b05536d680dc3647de999e7fe23399b395431403922757a0458019728e7a75ff65cb88515966dbbbee313aee9e9f21b99b2c9\"}"},{"fmspc":"00806F050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2024-09-18T05:15:56Z\",\"nextUpdate\":\"2024-10-18T05:15:56Z\",\"fmspc\":\"00806F050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":16,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":6,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-02-15T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00837\"]},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":5,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2018-01-04T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00106\",\"INTEL-SA-00115\",\"INTEL-SA-00135\",\"INTEL-SA-00203\",\"INTEL-SA-00220\",\"INTEL-SA-00233\",\"INTEL-SA-00270\",\"INTEL-SA-00293\",\"INTEL-SA-00320\",\"INTEL-SA-00329\",\"INTEL-SA-00381\",\"INTEL-SA-00389\",\"INTEL-SA-00477\",\"INTEL-SA-00837\"]}]},\"signature\":\"a89c562e956b6567cae3782b017d66a62d5c1c172d12412535fc81e5534c8fe0b3dc624eb4613f6667aec9cc8d961658178f72aa8642a56fcddc90a4fd12e3f2\"}"},{"fmspc":"90C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2024-07-15T14:31:12Z\",\"nextUpdate\":\"2024-08-14T14:31:12Z\",\"fmspc\":\"90c06f000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":16,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":13,\"tdxtcbcomponents\":[{\"svn\":4,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":5,\"tdxtcbcomponents\":[{\"svn\":4,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2018-01-04T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00106\",\"INTEL-SA-00115\",\"INTEL-SA-00135\",\"INTEL-SA-00203\",\"INTEL-SA-00220\",\"INTEL-SA-00233\",\"INTEL-SA-00270\",\"INTEL-SA-00293\",\"INTEL-SA-00320\",\"INTEL-SA-00329\",\"INTEL-SA-00381\",\"INTEL-SA-00389\",\"INTEL-SA-00477\",\"INTEL-SA-00837\"]}]},\"signature\":\"e8e15c17e42c84384e3731d2d6d2cdf01cd94b4e1e46fd72328d1f522661c06f7ee69e7c5e8f478bd4a68a230d54120c08fcfbae90684a37223d8580baa0ded5\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2024-09-18T04:54:41Z\",\"nextUpdate\":\"2024-10-18T04:54:41Z\",\"tcbEvaluationDataNumber\":16,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":4},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9a55465480464a6f8d234b427e9500019df8947eecb5db37fab5bb27728384d2b1b9b8cf7539321493be71daf4ae932ca80d77dc6794f4efd174105a072c57ae\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"1ADC25055B5188A615FF0A2B4781C0E1F38D4369CA688C775EE321E142FBE4534C14EDE61D9C570967996F6C8E8F5F76"},"isvsvn":1}]},"signature":"30650230399B7A607A380AD765720B70EA82F9027C6638662BC8C10A0591B488D7E0EB369959206434EFDD0D860A5EB9E7443D9C023100ADF9FAF38CAB4EB589A52EB32305D19D5F8313343F0BD08017574D0B22342D9BABA7A786E01A2094C29781F986FE6988"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICGDCCAZ6gAwIBAgIUI2qCSZ4o/j7/l/3Nl6Ey59u103swCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA/MSEwHwYDVQQD\nDBhNaWdURCBUQ0IgTWFwcGluZyBJc3N1ZXIxGjAYBgNVBAoMEUludGVsIENvcnBv\ncmF0aW9uMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0DLuzrOa8Iwlckmi+q5XRyga\nAOi/KmCuedEcxcIueU6YaG2zFdI/aP5Tg2BW0ibNrlwrIRuFO5yG/kVvLjqzPHXt\neKz6PGUsAzsjO0YO6oVxSehaGoteFOYHeRkzvTceo2YwZDALBgNVHQ8EBAMCB4Aw\nFQYDVR0lBA4wDAYKKwYBBAGB/VkBATAdBgNVHQ4EFgQUb1W97VrkSsQ2DLBf3pIy\nkYybJ9AwHwYDVR0jBBgwFoAUzbjA8WoRclwlFqbtJoFmo8DFKQ4wCgYIKoZIzj0E\nAwMDaAAwZQIxAMrEiV2BRq6Dlyj90ICNOIDGxeJDkgQgdh9QnCKGf4BzEvuM86D9\n/ohPFc+aPPM4ZQIwFRzINodzbocmwhHdY2gnMdBdZYSGcy5Os7k423D9f69HuTok\nWWQgNP2t1A+0CtbU\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIB+jCCAYCgAwIBAgIUMX1+LqRwwfhB6bDtTlX7N4iJhc0wCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA0MRYwFAYDVQQD\nDA1NaWdURCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjB2MBAG\nByqGSM49AgEGBSuBBAAiA2IABBptQ9M3xyA0cohyQFUukjbZhNgjosbK1Z7op9zQ\nu+IcCY58uSUulesJEt3Q5Ki30WQ5ThX8Lwc6CNjqDPNQqXaTyzcwMRAi7evnfsji\nywKjNxPUuDE6MmlTXG9SS3J+w6NTMFEwHQYDVR0OBBYEFM24wPFqEXJcJRam7SaB\nZqPAxSkOMB8GA1UdIwQYMBaAFM24wPFqEXJcJRam7SaBZqPAxSkOMA8GA1UdEwEB\n/wQFMAMBAf8wCgYIKoZIzj0EAwMDaAAwZQIwOtC/ZbeDkk6pjxeW5xb0Er5Vf88J\nB4rC1N27vz8JFEQ1cGVbVktZ1Ngg3C5foD+DAjEAg00nYaIHw1ZE/g/wyQLFfZhN\n07qIK1LbLfTcPDpWtW7UD5FvOAndCHyKTgq9cBbk\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}],"xfam":"E718060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"","isvProdId":0},"signature":"306402306B3A04E658F9326DE0332E7E1722AE9D47D1D2AA8DF98AD11891041F40682D12EED235B8271BE064026C9F242281EE8502301A422BD89A00CEDF14CACFE8C64E71C2A37783D6F603EFD98EB6522A06E0C67ADDB22E8C14C64D1C42B0239C1A4BCC36"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICGDCCAZ6gAwIBAgIUI2qCSZ4o/j7/l/3Nl6Ey59u1030wCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA/MSEwHwYDVQQD\nDBhNaWdURCBUQ0IgTWFwcGluZyBJc3N1ZXIxGjAYBgNVBAoMEUludGVsIENvcnBv\ncmF0aW9uMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAExykffZEMbJoBRF1lBbOEQWIq\n8ugnf+sIW0R0kzgg/hJrzd0Tc/dx56YOMQ8uLajZJc6Uw/VCPTPcWIKNW+qDLq3p\nV/WYCLs2jQIK0Wi2DvXNHbdeRJ8r7m2b4Eet7ATuo2YwZDALBgNVHQ8EBAMCB4Aw\nFQYDVR0lBA4wDAYKKwYBBAGB/VkBATAdBgNVHQ4EFgQUDseXgtURvY6G41eQmO/I\nx/4jiEswHwYDVR0jBBgwFoAUzbjA8WoRclwlFqbtJoFmo8DFKQ4wCgYIKoZIzj0E\nAwMDaAAwZQIwQtZuyECGGaz+YIsK7MtQZs6L0sP0Yrsm84AScFx0gDwBBpbFsHIW\nOkgFBfATYt7yAjEAxg88iDqFGHWGLtS7fPvlmvP2zZIuLR5uSq2SQJu5hPfbZt86\nTAP6RHdEsC3vnTwS\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIB+jCCAYCgAwIBAgIUMX1+LqRwwfhB6bDtTlX7N4iJhc0wCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA0MRYwFAYDVQQD\nDA1NaWdURCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjB2MBAG\nByqGSM49AgEGBSuBBAAiA2IABBptQ9M3xyA0cohyQFUukjbZhNgjosbK1Z7op9zQ\nu+IcCY58uSUulesJEt3Q5Ki30WQ5ThX8Lwc6CNjqDPNQqXaTyzcwMRAi7evnfsji\nywKjNxPUuDE6MmlTXG9SS3J+w6NTMFEwHQYDVR0OBBYEFM24wPFqEXJcJRam7SaB\nZqPAxSkOMB8GA1UdIwQYMBaAFM24wPFqEXJcJRam7SaBZqPAxSkOMA8GA1UdEwEB\n/wQFMAMBAf8wCgYIKoZIzj0EAwMDaAAwZQIwOtC/ZbeDkk6pjxeW5xb0Er5Vf88J\nB4rC1N27vz8JFEQ1cGVbVktZ1Ngg3C5foD+DAjEAg00nYaIHw1ZE/g/wyQLFfZhN\n07qIK1LbLfTcPDpWtW7UD5FvOAndCHyKTgq9cBbk\n-----END CERTIFICATE-----\n","servtdCrl":"-----BEGIN X509 CRL-----\nMIHrMHQCAQEwCgYIKoZIzj0EAwMwNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEa\nMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24XDTI2MDcyMTAyMjYyM1oXDTM2MDcx\nODAyMjYyM1qgDzANMAsGA1UdFAQEAgIQADAKBggqhkjOPQQDAwNnADBkAjB8Yyhd\nED9LlopkMm/6JT6DATJO3QZXmMXGTsMFENMAjXAqnUB+LKozL+HXY5ThuJMCMHw7\nM2mloQxhxu8lIIXDDVtHwbIem0iWCFXWO14O+Eb8DFGGCbdM96bRw60B0F1JFg==\n-----END X509 CRL-----\n"}},"signature":"306402306D29C2F009BD0A9B964111C9A79F5515DD5DB971155B5DCB676D67B29498591E58E784F24800E3AF307D2973F06FAC1E02304CCB290B2CBC32662BCCFD842EFF813A15B7A5A2B561C1F658355C345B0873C0D6595E5756C79CAA85A1239149E8B240"} \ No newline at end of file diff --git a/src/policy/test/policy_v2/revocation/policy_revoked.json b/src/policy/test/policy_v2/revocation/policy_revoked.json new file mode 100644 index 000000000..348849a86 --- /dev/null +++ b/src/policy/test/policy_v2/revocation/policy_revoked.json @@ -0,0 +1 @@ +{"policyData":{"id":"E6643BDC-E50A-4315-9EF7-F217CE8AF9A6","version":"2.0","policySvn":1,"policy":[{"global":{"tcb":{"tcbEvaluationDataNumber":{"operation":"greater-or-equal","reference":13},"tcbDate":{"operation":"greater-or-equal","reference":"2023-07-01T00:00:00Z"},"tcbStatusAccepted":{"operation":"allow-list","reference":["UpToDate","ConfigurationNeeded"]}},"platform":{"fmspc":{"operation":"allow-list","reference":["00706A000000","00706E170000","00A068070000","90C06F000000","20C06F000000","10A06E040000","40806F000000","10706A000000","10A067110000","20606A000000","10906EA50000","20906EA10000","10906EB10000","10806F000000","00706E070000","50A06D000000","10606A000000","10706A800000","10706A100000","B0806F000000","00706D050000","10806EB70000","10906ED10000","00A06F010000","00A06D070000","40806F200000","60806F000000","10A06E050000","40A06D000000","10606C040000","50A06F000000","00A06D000000","10806EA60000","00706D010000","10806F070000","20D06D010000","00706E270000","00A06F000000","10A06D050000","00C06F000000","30806F000000","20906EA50000","10706E370000","20806F070000","10906EC50000","10806F040000","10D06D000000","10906EA10000","20806F000000","10A067010000","30A06E000000","10A06F000000","70806F000000","10906EC10000","20A06D050000","00606A000000"]}}}}],"collaterals":{"majorVersion":1,"minorVersion":0,"teeType":129,"rootCa":"-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----","pckCrlIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICljCCAj2gAwIBAgIVAJVvXc29G+HpQEnJ1PQzzgFXC95UMAoGCCqGSM49BAMC\nMGgxGjAYBgNVBAMMEUludGVsIFNHWCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBD\nb3Jwb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQsw\nCQYDVQQGEwJVUzAeFw0xODA1MjExMDUwMTBaFw0zMzA1MjExMDUwMTBaMHAxIjAg\nBgNVBAMMGUludGVsIFNHWCBQQ0sgUGxhdGZvcm0gQ0ExGjAYBgNVBAoMEUludGVs\nIENvcnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0Ex\nCzAJBgNVBAYTAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENSB/7t21lXSO\n2Cuzpxw74eJB72EyDGgW5rXCtx2tVTLq6hKk6z+UiRZCnqR7psOvgqFeSxlmTlJl\neTmi2WYz3qOBuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBS\nBgNVHR8ESzBJMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2Vy\ndmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUlW9d\nzb0b4elAScnU9DPOAVcL3lQwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB\nAf8CAQAwCgYIKoZIzj0EAwIDRwAwRAIgXsVki0w+i6VYGW3UF/22uaXe0YJDj1Ue\nnA+TjD1ai5cCICYb1SAmD5xkfTVpvo4UoyiSYxrDWLmUR4CI9NKyfPN+\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","rootCaCrl":"-----BEGIN X509 CRL-----\nMIIBIDCByAIBATAKBggqhkjOPQQDAjBoMRowGAYDVQQDDBFJbnRlbCBTR1ggUm9v\ndCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNVBAcMC1NhbnRh\nIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MDMyMDExMjE1N1oX\nDTI2MDQwMzExMjE1N1qgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFCJlDNZa\nnTSJ84O0lVK/UBs5JwasMAoGCCqGSM49BAMCA0cAMEQCIDDJ/OFDjaCpTk//3UbJ\nZQ45O+blp4YtTk5zUnky0ErzAiBlOe/j9zTD198g2d/EYw4cf/BDmg+OzhAfFbXq\n/5tPMw==\n-----END X509 CRL-----","pckCrl":"-----BEGIN X509 CRL-----\nMIIL1zCCC30CAQEwCgYIKoZIzj0EAwIwcDEiMCAGA1UEAwwZSW50ZWwgU0dYIFBD\nSyBQbGF0Zm9ybSBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xFDASBgNV\nBAcMC1NhbnRhIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMXDTI1MTEx\nMDIxNDcxOVoXDTI1MTIxMDIxNDcxOVowggqpMDMCFG/DTlAj5yiSNDXWGqS4PGGB\nZq01Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAO+ubpcV/KE7h+Mz\n6CYe1tmQqSatFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAP1ghkhi\nnLpzB4tNSS9LPqdBrQjNFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIV\nAIr5JBhOHVr93XPD1joS9ei1c35WFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMK\nAQEwNAIVALEleXjPqczdB1mr+MXKcvrjp4qbFw0yNTExMTAyMTQ3MTlaMAwwCgYD\nVR0VBAMKAQEwMwIUdP6mFKlyvg4oQ/IFmDWBHthy+bMXDTI1MTExMDIxNDcxOVow\nDDAKBgNVHRUEAwoBATA0AhUA+cTvVrOrSNV34Qi67fS/iAFCFLkXDTI1MTExMDIx\nNDcxOVowDDAKBgNVHRUEAwoBATAzAhQHHeB3j55fxPKHjzDWsHyaMOazCxcNMjUx\nMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDQCFQDN4kJPlyzqlP8jmTf02AwlAp3W\nCxcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFGwzGeUQm2RQfTzxEyzg\nA0nvUnMZFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAN8I11a2anSX\n9DtbtYraBNP096k3Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIUKK9I\nW2z2fkCaOdXLWu5FmPeo+nsXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0\nAhUA+4strsCSytqKqbxP8vHCDQNGZowXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUE\nAwoBATA0AhUAzUhQrFK9zGmmpvBYyLxXu9C1+GQXDTI1MTExMDIxNDcxOVowDDAK\nBgNVHRUEAwoBATA0AhUAmU3TZm9SdfuAX5XdAr1QyyZ52K0XDTI1MTExMDIxNDcx\nOVowDDAKBgNVHRUEAwoBATAzAhQHAhNpACUidNkDXu31RXRi+tDvTBcNMjUxMTEw\nMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFGHyv3Pjm04EqifYAb1z0kMZtb+AFw0y\nNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIUOZK+hRuWkC7/OJWebC7/GwZR\npLUXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAzAhQP2kOgC2jqebfC3q6s\nC0mL37KvkBcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFGOfE5pQQP3P\n8ZHopPsb8IbtYDlxFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAJWd\nUz+SSdweUTVEzcgwvxm38fMBFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEw\nMwIUeuN3SKn5EvTGO6erB8WTzh0dEYEXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUE\nAwoBATAzAhQTiEszJpk4wZWqFw/KddoXdTjfCxcNMjUxMTEwMjE0NzE5WjAMMAoG\nA1UdFQQDCgEBMDQCFQCF08k4G3en4E0RnJ5a1nSf8/+rhxcNMjUxMTEwMjE0NzE5\nWjAMMAoGA1UdFQQDCgEBMDQCFQCTiHykQR56kjvR/tKBmylJ8gG1tBcNMjUxMTEw\nMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFCSY3GKDkwmW/YvyOjesviajvtRXFw0y\nNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAIpm8adJSIZnaJzDkDrFTGYr\ncS5zFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAK/BNhC902y3mF0Q\nZIGogNOgH9oHFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIVAO/gSywz\n0DaqyWymc78emke2TVy7Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwNAIV\nAIPZrI2LtQnRxsgJrXEuhDBVntfzFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMK\nAQEwMwIUeTH9ULUHHBu/xbe23ti0W52LhSkXDTI1MTExMDIxNDcxOVowDDAKBgNV\nHRUEAwoBATAzAhQfog4pcL3l1X97jd+DOUhOHx0IIxcNMjUxMTEwMjE0NzE5WjAM\nMAoGA1UdFQQDCgEBMDMCFB6HssOzLY0j5BHO80GXuVrwyK31Fw0yNTExMTAyMTQ3\nMTlaMAwwCgYDVR0VBAMKAQEwNAIVAJr9LukKRzVQoWfZlpEUN8dQLR8JFw0yNTEx\nMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIURIGw8RcooTtpbT6px3CgsV7FjdoX\nDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAp4WfV5gu8OZ9N7yO8u9a\nyDX/GqkXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAnWd1O4HkcJCu\np2P77ExFSbzbmTMXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAzAhQ0v7t6\nHZxWgUfhGLYU97du0+9o3xcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMC\nFCw8xv6SedsVFtXOOfKomM2loXXhFw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMK\nAQEwMwIUcXlIaHUJI0vpeeS33ObzG+9ktowXDTI1MTExMDIxNDcxOVowDDAKBgNV\nHRUEAwoBATA0AhUAnXbvLDnBNuhli25zlrHXRFonYx8XDTI1MTExMDIxNDcxOVow\nDDAKBgNVHRUEAwoBATA0AhUAw+Al/KmV829ZtIRnk54+NOY2Gm8XDTI1MTExMDIx\nNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAjF9rMlfaBbF0KeLmG6ll1nMwYGoXDTI1\nMTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATA0AhUAoXxRci7B4MMnj+i98FIFnL7E\n5kgXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAzAhQ0uk/Xa95TCSEM8d0f\n+0lMY4qRVxcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQDCgEBMDMCFAQ+BJGdquE0\nQySDlQlNKi6s/Hb+Fw0yNTExMTAyMTQ3MTlaMAwwCgYDVR0VBAMKAQEwMwIUR/xX\nfS0JTL3ycHFe1oSKk4Va00sXDTI1MTExMDIxNDcxOVowDDAKBgNVHRUEAwoBATAz\nAhR9YqL15vOG5GllP///BF0KgXjo5xcNMjUxMTEwMjE0NzE5WjAMMAoGA1UdFQQD\nCgEBMDQCFQDE7UX+Amu2pH6uw16oC370B84GLBcNMjUxMTEwMjE0NzE5WjAMMAoG\nA1UdFQQDCgEBMDQCFQDPmDEHejyk8aLFaGe/VbGOzL7/2BcNMjUxMTEwMjE0NzE5\nWjAMMAoGA1UdFQQDCgEBMDMCFGwrgdfqLkNnIM4p8dCxzLeiGGAPFw0yNTExMTAy\nMTQ3MTlaMAwwCgYDVR0VBAMKAQGgLzAtMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaA\nFJVvXc29G+HpQEnJ1PQzzgFXC95UMAoGCCqGSM49BAMCA0gAMEUCIQD0RW5z1XhH\nshEHUDoCwV+E/oPU2KkJov8crzIwjwIamAIgfwPSEiTXLS3fKAohav2sv9FoOK+l\nZC1WF9Afo6UM11c=\n-----END X509 CRL-----","platforms":[{"fmspc":"50806F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2024-09-18T05:15:56Z\",\"nextUpdate\":\"2024-10-18T05:15:56Z\",\"fmspc\":\"50806f000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":16,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":6,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-02-15T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00837\"]},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":5,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2018-01-04T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00106\",\"INTEL-SA-00115\",\"INTEL-SA-00135\",\"INTEL-SA-00203\",\"INTEL-SA-00220\",\"INTEL-SA-00233\",\"INTEL-SA-00270\",\"INTEL-SA-00293\",\"INTEL-SA-00320\",\"INTEL-SA-00329\",\"INTEL-SA-00381\",\"INTEL-SA-00389\",\"INTEL-SA-00477\",\"INTEL-SA-00837\"]}]},\"signature\":\"4daddccfa807a40bc2af47c4255b05536d680dc3647de999e7fe23399b395431403922757a0458019728e7a75ff65cb88515966dbbbee313aee9e9f21b99b2c9\"}"},{"fmspc":"00806F050000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2024-09-18T05:15:56Z\",\"nextUpdate\":\"2024-10-18T05:15:56Z\",\"fmspc\":\"00806F050000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":16,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":6,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":6,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":11,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-02-15T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00837\"]},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":5,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":5,\"tdxtcbcomponents\":[{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":5,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2018-01-04T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00106\",\"INTEL-SA-00115\",\"INTEL-SA-00135\",\"INTEL-SA-00203\",\"INTEL-SA-00220\",\"INTEL-SA-00233\",\"INTEL-SA-00270\",\"INTEL-SA-00293\",\"INTEL-SA-00320\",\"INTEL-SA-00329\",\"INTEL-SA-00381\",\"INTEL-SA-00389\",\"INTEL-SA-00477\",\"INTEL-SA-00837\"]}]},\"signature\":\"a89c562e956b6567cae3782b017d66a62d5c1c172d12412535fc81e5534c8fe0b3dc624eb4613f6667aec9cc8d961658178f72aa8642a56fcddc90a4fd12e3f2\"}"},{"fmspc":"90C06F000000","tcbInfoIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","tcbInfo":"{\"tcbInfo\":{\"id\":\"TDX\",\"version\":3,\"issueDate\":\"2024-07-15T14:31:12Z\",\"nextUpdate\":\"2024-08-14T14:31:12Z\",\"fmspc\":\"90c06f000000\",\"pceId\":\"0000\",\"tcbType\":0,\"tcbEvaluationDataNumber\":16,\"tdxModule\":{\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\"},\"tdxModuleIdentities\":[{\"id\":\"TDX_03\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},{\"id\":\"TDX_01\",\"mrsigner\":\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"attributes\":\"0000000000000000\",\"attributesMask\":\"FFFFFFFFFFFFFFFF\",\"tcbLevels\":[{\"tcb\":{\"isvsvn\":2},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]}],\"tcbLevels\":[{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":13,\"tdxtcbcomponents\":[{\"svn\":4,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"},{\"tcb\":{\"sgxtcbcomponents\":[{\"svn\":2,\"category\":\"BIOS\",\"type\":\"Early Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"SGX Late Microcode Update\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TXT SINIT\"},{\"svn\":2,\"category\":\"BIOS\"},{\"svn\":3,\"category\":\"BIOS\"},{\"svn\":1,\"category\":\"BIOS\"},{\"svn\":0},{\"svn\":3,\"category\":\"OS/VMM\",\"type\":\"SEAMLDR ACM\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}],\"pcesvn\":5,\"tdxtcbcomponents\":[{\"svn\":4,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":0,\"category\":\"OS/VMM\",\"type\":\"TDX Module\"},{\"svn\":2,\"category\":\"OS/VMM\",\"type\":\"TDX Late Microcode Update\"},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0},{\"svn\":0}]},\"tcbDate\":\"2018-01-04T00:00:00Z\",\"tcbStatus\":\"OutOfDate\",\"advisoryIDs\":[\"INTEL-SA-00106\",\"INTEL-SA-00115\",\"INTEL-SA-00135\",\"INTEL-SA-00203\",\"INTEL-SA-00220\",\"INTEL-SA-00233\",\"INTEL-SA-00270\",\"INTEL-SA-00293\",\"INTEL-SA-00320\",\"INTEL-SA-00329\",\"INTEL-SA-00381\",\"INTEL-SA-00389\",\"INTEL-SA-00477\",\"INTEL-SA-00837\"]}]},\"signature\":\"e8e15c17e42c84384e3731d2d6d2cdf01cd94b4e1e46fd72328d1f522661c06f7ee69e7c5e8f478bd4a68a230d54120c08fcfbae90684a37223d8580baa0ded5\"}"}],"qeIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICjTCCAjKgAwIBAgIUfjiC1ftVKUpASY5FhAPpFJG99FUwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTI1MDUwNjA5MjUwMFoXDTMyMDUwNjA5MjUwMFowbDEeMBwG\nA1UEAwwVSW50ZWwgU0dYIFRDQiBTaWduaW5nMRowGAYDVQQKDBFJbnRlbCBDb3Jw\nb3JhdGlvbjEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYD\nVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABENFG8xzydWRfK92bmGv\nP+mAh91PEyV7Jh6FGJd5ndE9aBH7R3E4A7ubrlh/zN3C4xvpoouGlirMba+W2lju\nypajgbUwgbIwHwYDVR0jBBgwFoAUImUM1lqdNInzg7SVUr9QGzknBqwwUgYDVR0f\nBEswSTBHoEWgQ4ZBaHR0cHM6Ly9jZXJ0aWZpY2F0ZXMudHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9JbnRlbFNHWFJvb3RDQS5kZXIwHQYDVR0OBBYEFH44gtX7VSlK\nQEmORYQD6RSRvfRVMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMAoGCCqG\nSM49BAMCA0kAMEYCIQDdmmRuAo3qCO8TC1IoJMITAoOEw4dlgEBHzSz1TuMSTAIh\nAKVTqOkt59+co0O3m3hC+v5Fb00FjYWcgeu3EijOULo5\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIw\naDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENv\ncnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJ\nBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgG\nA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0\naW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYT\nAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi7\n1OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOB\nuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJ\nMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50\nZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SV\nUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI\nKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwg\nAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=\n-----END CERTIFICATE-----\n","qeIdentity":"{\"enclaveIdentity\":{\"id\":\"TD_QE\",\"version\":2,\"issueDate\":\"2024-09-18T04:54:41Z\",\"nextUpdate\":\"2024-10-18T04:54:41Z\",\"tcbEvaluationDataNumber\":16,\"miscselect\":\"00000000\",\"miscselectMask\":\"FFFFFFFF\",\"attributes\":\"11000000000000000000000000000000\",\"attributesMask\":\"FBFFFFFFFFFFFFFF0000000000000000\",\"mrsigner\":\"DC9E2A7C6F948F17474E34A7FC43ED030F7C1563F1BABDDF6340C82E0E54A8C5\",\"isvprodid\":2,\"tcbLevels\":[{\"tcb\":{\"isvsvn\":4},\"tcbDate\":\"2023-08-09T00:00:00Z\",\"tcbStatus\":\"UpToDate\"}]},\"signature\":\"9a55465480464a6f8d234b427e9500019df8947eecb5db37fab5bb27728384d2b1b9b8cf7539321493be71daf4ae932ca80d77dc6794f4efd174105a072c57ae\"}"},"servtdCollateral":{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"1ADC25055B5188A615FF0A2B4781C0E1F38D4369CA688C775EE321E142FBE4534C14EDE61D9C570967996F6C8E8F5F76"},"isvsvn":1}]},"signature":"3066023100AC9506BE02C2BBD61C4489C35F59C31683DA3274D307DBCDC81FD271C68C8981A9D545A142C9F0E6EF8163ABD4CE4D7C023100B8E4E0BB11A1B21173EB4CFF0685A835A5B5FB3CD0BBEF80D940DC98A092E1F830872E978CBDDD46C3818F38A47B4DE1"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICGDCCAZ6gAwIBAgIUI2qCSZ4o/j7/l/3Nl6Ey59u103swCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA/MSEwHwYDVQQD\nDBhNaWdURCBUQ0IgTWFwcGluZyBJc3N1ZXIxGjAYBgNVBAoMEUludGVsIENvcnBv\ncmF0aW9uMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0DLuzrOa8Iwlckmi+q5XRyga\nAOi/KmCuedEcxcIueU6YaG2zFdI/aP5Tg2BW0ibNrlwrIRuFO5yG/kVvLjqzPHXt\neKz6PGUsAzsjO0YO6oVxSehaGoteFOYHeRkzvTceo2YwZDALBgNVHQ8EBAMCB4Aw\nFQYDVR0lBA4wDAYKKwYBBAGB/VkBATAdBgNVHQ4EFgQUb1W97VrkSsQ2DLBf3pIy\nkYybJ9AwHwYDVR0jBBgwFoAUzbjA8WoRclwlFqbtJoFmo8DFKQ4wCgYIKoZIzj0E\nAwMDaAAwZQIxAMrEiV2BRq6Dlyj90ICNOIDGxeJDkgQgdh9QnCKGf4BzEvuM86D9\n/ohPFc+aPPM4ZQIwFRzINodzbocmwhHdY2gnMdBdZYSGcy5Os7k423D9f69HuTok\nWWQgNP2t1A+0CtbU\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIB+jCCAYCgAwIBAgIUMX1+LqRwwfhB6bDtTlX7N4iJhc0wCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA0MRYwFAYDVQQD\nDA1NaWdURCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjB2MBAG\nByqGSM49AgEGBSuBBAAiA2IABBptQ9M3xyA0cohyQFUukjbZhNgjosbK1Z7op9zQ\nu+IcCY58uSUulesJEt3Q5Ki30WQ5ThX8Lwc6CNjqDPNQqXaTyzcwMRAi7evnfsji\nywKjNxPUuDE6MmlTXG9SS3J+w6NTMFEwHQYDVR0OBBYEFM24wPFqEXJcJRam7SaB\nZqPAxSkOMB8GA1UdIwQYMBaAFM24wPFqEXJcJRam7SaBZqPAxSkOMA8GA1UdEwEB\n/wQFMAMBAf8wCgYIKoZIzj0EAwMDaAAwZQIwOtC/ZbeDkk6pjxeW5xb0Er5Vf88J\nB4rC1N27vz8JFEQ1cGVbVktZ1Ngg3C5foD+DAjEAg00nYaIHw1ZE/g/wyQLFfZhN\n07qIK1LbLfTcPDpWtW7UD5FvOAndCHyKTgq9cBbk\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}],"xfam":"E718060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"","isvProdId":0},"signature":"3065023100C048747DDE26853EE68CC141DC885422A5431762DCB1D18A4B9EB49CDC2B56201B26B4155CCD2A03D496807CF72ED27902305DE5E032CE3C5CC172BA99163BBBCD2EEBB5B62100BFD3480E88DEA01976978839A28AFF7DEAA4E17F66E6473E8277CB"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICGDCCAZ6gAwIBAgIUI2qCSZ4o/j7/l/3Nl6Ey59u1030wCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA/MSEwHwYDVQQD\nDBhNaWdURCBUQ0IgTWFwcGluZyBJc3N1ZXIxGjAYBgNVBAoMEUludGVsIENvcnBv\ncmF0aW9uMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAExykffZEMbJoBRF1lBbOEQWIq\n8ugnf+sIW0R0kzgg/hJrzd0Tc/dx56YOMQ8uLajZJc6Uw/VCPTPcWIKNW+qDLq3p\nV/WYCLs2jQIK0Wi2DvXNHbdeRJ8r7m2b4Eet7ATuo2YwZDALBgNVHQ8EBAMCB4Aw\nFQYDVR0lBA4wDAYKKwYBBAGB/VkBATAdBgNVHQ4EFgQUDseXgtURvY6G41eQmO/I\nx/4jiEswHwYDVR0jBBgwFoAUzbjA8WoRclwlFqbtJoFmo8DFKQ4wCgYIKoZIzj0E\nAwMDaAAwZQIwQtZuyECGGaz+YIsK7MtQZs6L0sP0Yrsm84AScFx0gDwBBpbFsHIW\nOkgFBfATYt7yAjEAxg88iDqFGHWGLtS7fPvlmvP2zZIuLR5uSq2SQJu5hPfbZt86\nTAP6RHdEsC3vnTwS\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIB+jCCAYCgAwIBAgIUMX1+LqRwwfhB6bDtTlX7N4iJhc0wCgYIKoZIzj0EAwMw\nNDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y\nYXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA0MRYwFAYDVQQD\nDA1NaWdURCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjB2MBAG\nByqGSM49AgEGBSuBBAAiA2IABBptQ9M3xyA0cohyQFUukjbZhNgjosbK1Z7op9zQ\nu+IcCY58uSUulesJEt3Q5Ki30WQ5ThX8Lwc6CNjqDPNQqXaTyzcwMRAi7evnfsji\nywKjNxPUuDE6MmlTXG9SS3J+w6NTMFEwHQYDVR0OBBYEFM24wPFqEXJcJRam7SaB\nZqPAxSkOMB8GA1UdIwQYMBaAFM24wPFqEXJcJRam7SaBZqPAxSkOMA8GA1UdEwEB\n/wQFMAMBAf8wCgYIKoZIzj0EAwMDaAAwZQIwOtC/ZbeDkk6pjxeW5xb0Er5Vf88J\nB4rC1N27vz8JFEQ1cGVbVktZ1Ngg3C5foD+DAjEAg00nYaIHw1ZE/g/wyQLFfZhN\n07qIK1LbLfTcPDpWtW7UD5FvOAndCHyKTgq9cBbk\n-----END CERTIFICATE-----\n","servtdCrl":"-----BEGIN X509 CRL-----\nMIIBFjCBnQIBATAKBggqhkjOPQQDAzA0MRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbhcNMjYwNzIxMDIyNjIzWhcNMzYw\nNzE4MDIyNjIzWjAnMCUCFCNqgkmeKP4+/5f9zZehMufbtdN7Fw0yNjA3MjEwMjI2\nMjNaoA8wDTALBgNVHRQEBAICEAEwCgYIKoZIzj0EAwMDaAAwZQIxAP2GrM8v0FFl\nF6d3GC+T1CEAeKZ2Z/xM3iB6V3EV6fQn4s/mnMAuu/9KU+C/lbHSewIwfOlLUOLY\nWnt8YNyfwX056p+jkoxCUmEblYuYE51bsRudtPO6hHgUGpkAvgVmCOAz\n-----END X509 CRL-----\n"}},"signature":"306502310099D83914D7E9A875D6DEE09F5ABC0A03F0A13773A81A5B0AE49087C07BDD84AEC66FCDAB1BE952057791C4DE800AF81F02306EC82549F598294BAE7B2595AD66FC97A92CE8C406FFD9167F03F6FAE3B95AE7832F1EB821974103D4D9B2818D4D8142"} \ No newline at end of file diff --git a/src/policy/test/policy_v2/revocation/signer_chain.pem b/src/policy/test/policy_v2/revocation/signer_chain.pem new file mode 100644 index 000000000..8f6ebc20d --- /dev/null +++ b/src/policy/test/policy_v2/revocation/signer_chain.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICGDCCAZ6gAwIBAgIUI2qCSZ4o/j7/l/3Nl6Ey59u103swCgYIKoZIzj0EAwMw +NDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y +YXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA/MSEwHwYDVQQD +DBhNaWdURCBUQ0IgTWFwcGluZyBJc3N1ZXIxGjAYBgNVBAoMEUludGVsIENvcnBv +cmF0aW9uMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0DLuzrOa8Iwlckmi+q5XRyga +AOi/KmCuedEcxcIueU6YaG2zFdI/aP5Tg2BW0ibNrlwrIRuFO5yG/kVvLjqzPHXt +eKz6PGUsAzsjO0YO6oVxSehaGoteFOYHeRkzvTceo2YwZDALBgNVHQ8EBAMCB4Aw +FQYDVR0lBA4wDAYKKwYBBAGB/VkBATAdBgNVHQ4EFgQUb1W97VrkSsQ2DLBf3pIy +kYybJ9AwHwYDVR0jBBgwFoAUzbjA8WoRclwlFqbtJoFmo8DFKQ4wCgYIKoZIzj0E +AwMDaAAwZQIxAMrEiV2BRq6Dlyj90ICNOIDGxeJDkgQgdh9QnCKGf4BzEvuM86D9 +/ohPFc+aPPM4ZQIwFRzINodzbocmwhHdY2gnMdBdZYSGcy5Os7k423D9f69HuTok +WWQgNP2t1A+0CtbU +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB+jCCAYCgAwIBAgIUMX1+LqRwwfhB6bDtTlX7N4iJhc0wCgYIKoZIzj0EAwMw +NDEWMBQGA1UEAwwNTWlnVEQgUm9vdCBDQTEaMBgGA1UECgwRSW50ZWwgQ29ycG9y +YXRpb24wHhcNMjYwNzIxMDIyNjIzWhcNMjcwNzIxMDIyNjIzWjA0MRYwFAYDVQQD +DA1NaWdURCBSb290IENBMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABBptQ9M3xyA0cohyQFUukjbZhNgjosbK1Z7op9zQ +u+IcCY58uSUulesJEt3Q5Ki30WQ5ThX8Lwc6CNjqDPNQqXaTyzcwMRAi7evnfsji +ywKjNxPUuDE6MmlTXG9SS3J+w6NTMFEwHQYDVR0OBBYEFM24wPFqEXJcJRam7SaB +ZqPAxSkOMB8GA1UdIwQYMBaAFM24wPFqEXJcJRam7SaBZqPAxSkOMA8GA1UdEwEB +/wQFMAMBAf8wCgYIKoZIzj0EAwMDaAAwZQIwOtC/ZbeDkk6pjxeW5xb0Er5Vf88J +B4rC1N27vz8JFEQ1cGVbVktZ1Ngg3C5foD+DAjEAg00nYaIHw1ZE/g/wyQLFfZhN +07qIK1LbLfTcPDpWtW7UD5FvOAndCHyKTgq9cBbk +-----END CERTIFICATE----- diff --git a/src/policy/test/policy_v2/servtd_collateral.json b/src/policy/test/policy_v2/servtd_collateral.json index 333e28f3f..fdd106337 100644 --- a/src/policy/test/policy_v2/servtd_collateral.json +++ b/src/policy/test/policy_v2/servtd_collateral.json @@ -1 +1 @@ -{"majorVersion":1,"minorVersion":0,"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1\nNTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z\nWc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b\ny2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE\nFHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl\nW1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH\ntMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz\ncCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu\nmwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH\nXrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB\naNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8\nFY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU\nXtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu\nQDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd\nArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK\nxW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD\nVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v\nf4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W\nrPSb+wS9KsT0dcF2DU5F12BycQ==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbEvaluationNumber":1,"xfam":"E71A060000000000","attributes":"0000000000000000","mrConfigId":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrOwnerConfig":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","mrsigner":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","isvProdId":1,"tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3064023028CAFFB4B83AD5A8E00A2FD7BDA58E176495E5591E1D9EB9FBC80FD0ABFDA06705B316AD2299BFCD07B82524336328A102306A11A93912045B2438FCD719F84F78D0CDB91CCFC9ED55FF49B47C518CC6071D0B5662E3AECAB78E786000C477A18773"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICVzCCAd6gAwIBAgIUVKXleE/7DfWQZ7seyT3TqMXwAqcwCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI1MDkwNTA1NTI1M1oXDTI2MDkwNTA1\nNTI1M1owYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL1rH/Pc4KUchfNLqm2z\nWc1FC7RfBI4xGUSU/hBnRDmEj5HKWdN2p7YIeUn+z0RiYXUxr5nHed+pvaD2CZ1b\ny2wymsVZQpWIwtf8shfePFJcQrHsYsmmvvwi5ocOXe6ZkaNCMEAwHQYDVR0OBBYE\nFHIbR1J8L+HjJNaHdXioZJ5r9zrSMB8GA1UdIwQYMBaAFJYGgWjSezCJ0vsgGDCl\nW1a/KQLdMAoGCCqGSM49BAMDA2cAMGQCMCshcjFfbTVDx6XJL+ERXKqfTJdhK1oH\ntMQ+m74KW6AfKZt0lqZ5eeFXc/RFW8pKpQIwHsObyRhFH6OaFqxw+oItj2qCRUlz\ncCnHD8l/TBHhUoubb2OMLoENlBLECLtFHV2X\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdqgAwIBAgIUY4sE3O7mKGtP/otJ0s4WQtwn4ZswCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDQ0M1oXDTMwMDkwNDA1NDQ0M1owdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhf4d4GTrO4NhJ24aG5A3i4Qu\nmwGZ+Jsfo3siVVy1/vke9tN+ylkZlR5M2bl4O4y2eeUMGrzwSu84L/7crgqnnZsH\nXrOQslNsSYJzB+YrbeJ1GBG+oDnCxvYgLTvCDtDio0IwQDAdBgNVHQ4EFgQUlgaB\naNJ7MInS+yAYMKVbVr8pAt0wHwYDVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8\nFY0wCgYIKoZIzj0EAwMDaAAwZQIwHoKqUxUqI2Zw8omp82svEjmN477njoK9YtOU\nXtukW4+7RkU6VqSR6ND/9H83PMrLAjEAkPcCM/8QG3yZL1pxvKv87JwOIMJd5eUu\nQDT7gy1UxPCjOETC2ygJyjJdYxBbXQrr\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUeUyrqFAE0stc3jxOpGo12mTasB0wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI1MDkwNTA1NDIxNVoXDTM1MDkwMzA1NDIxNVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEDnCmBt1r87/4VTwChvkyyrbfL79z5cx0NrVN4Gmp6HvpndL95MCd\nArnSdslXL/WmupFbxzy+a6mP4jdmR3oC7KyEaCKftOAct+Pz/e1KVI+QA3arR3IK\nxW5TYzSQpoMdo1MwUTAdBgNVHQ4EFgQUpXzUSS/yVomZP8e814EZVbC8FY0wHwYD\nVR0jBBgwFoAUpXzUSS/yVomZP8e814EZVbC8FY0wDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjBLN5JiAwPChO4RWfAMy+XjUbllaTFTxRqwCRliwx0v\nf4aNNQ6Vrzv3pYXXmwl0CaoCMGFKKLm6EVwvQcILpSL3JpkfcKMfsUlJgdkVlF/W\nrPSb+wS9KsT0dcF2DU5F12BycQ==\n-----END CERTIFICATE-----\n","servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","mrSigner":"00000000000000000000000000000000","isvProdId":1,"svnMappings":[{"tdMeasurements":{"mrtd":"E2C7DA7CF0D93973480F0A34A6FE52A204EA81B4F1B6CD16018F5B4CAEE7B3B544A9738464A7C95E1705E20687A0ADA6","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4"},"isvsvn":1}]},"signature":"306602310096D8260507E3F02698895732273709837C0CBF42DA29AA0891A18F8F4FEC648826E1E0DFB5C590B953F65B5EFB77F0B8023100B18CC20F8EF7C1D4E1CBCAEFF17C0722AC6213A0B7E83FDD580CA760BBDA91D25E714CFA2240BCEBDF039646D749ED84"}} \ No newline at end of file +{"majorVersion":1,"minorVersion":0,"servtdTcbMapping":{"tdTcbMapping":{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]},"signature":"306502302DF213408E43734941EE22050FB1566E9C3AB600D0C0ADE9EDD99A0C91E2D2E44DD54C6B6658C5C2277BD63EF6EE33B702310092B91C8CDED39E93D0E67B02813388445116123AA2298E956559917FE817B8143CA12A9352DA7CCEC2F6D1F58E025F92"},"servtdTcbMappingIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n","servtdIdentity":{"tdIdentity":{"id":"A0998F0F-B2F3-4872-8138-FBC2B853E8C6","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","tcbLevels":[{"tcb":{"isvsvn":1},"tcbDate":"2024-01-01T00:00:00Z","tcbStatus":"UpToDate"}]},"signature":"3066023100A3895AA95723C3DD3975C55480676494940833B0F9D83F8E7DD8F011DEF212B3326EE32FFA1BDF3C41941FF4D4FD86E6023100A5A52A633A85C39D9FE64516256763ADC84E2D548655935508053FD61AA03DB8CDA1FD5116E5A38CD08DAA2C44FFB42C"},"servtdIdentityIssuerChain":"-----BEGIN CERTIFICATE-----\nMIICfzCCAgWgAwIBAgIUb4Ary1FxNDv2tgK5KjW92D71wx8wCgYIKoZIzj0EAwMw\ndDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEiMCAGA1UECgwZTWlnVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwV\nTWlnVEQgSW50ZXJtZWRpYXRlIENBMB4XDTI2MDcyMTAyMjIzMVoXDTI3MDcyMTAy\nMjIzMVowYzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50\nYSBDbGFyYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRowGAYDVQQDDBFNaWdURCBJ\nbmZvIElzc3VlcjB2MBAGByqGSM49AgEGBSuBBAAiA2IABL+t1XLepbWKHwd7iVJl\nUy3P5ZC/XmlelGaGAVHtzT+uyqf95dCdppfmATm5iL6mPCMi/B0EdUVWC8IsRrAb\ntIVKOT+6uQvaqjgBDy8/jpULNFU2amH+tFXaK+3mI3FoXaNpMGcwDgYDVR0PAQH/\nBAQDAgeAMBUGA1UdJQQOMAwGCisGAQQBgf1ZAQEwHQYDVR0OBBYEFAQ3bgBAZVtA\nxB6bSKABbGXJzUg9MB8GA1UdIwQYMBaAFKrpv7T3Goq7ozzv7XybB7KDXfwqMAoG\nCCqGSM49BAMDA2gAMGUCMAC9OBINzzySAY9e6iqUSdueZuL6hNbS7FJjzd4AhLBt\naFDNptrDJzq8QG7TqgDZVAIxAOH/CNjzoJ4Vy/9Wc1gYQvFp/Y8OyIchE+LooQim\n3TOl4G9HofEZt+KxtJ2RtWDESw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICdTCCAfugAwIBAgIUDNYWZVBywkKMCpLBMn/ZrbpVAngwCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTMxMDcyMDAyMjIzMVowdDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEiMCAGA1UECgwZTWln\nVEQgSW50ZXJtZWRpYXRlIElzc3VlcjEeMBwGA1UEAwwVTWlnVEQgSW50ZXJtZWRp\nYXRlIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhtbR7QbD7v9wmJHiLUdRE9SX\nOeGsIpHD2yVPsKeYthmXkK9URtDY4DoeUIxjTPOvJPuH+oGBxuJoQB1DlHNud1e4\nARK1un5WLqJQAM7YH4MDk4e8IgzildxR68Wf5S4Mo2MwYTAPBgNVHRMBAf8EBTAD\nAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUqum/tPcairujPO/tfJsHsoNd\n/CowHwYDVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwCgYIKoZIzj0EAwMD\naAAwZQIwTq/MJUn2EN0Ky18A4BLrKyJvrpozm2JLzPZeMJC7JS8hLCXOtpTF1V9l\ngSKpqbi9AjEAuMTlfVDUvFQGMR6cAOKScwHOJnUMB5eyyIg7AYlY5WcjwLNaV//d\nzw3fC7CR1QR/\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIICTzCCAdagAwIBAgIUYTmEV7kebAA5XSFYNCudbbU/Co8wCgYIKoZIzj0EAwMw\nXzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFy\nYTEVMBMGA1UECgwMTWlnVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENB\nMB4XDTI2MDcyMTAyMjIzMVoXDTM2MDcxODAyMjIzMVowXzELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEVMBMGA1UECgwMTWln\nVEQgSXNzdWVyMRYwFAYDVQQDDA1NaWdURCBSb290IENBMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAEKVtiVC3icjTPZ6yEwO46wmbk38a9N5GZEkTnjXypSwTsC/GfXLA4\ne4wvvwZ/1+sGrogN5DBX/auAFeicLw0CMFNiSocyqalh+LNjYB0vkBLqC5+PQoCa\navI9zsLmyJjUo1MwUTAdBgNVHQ4EFgQULZkd6aI5/Xdm7qbmkrf4JOIgdtEwHwYD\nVR0jBBgwFoAULZkd6aI5/Xdm7qbmkrf4JOIgdtEwDwYDVR0TAQH/BAUwAwEB/zAK\nBggqhkjOPQQDAwNnADBkAjAGWyxXJ4x3oWj1xDkLpcsYCBas0SNIGhXHPQmMbVqM\nmtcDX//3RwD26+yBeZguCIYCMHgCQotN2FZ9PHwcmkA5tQkusL4Ab55d9JfvkjZ7\nHFibzfq7pmApshWt7mQ80fRu/Q==\n-----END CERTIFICATE-----\n"} \ No newline at end of file diff --git a/src/policy/test/policy_v2/tcb_mapping.json b/src/policy/test/policy_v2/tcb_mapping.json index 3a2a362dd..0c92d8be9 100644 --- a/src/policy/test/policy_v2/tcb_mapping.json +++ b/src/policy/test/policy_v2/tcb_mapping.json @@ -1 +1 @@ -{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","mrSigner":"00000000000000000000000000000000","isvProdId":1,"svnMappings":[{"tdMeasurements":{"mrtd":"E2C7DA7CF0D93973480F0A34A6FE52A204EA81B4F1B6CD16018F5B4CAEE7B3B544A9738464A7C95E1705E20687A0ADA6","rtmr0":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4","rtmr1":"518923B0F955D08DA077C96AABA522B9DECEDE61C599CEA6C41889CFBEA4AE4D50529D96FE4D1AFDAFB65E7F95BF23C4", "rtmr3":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1}]} \ No newline at end of file +{"id":"BB9668CA-4EE8-4523-941A-B3B03BE46E03","version":1,"issueDate":"2025-01-01T00:00:00Z","nextUpdate":"2026-01-01T00:00:00Z","svnMappings":[{"tdMeasurements":{"tdinfo_hash":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"isvsvn":1},{"tdMeasurements":{"tdinfo_hash":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},"isvsvn":2}]} \ No newline at end of file diff --git a/tools/migtd-hash/Cargo.toml b/tools/migtd-hash/Cargo.toml index 748e8db94..70a190730 100644 --- a/tools/migtd-hash/Cargo.toml +++ b/tools/migtd-hash/Cargo.toml @@ -11,9 +11,17 @@ clap = { version = "4.0", features = ["derive"] } crypto = { path = "../../src/crypto" } env_logger = "0.10" igvm = "0.3.4" +hex = "0.4" log = "0.4" -migtd = { path = "../../src/migtd", default-features = false } +# NOTE: We intentionally do NOT depend on the `migtd` crate here. Depending on +# `migtd` with `policy_v2` enabled drags in `attestation/attest-lib-ext`, which +# in turn builds the SGX `servtd_attest` C library — and that requires a +# special host link step (defining `__ImageBase`) to produce a working host +# binary. migtd-hash only needs a handful of constants (CFV size, FFS GUIDs, +# the test-disable-RA event tag), which are inlined in src/migtd_consts.rs. +policy = { path = "../../src/policy", default-features = false, features = ["policy_v2"] } +r-efi = "3.2.0" serde_json = "1.0" td-layout = { path = "../../deps/td-shim/td-layout" } td-shim-tools = { path = "../../deps/td-shim/td-shim-tools", default-features = false, features = ["tee"] } -td-shim-interface = { path = "../../deps/td-shim/td-shim-interface" } \ No newline at end of file +td-shim-interface = { path = "../../deps/td-shim/td-shim-interface" } diff --git a/tools/migtd-hash/readme.md b/tools/migtd-hash/readme.md index bcc95d095..8720b0ea3 100644 --- a/tools/migtd-hash/readme.md +++ b/tools/migtd-hash/readme.md @@ -32,11 +32,29 @@ popd ./target/debug/migtd-hash --manifest config/servtd_info.json --image <migtd.bin> --verbose ``` - - Calculate migtd SERVTD_INFO_HASH and update tcb_mapping.json (For policy v2) + - Calculate the current `tdinfo_hash` and add it to a cumulative policy-v2 + TCB mapping: ``` - ./target/debug/migtd-hash --manifest config/servtd_info.json --image <migtd.bin> --update-tcb-mapping <tcb_mapping.json> --policy-v2 --verbose + ./target/debug/migtd-hash \ + --manifest config/servtd_info.json \ + --image <migtd.bin> \ + --policy-v2 \ + --update-tcb-mapping <previous-release-tcb_mapping.json> \ + --output-tcb-mapping <new-release-tcb_mapping.json> \ + --mapping-isvsvn <svn> \ + --verbose ``` + Existing hashes are retained with immutable SVN assignments, new release + SVNs must be no lower than the historical maximum, and entries are sorted by + uppercase hash for stable signing input. Conflicting duplicate hashes are + rejected. Use + `config/templates/tcb_mapping_seed.json` only when no prior release exists. + + Historical hash assignments are append-only and are never removed. Revoke + a release by revoking the mapping's leaf signer certificate through the + locally authoritative servTD CRL. + - Generate migtd SERVTD_HASH with debug infomation: ``` ./target/debug/migtd-hash --manifest config/servtd_info.json --image <migtd.bin> --servtd-attr 0 --calc-servtd-hash --verbose diff --git a/tools/migtd-hash/src/lib.rs b/tools/migtd-hash/src/lib.rs index f486cc5c2..0e7c7dd72 100644 --- a/tools/migtd-hash/src/lib.rs +++ b/tools/migtd-hash/src/lib.rs @@ -5,14 +5,9 @@ use anyhow::{anyhow, Error, Result}; use crypto::{hash::digest_sha384, SHA384_DIGEST_SIZE}; use igvm::{IgvmDirectiveHeader, IgvmFile}; -use migtd::{ - config::{ - CONFIG_VOLUME_SIZE, MIGTD_POLICY_FFS_GUID, MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID, - MIGTD_ROOT_CA_FFS_GUID, - }, - event_log::TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT, -}; +use serde_json::{json, Value}; use std::{ + collections::BTreeMap, fs::File, io::{Read, Seek, SeekFrom}, mem::size_of, @@ -21,6 +16,13 @@ use td_layout::build_time::TD_SHIM_CONFIG_BASE; use td_shim_interface::td_uefi_pi::{fv, pi}; use td_shim_tools::tee_info_hash::{Manifest, TdInfoStruct}; +mod migtd_consts; +use migtd_consts::{ + CONFIG_VOLUME_SIZE, MIGTD_POLICY_FFS_GUID, MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID, + MIGTD_ROOT_CA_FFS_GUID, MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID, + TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT, +}; + const MIGTD_IMAGE_SIZE: u64 = 0x100_0000; pub const SERVTD_TYPE_MIGTD: u16 = 0; @@ -36,16 +38,31 @@ const SERVTD_ATTR_IGNORE_RTMR1: u64 = 0x80_0000_0000; const SERVTD_ATTR_IGNORE_RTMR2: u64 = 0x100_0000_0000; const SERVTD_ATTR_IGNORE_RTMR3: u64 = 0x200_0000_0000; -pub fn build_td_info( +/// Build the unmasked TDINFO_STRUCT from the MigTD image and its manifest. +/// +/// MRTD/RTMR0 are derived from the IGVM image's measured pages alone. +/// RTMR1/RTMR2 are derived from the CFV contents (policy issuer chain + +/// signed policyData fields). The build pipeline produces a base IGVM with +/// dummy CFV contents; the release pipeline injects the production policy + +/// chain into the same base IGVM via `td-shim-enroll` (no Rust rebuild) and +/// then calls this function on the re-enrolled binary to get the production +/// `tdinfo_hash`. There is therefore no projection / override path here: +/// what the IGVM contains is what we measure. +/// +/// This does NOT apply any `servtd_attr` ignore-bit masking. Call +/// [`apply_servtd_attr_masks`] separately if you need a masked copy. The +/// unmasked struct is required for the `tdinfo_hash` field of v2 TCB mappings: +/// `tdinfo_hash = SHA384(unmasked_TDINFO) = init_servtd_info_hash` when +/// `servtd_attr == 0`. +pub fn build_td_info_unmasked( manifest: &[u8], mut image: File, is_ra_disabled: bool, is_policy_v2: bool, - servtd_attr: u64, igvmformat: bool, ) -> Result<TdInfoStruct, Error> { // Initialize the configurable fields of TD info structure. - let manifest = serde_json::from_slice::<Manifest>(&manifest)?; + let manifest = serde_json::from_slice::<Manifest>(manifest)?; let mut td_info = TdInfoStruct { attributes: manifest.attributes, xfam: manifest.xfam, @@ -56,15 +73,12 @@ pub fn build_td_info( }; if igvmformat { - // Calculate the MRTD with MigTD image td_info.build_igvmmrtd(&mut image); } else { - // Calculate the MRTD with MigTD image td_info.build_mrtd(&mut image, MIGTD_IMAGE_SIZE); } - // Calculate RTMR0 and RTMR1 td_info.build_rtmr_with_seperator(0); - // Calculate RTMR2 with CFV + let mut cfv = vec![0u8; CONFIG_VOLUME_SIZE]; image.seek(SeekFrom::Start(0))?; if igvmformat { @@ -79,6 +93,28 @@ pub fn build_td_info( .rtmr2 .copy_from_slice(rtmr2(&cfv, is_ra_disabled, is_policy_v2)?.as_slice()); + Ok(td_info) +} + +/// Field-by-field clone of a [`TdInfoStruct`] (which does not derive [`Clone`]). +pub fn clone_td_info(td: &TdInfoStruct) -> TdInfoStruct { + TdInfoStruct { + attributes: td.attributes, + xfam: td.xfam, + mrtd: td.mrtd, + mrconfig_id: td.mrconfig_id, + mrowner: td.mrowner, + mrownerconfig: td.mrownerconfig, + rtmr0: td.rtmr0, + rtmr1: td.rtmr1, + rtmr2: td.rtmr2, + rtmr3: td.rtmr3, + reserved: td.reserved, + } +} + +/// Apply the `IGNORE_*` masks in `servtd_attr` to `td_info` in place. +pub fn apply_servtd_attr_masks(td_info: &mut TdInfoStruct, servtd_attr: u64) { if (servtd_attr & SERVTD_ATTR_IGNORE_ATTRIBUTES) != 0 { td_info.attributes.fill(0); } @@ -109,7 +145,21 @@ pub fn build_td_info( if (servtd_attr & SERVTD_ATTR_IGNORE_RTMR3) != 0 { td_info.rtmr3.fill(0); } +} +/// Backwards-compatible wrapper that builds the TDINFO_STRUCT and applies the +/// `servtd_attr` ignore-bit masks in one shot. +pub fn build_td_info( + manifest: &[u8], + image: File, + is_ra_disabled: bool, + is_policy_v2: bool, + servtd_attr: u64, + igvmformat: bool, +) -> Result<TdInfoStruct, Error> { + let mut td_info = + build_td_info_unmasked(manifest, image, is_ra_disabled, is_policy_v2, igvmformat)?; + apply_servtd_attr_masks(&mut td_info, servtd_attr); Ok(td_info) } @@ -162,6 +212,122 @@ pub fn calculate_servtd_info_hash(td_info: TdInfoStruct) -> Result<Vec<u8>, Erro digest_sha384(&buffer).map_err(|_| anyhow!("Calculate digest")) } +/// Compute the canonical v2 `tdinfo_hash` for a production MigTD (attr=0). +/// +/// Definition (per TDX module spec and `doc/tcb_mapping_design_proposal.md`): +/// `tdinfo_hash = SHA384(TDINFO_STRUCT_512_bytes)` +/// +/// This equals `init_servtd_info_hash` in SERVTD_EXT_STRUCT when `servtd_attr +/// == 0` (the production profile), enabling direct MAA lookup through +/// `svnMappings[].tdMeasurements.tdinfo_hash`. +pub fn calculate_tdinfo_hash(td_info: TdInfoStruct) -> Result<Vec<u8>, Error> { + calculate_servtd_info_hash(td_info) +} + +fn canonical_tdinfo_hash(hash: &str) -> Result<String> { + let bytes = + hex::decode(hash.trim()).map_err(|_| anyhow!("tdinfo_hash is not valid hexadecimal"))?; + if bytes.len() != SHA384_DIGEST_SIZE { + return Err(anyhow!( + "tdinfo_hash is {} bytes, expected {}", + bytes.len(), + SHA384_DIGEST_SIZE + )); + } + Ok(hex::encode_upper(bytes)) +} + +/// Add an immutable release entry to a v2 TCB mapping. +/// +/// Existing mappings are retained by default. Duplicate hashes with the same +/// SVN are collapsed, while conflicting duplicate hashes are rejected. The +/// SVN for a newly added hash must be no lower than every historical SVN. The +/// result is sorted by the canonical uppercase hash and serialized without a +/// trailing newline so repeated updates produce stable signing input. +pub fn update_tcb_mapping_v2( + input: &[u8], + current_mapping: Option<(&[u8], u16)>, +) -> Result<Vec<u8>> { + let mut document: Value = + serde_json::from_slice(input).map_err(|e| anyhow!("invalid TCB mapping JSON: {e}"))?; + let svn_mappings = document + .get_mut("svnMappings") + .and_then(Value::as_array_mut) + .ok_or_else(|| anyhow!("'svnMappings' missing or not an array"))?; + + let mut mappings = BTreeMap::<String, u16>::new(); + for (index, mapping) in svn_mappings.iter().enumerate() { + let hash = mapping + .get("tdMeasurements") + .and_then(|measurements| measurements.get("tdinfo_hash")) + .and_then(Value::as_str) + .ok_or_else(|| { + anyhow!("svnMappings[{index}].tdMeasurements.tdinfo_hash missing or not a string") + })?; + let hash = canonical_tdinfo_hash(hash) + .map_err(|e| anyhow!("invalid svnMappings[{index}] tdinfo_hash: {e}"))?; + let svn = mapping + .get("isvsvn") + .and_then(Value::as_u64) + .and_then(|svn| u16::try_from(svn).ok()) + .ok_or_else(|| anyhow!("svnMappings[{index}].isvsvn missing or outside u16 range"))?; + + if let Some(previous_svn) = mappings.insert(hash.clone(), svn) { + if previous_svn != svn { + return Err(anyhow!( + "conflicting duplicate tdinfo_hash {hash}: SVN {previous_svn} and {svn}" + )); + } + } + } + + let current_mapping = current_mapping + .map(|(hash, svn)| { + if hash.len() != SHA384_DIGEST_SIZE { + return Err(anyhow!( + "current tdinfo_hash is {} bytes, expected {}", + hash.len(), + SHA384_DIGEST_SIZE + )); + } + Ok((hex::encode_upper(hash), svn)) + }) + .transpose()?; + + if let Some((hash, svn)) = current_mapping { + if let Some(previous_svn) = mappings.get(&hash) { + if *previous_svn != svn { + return Err(anyhow!( + "tdinfo_hash {hash} is immutable: existing SVN {previous_svn}, requested {svn}" + )); + } + } else { + if let Some(max_svn) = mappings.values().max() { + if svn < *max_svn { + return Err(anyhow!( + "new tdinfo_hash SVN {svn} is lower than historical maximum SVN {max_svn}" + )); + } + } + mappings.insert(hash, svn); + } + } + + *svn_mappings = mappings + .into_iter() + .map(|(hash, svn)| { + json!({ + "tdMeasurements": { + "tdinfo_hash": hash, + }, + "isvsvn": svn, + }) + }) + .collect(); + + serde_json::to_vec(&document).map_err(|e| anyhow!("failed to serialize TCB mapping: {e}")) +} + fn rtmr1( cfv: &[u8], rtmr1: &[u8; SHA384_DIGEST_SIZE], @@ -169,13 +335,31 @@ fn rtmr1( ) -> Result<Vec<u8>, Error> { let mut rtmr1 = Rtmr::new_with_value(rtmr1); if is_policy_v2 { - let policy_issuer_chain = fv::get_file_from_fv( + // Prefer the 48-byte signer-anchor slot (CoRIM-only enrollment); fall + // back to the policy issuer chain PEM (legacy JSON enrollment). Both + // resolve to the same RTMR1 anchor via `resolve_signer_anchor`. + let anchor_source = fv::get_file_from_fv( cfv, pi::fv::FV_FILETYPE_RAW, - MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID, + MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID, ) - .ok_or(anyhow!("Unable to get policy issuer chain from image"))?; - rtmr1.extend_with_raw_data(policy_issuer_chain)?; + .or_else(|| { + fv::get_file_from_fv( + cfv, + pi::fv::FV_FILETYPE_RAW, + MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID, + ) + }) + .ok_or(anyhow!( + "Unable to get signer anchor / policy issuer chain from image" + ))?; + + // v2: extend with SHA384(signer_anchor) where + // signer_anchor = SHA384("MIGTD-RTMR1-ANCHOR-V1" || 0x00 || + // SHA384(root_der) || 0x00 || leaf_eku_oid_der) + let anchor = policy::resolve_signer_anchor(anchor_source) + .map_err(|e| anyhow!("Failed to resolve signer anchor: {:?}", e))?; + rtmr1.extend_with_raw_data(&anchor)?; } Ok(rtmr1.as_bytes().to_vec()) @@ -186,9 +370,25 @@ fn rtmr2(cfv: &[u8], is_ra_disabled: bool, is_policy_v2: bool) -> Result<Vec<u8> if !is_ra_disabled { let policy = fv::get_file_from_fv(cfv, pi::fv::FV_FILETYPE_RAW, MIGTD_POLICY_FFS_GUID) .ok_or(anyhow!("Unable to get policy from image"))?; - rtmr2.extend_with_raw_data(policy)?; - if !is_policy_v2 { + if is_policy_v2 { + // v2 (single-extend RTMR2): one extend over the canonical bytes + // of `policyData` with `servtdCollateral.servtdTcbMapping` + // removed. See doc/tcb_mapping_design_proposal.md. The exact same + // helper is used by the runtime (`get_policy_and_measure`) and + // the integrity verifier (`check_policy_integrity`), so a + // mismatch here would also break runtime attestation — there is + // no separate "offline format". + // + // The bytes are taken straight from the CFV's enrolled policy; + // the release pipeline injects the production-signed policy via + // `td-shim-enroll` before this function is called, so what we + // measure here is what the shipped IGVM will produce at runtime. + let policy_data_bytes = policy::extract_canonical_policy_data_bytes(policy) + .map_err(|e| anyhow!("Failed to extract canonical policyData bytes: {:?}", e))?; + rtmr2.extend_with_raw_data(&policy_data_bytes)?; + } else { + rtmr2.extend_with_raw_data(policy)?; let root_ca = fv::get_file_from_fv(cfv, pi::fv::FV_FILETYPE_RAW, MIGTD_ROOT_CA_FFS_GUID) .ok_or(anyhow!("Unable to get root CA from image"))?; @@ -266,6 +466,79 @@ fn calculate_digest(data: &[u8]) -> Result<Vec<u8>, Error> { #[cfg(test)] mod tests { use super::copy_igvm_cfv_page; + use super::migtd_consts::{ + CONFIG_VOLUME_SIZE, MIGTD_POLICY_FFS_GUID, MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID, + MIGTD_ROOT_CA_FFS_GUID, TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT, + }; + use super::update_tcb_mapping_v2; + use r_efi::efi::Guid; + use serde_json::Value; + use td_layout::build_time::TD_SHIM_CONFIG_SIZE; + + const HASH_11: &str = + "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; + const HASH_AA: &str = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + + // Drift-guards: these constants are duplicated from the `migtd` crate so + // this tool does not transitively pull in the SGX attestation static lib. + // If `migtd::config::*` or `migtd::event_log::*` ever change, the + // upstream values must be updated here AND below to keep them in sync. + + #[test] + fn config_volume_size_matches_td_layout() { + assert_eq!(CONFIG_VOLUME_SIZE, TD_SHIM_CONFIG_SIZE as usize); + } + + #[test] + fn migtd_policy_ffs_guid_matches_upstream() { + let expected = Guid::from_fields( + 0x0BE92DC3, + 0x6221, + 0x4C98, + 0x87, + 0xC1, + &[0x8E, 0xEF, 0xFD, 0x70, 0xDE, 0x5A], + ); + assert_eq!(MIGTD_POLICY_FFS_GUID.as_bytes(), expected.as_bytes()); + } + + #[test] + fn migtd_root_ca_ffs_guid_matches_upstream() { + let expected = Guid::from_fields( + 0xCA437832, + 0x4C51, + 0x4322, + 0xB1, + 0x3D, + &[0xA2, 0x1B, 0xD0, 0xC8, 0xFF, 0xF6], + ); + assert_eq!(MIGTD_ROOT_CA_FFS_GUID.as_bytes(), expected.as_bytes()); + } + + #[test] + fn migtd_policy_issuer_chain_ffs_guid_matches_upstream() { + let expected = Guid::from_fields( + 0x3F2FB27A, + 0x9596, + 0x431C, + 0xA6, + 0x8D, + &[0xD3, 0xEA, 0xB3, 0x9F, 0x8A, 0xEB], + ); + assert_eq!( + MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID.as_bytes(), + expected.as_bytes() + ); + } + + #[test] + fn test_disable_ra_event_matches_upstream() { + assert_eq!( + TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT, + b"test_disable_ra_and_accept_all" + ); + } #[test] fn igvm_cfv_pages_preserve_gpa_gaps() { @@ -284,4 +557,140 @@ mod tests { assert!(copy_igvm_cfv_page(&mut cfv, 0x1000, 0x1010, 0x2000, &[1, 2]).is_ok()); assert_eq!(cfv, [0u8; 16]); } + + #[test] + fn tcb_mapping_add_retains_historical_releases() { + let input = format!( + r#"{{"id":"mapping","svnMappings":[{{"tdMeasurements":{{"tdinfo_hash":"{HASH_AA}"}},"isvsvn":1}}]}}"# + ); + let current = [0x11u8; 48]; + + let output = update_tcb_mapping_v2(input.as_bytes(), Some((¤t, 2))).unwrap(); + let value: Value = serde_json::from_slice(&output).unwrap(); + let mappings = value["svnMappings"].as_array().unwrap(); + + assert_eq!(mappings.len(), 2); + assert_eq!(mappings[0]["tdMeasurements"]["tdinfo_hash"], HASH_11); + assert_eq!(mappings[0]["isvsvn"], 2); + assert_eq!(mappings[1]["tdMeasurements"]["tdinfo_hash"], HASH_AA); + assert_eq!(mappings[1]["isvsvn"], 1); + } + + #[test] + fn tcb_mapping_retains_multiple_hashes_for_same_svn() { + let input = format!( + r#"{{"id":"mapping","svnMappings":[{{"tdMeasurements":{{"tdinfo_hash":"{HASH_AA}"}},"isvsvn":1}}]}}"# + ); + let current = [0x11u8; 48]; + + let output = update_tcb_mapping_v2(input.as_bytes(), Some((¤t, 1))).unwrap(); + let value: Value = serde_json::from_slice(&output).unwrap(); + let mappings = value["svnMappings"].as_array().unwrap(); + + assert_eq!(mappings.len(), 2); + assert!(mappings.iter().all(|mapping| mapping["isvsvn"] == 1)); + assert!(mappings + .iter() + .any(|mapping| mapping["tdMeasurements"]["tdinfo_hash"] == HASH_11)); + assert!(mappings + .iter() + .any(|mapping| mapping["tdMeasurements"]["tdinfo_hash"] == HASH_AA)); + } + + #[test] + fn tcb_mapping_two_phase_uses_authority_history_not_mock_output() { + let historical_hash = "22".repeat(48); + let authority = format!( + r#"{{"svnMappings":[{{"tdMeasurements":{{"tdinfo_hash":"{historical_hash}"}},"isvsvn":1}}]}}"# + ); + let mock_hash = [0x33u8; 48]; + let real_hash = [0x44u8; 48]; + + let phase_one = update_tcb_mapping_v2(authority.as_bytes(), Some((&mock_hash, 2))).unwrap(); + let phase_one: Value = serde_json::from_slice(&phase_one).unwrap(); + assert!(phase_one["svnMappings"] + .as_array() + .unwrap() + .iter() + .any(|mapping| mapping["tdMeasurements"]["tdinfo_hash"] == "33".repeat(48))); + + // The measured-image phase must restart from the authority input, not + // from phase one's generated output containing the transient mock hash. + let final_mapping = + update_tcb_mapping_v2(authority.as_bytes(), Some((&real_hash, 2))).unwrap(); + let final_mapping: Value = serde_json::from_slice(&final_mapping).unwrap(); + let mappings = final_mapping["svnMappings"].as_array().unwrap(); + + assert_eq!(mappings.len(), 2); + assert!(mappings + .iter() + .any(|mapping| mapping["tdMeasurements"]["tdinfo_hash"] == historical_hash)); + assert!(mappings + .iter() + .any(|mapping| mapping["tdMeasurements"]["tdinfo_hash"] == "44".repeat(48))); + assert!(!mappings + .iter() + .any(|mapping| mapping["tdMeasurements"]["tdinfo_hash"] == "33".repeat(48))); + } + + #[test] + fn tcb_mapping_repeat_same_assignment_is_deterministic() { + let input = format!( + r#"{{"svnMappings":[{{"isvsvn":1,"tdMeasurements":{{"tdinfo_hash":"{}"}}}}]}}"#, + HASH_AA.to_ascii_lowercase() + ); + let current = [0xAAu8; 48]; + + let first = update_tcb_mapping_v2(input.as_bytes(), Some((¤t, 1))).unwrap(); + let second = update_tcb_mapping_v2(&first, Some((¤t, 1))).unwrap(); + let value: Value = serde_json::from_slice(&first).unwrap(); + + assert_eq!(first, second); + assert_eq!(value["svnMappings"].as_array().unwrap().len(), 1); + assert_eq!( + value["svnMappings"][0]["tdMeasurements"]["tdinfo_hash"], + HASH_AA + ); + assert_eq!(value["svnMappings"][0]["isvsvn"], 1); + } + + #[test] + fn tcb_mapping_rejects_conflicting_duplicate_hashes() { + let input = format!( + r#"{{"svnMappings":[ + {{"tdMeasurements":{{"tdinfo_hash":"{HASH_AA}"}},"isvsvn":1}}, + {{"tdMeasurements":{{"tdinfo_hash":"{}"}},"isvsvn":2}} + ]}}"#, + HASH_AA.to_ascii_lowercase() + ); + + let error = update_tcb_mapping_v2(input.as_bytes(), None).unwrap_err(); + assert!(error + .to_string() + .contains("conflicting duplicate tdinfo_hash")); + } + + #[test] + fn tcb_mapping_rejects_reassigning_existing_hash() { + let input = format!( + r#"{{"svnMappings":[{{"tdMeasurements":{{"tdinfo_hash":"{HASH_AA}"}},"isvsvn":1}}]}}"# + ); + let current = [0xAAu8; 48]; + + let error = update_tcb_mapping_v2(input.as_bytes(), Some((¤t, 2))).unwrap_err(); + assert!(error.to_string().contains("is immutable")); + } + + #[test] + fn tcb_mapping_rejects_lower_svn_for_new_release() { + let input = format!( + r#"{{"svnMappings":[{{"tdMeasurements":{{"tdinfo_hash":"{HASH_AA}"}},"isvsvn":2}}]}}"# + ); + let current = [0x11u8; 48]; + + let error = update_tcb_mapping_v2(input.as_bytes(), Some((¤t, 1))).unwrap_err(); + assert!(error + .to_string() + .contains("lower than historical maximum SVN")); + } } diff --git a/tools/migtd-hash/src/main.rs b/tools/migtd-hash/src/main.rs index 9a2b24fec..c617c83db 100644 --- a/tools/migtd-hash/src/main.rs +++ b/tools/migtd-hash/src/main.rs @@ -6,7 +6,9 @@ use anyhow::{anyhow, Context}; use clap::Parser; use log::debug; use migtd_hash::{ - build_td_info, calculate_servtd_hash, calculate_servtd_info_hash, SERVTD_TYPE_MIGTD, + apply_servtd_attr_masks, build_td_info_unmasked, calculate_servtd_hash, + calculate_servtd_info_hash, calculate_tdinfo_hash, clone_td_info, update_tcb_mapping_v2, + SERVTD_TYPE_MIGTD, }; use serde_json::{json, Value}; use std::{ @@ -14,6 +16,7 @@ use std::{ path::{Path, PathBuf}, process::exit, }; +use td_shim_tools::tee_info_hash::TdInfoStruct; const SERVTD_HASH_KEY: &str = "servtdHash"; const SERVTD_INFO_HASH_KEY: &str = "servtdInfoHash"; @@ -22,16 +25,88 @@ fn bytes_to_hex(bytes: &[u8]) -> String { bytes.iter().map(|byte| format!("{:02x}", byte)).collect() } -fn update_tcb_mapping_file( - path: &Path, +/// Decode `field` from a hex string in `value`, expecting `expected_len` bytes. +fn decode_hex_field(value: &Value, field: &str, expected_len: usize) -> anyhow::Result<Vec<u8>> { + let s = value + .get(field) + .and_then(Value::as_str) + .ok_or_else(|| anyhow!("'{}' missing or not a string in report JSON", field))?; + let bytes = hex::decode(s.trim()) + .with_context(|| format!("Failed to hex-decode '{}': {}", field, s))?; + if bytes.len() != expected_len { + return Err(anyhow!( + "'{}' is {} bytes, expected {}", + field, + bytes.len(), + expected_len + )); + } + Ok(bytes) +} + +/// Build an unmasked TdInfoStruct directly from an azcvm-extract-report JSON +/// dump. The report's RTMR2 value is taken verbatim (it is already the +/// runtime measurement extended by the live MigTD; no offline recomputation +/// is needed or possible without the matching IGVM + policy). +fn build_td_info_from_report(report_path: &Path) -> anyhow::Result<TdInfoStruct> { + let raw = fs::read(report_path) + .with_context(|| format!("Failed to read {}", report_path.display()))?; + let v: Value = serde_json::from_slice(&raw) + .with_context(|| format!("Failed to parse {}", report_path.display()))?; + + let mut td = TdInfoStruct::default(); + td.attributes + .copy_from_slice(&decode_hex_field(&v, "attributes", 8)?); + td.xfam.copy_from_slice(&decode_hex_field(&v, "xfam", 8)?); + td.mrtd.copy_from_slice(&decode_hex_field(&v, "mrtd", 48)?); + td.mrconfig_id + .copy_from_slice(&decode_hex_field(&v, "mrConfigId", 48)?); + td.mrowner + .copy_from_slice(&decode_hex_field(&v, "mrOwner", 48)?); + td.mrownerconfig + .copy_from_slice(&decode_hex_field(&v, "mrOwnerConfig", 48)?); + td.rtmr0 + .copy_from_slice(&decode_hex_field(&v, "rtmr0", 48)?); + td.rtmr1 + .copy_from_slice(&decode_hex_field(&v, "rtmr1", 48)?); + td.rtmr2 + .copy_from_slice(&decode_hex_field(&v, "rtmr2", 48)?); + td.rtmr3 + .copy_from_slice(&decode_hex_field(&v, "rtmr3", 48)?); + Ok(td) +} + +fn update_tcb_mapping_file_v2( + input_path: &Path, + output_path: &Path, + current_mapping: Option<(&[u8], u16)>, +) -> anyhow::Result<()> { + let manifest = + fs::read(input_path).with_context(|| format!("Failed to read {}", input_path.display()))?; + let serialized = update_tcb_mapping_v2(&manifest, current_mapping) + .with_context(|| format!("Failed to update {}", input_path.display()))?; + fs::write(output_path, serialized).with_context(|| { + format!( + "Failed to write updated tcb mapping to {}", + output_path.display() + ) + })?; + println!("Updated {} successfully.", output_path.display()); + Ok(()) +} + +/// Legacy v1 writer: writes mrtd/rtmr0/rtmr1 into the TCB mapping file. +fn update_tcb_mapping_file_v1( + input_path: &Path, + output_path: &Path, mrtd: &[u8], rtmr0: &[u8], rtmr1: &[u8], ) -> anyhow::Result<()> { - let manifest = - fs::read_to_string(path).with_context(|| format!("Failed to read {}", path.display()))?; + let manifest = fs::read_to_string(input_path) + .with_context(|| format!("Failed to read {}", input_path.display()))?; let mut tcb_mapping: Value = serde_json::from_str(&manifest) - .with_context(|| format!("Failed to parse {}", path.display()))?; + .with_context(|| format!("Failed to parse {}", input_path.display()))?; let svn_mappings = tcb_mapping .get_mut("svnMappings") @@ -39,18 +114,18 @@ fn update_tcb_mapping_file( .ok_or_else(|| { anyhow!( "'svnMappings' missing or not an array in {}", - path.display() + input_path.display() ) })?; let td_measurements = svn_mappings .get_mut(0) - .ok_or_else(|| anyhow!("'svnMappings' array is empty in {}", path.display()))? + .ok_or_else(|| anyhow!("'svnMappings' array is empty in {}", input_path.display()))? .get_mut("tdMeasurements") .and_then(Value::as_object_mut) .ok_or_else(|| { anyhow!( "'tdMeasurements' missing or not an object in {}", - path.display() + input_path.display() ) })?; @@ -67,22 +142,37 @@ fn update_tcb_mapping_file( let serialized = serde_json::to_string(&tcb_mapping).with_context(|| { format!( "Failed to serialize updated tcb mapping for {}", - path.display() + input_path.display() + ) + })?; + fs::write(output_path, serialized).with_context(|| { + format!( + "Failed to write updated tcb mapping to {}", + output_path.display() ) })?; - fs::write(path, serialized) - .with_context(|| format!("Failed to write updated tcb mapping to {}", path.display()))?; - println!("Updated {} successfully.", path.display()); + println!("Updated {} successfully.", output_path.display()); Ok(()) } #[derive(Clone, Parser)] struct Config { - /// A json format manifest that contains values of TD info fields + /// A json format manifest that contains values of TD info fields. + /// Required when using `--image`; ignored with `--from-report`. #[clap(short, long)] - pub manifest: String, - /// Path of MigTD image file + pub manifest: Option<String>, + /// Path of MigTD image file. + /// Required when computing measurements from a build artifact; mutually + /// exclusive with `--from-report`. #[clap(short, long)] - pub image: String, + pub image: Option<String>, + /// Path of a `migtd_report_data.json` produced by `azcvm-extract-report` + /// (camelCase fields: mrtd, rtmr0..3, attributes, xfam, mrConfigId, + /// mrOwner, mrOwnerConfig — all hex). When set, the TDINFO_STRUCT is + /// taken verbatim from the report and `--image`/`--manifest` are not + /// needed. Intended for the AzCVMEmu mock-report flow where no IGVM is + /// available. Requires `--policy-v2`. + #[clap(long, conflicts_with_all = ["image", "manifest"])] + pub from_report: Option<PathBuf>, /// Output binary of tee info hash #[clap(short, long)] pub output_file: Option<PathBuf>, @@ -104,12 +194,28 @@ struct Config { /// Output in TD Info in JSON format #[clap(long)] pub output_td_info: Option<PathBuf>, + /// Output the v2-style `tdinfo_hash` (= SHA384(TDINFO_STRUCT), equals + /// `init_servtd_info_hash` for attr=0) as a hex-encoded text file. + /// ALWAYS uses unmasked TDINFO regardless of `--servtd-attr`. + #[clap(long)] + pub output_tdinfo_hash: Option<PathBuf>, /// Enable verbose logging #[clap(short, long)] pub verbose: bool, - /// Update the provided tcb_mapping JSON with the generated TD measurements + /// Update the provided tcb_mapping JSON with the generated TD measurements. + /// For v2 (`--policy-v2`), writes `tdinfo_hash` to `tdMeasurements`. + /// For v1, writes `mrtd`/`rtmr0`/`rtmr1`. #[clap(long)] pub update_tcb_mapping: Option<PathBuf>, + /// Write the updated TCB mapping to a separate path instead of replacing + /// `--update-tcb-mapping`. This preserves the previous signed release + /// artifact as the input history. + #[clap(long, requires = "update_tcb_mapping")] + pub output_tcb_mapping: Option<PathBuf>, + /// ISV SVN assigned to the generated v2 `tdinfo_hash`. Required when + /// `--policy-v2` updates a mapping from an image or report. + #[clap(long, requires = "update_tcb_mapping")] + pub mapping_isvsvn: Option<u16>, } fn main() { @@ -127,93 +233,132 @@ fn main() { } debug!("Starting migtd-hash tool"); - debug!("Image: {}", config.image); - debug!("Manifest: {}", config.manifest); - let imagename = config.image.clone(); - let mut igvmformat = false; - - debug!("Opening image file: {}", config.image); - let image = File::open(config.image).unwrap_or_else(|e| { - eprintln!("Failed to open MigTD image: {}", e); + + let servtd_attr = config.servtd_attr.unwrap_or(0); + debug!("ServTD attributes: {:#x}", servtd_attr); + + if !config.policy_v2 && config.mapping_isvsvn.is_some() { + eprintln!("mapping SVN requires --policy-v2"); exit(1); - }); + } - debug!("Reading manifest file: {}", config.manifest); - let manifest = fs::read(config.manifest).unwrap_or_else(|e| { - eprintln!("Failed to open manifest file: {}", e); + let has_measurement_input = config.from_report.is_some() || config.image.is_some(); + if !has_measurement_input && config.update_tcb_mapping.is_some() { + eprintln!("--update-tcb-mapping requires --image or --from-report"); exit(1); - }); + } + + // Branch 1: --from-report mode. Build TDINFO from the saved report JSON + // directly. RTMR2 is taken verbatim from the report (it was extended at + // runtime by the live MigTD). --image / --manifest are rejected by clap, + // so we only need to honor the output flags. + let unmasked_td_info = if let Some(report_path) = &config.from_report { + if !config.policy_v2 { + eprintln!("--from-report requires --policy-v2"); + exit(1); + } + debug!("Loading TDINFO from report JSON: {}", report_path.display()); + build_td_info_from_report(report_path).unwrap_or_else(|e| { + eprintln!("Failed to build TD info from report: {:?}", e); + exit(1); + }) + } else { + // Branch 2: image+manifest mode (original behavior). What we measure + // is what the IGVM's CFV contains; the release pipeline uses + // `td-shim-enroll` (no Rust rebuild) to inject the production policy + // and issuer chain into the base IGVM before calling this tool. + let image_path = config.image.as_deref().unwrap_or_else(|| { + eprintln!("Either --image (with --manifest) or --from-report must be supplied"); + exit(1); + }); + let manifest_path = config.manifest.as_deref().unwrap_or_else(|| { + eprintln!("--image requires --manifest"); + exit(1); + }); + + debug!("Image: {}", image_path); + debug!("Manifest: {}", manifest_path); + let imagename = image_path.to_string(); + let mut igvmformat = false; + + debug!("Opening image file: {}", image_path); + let image = File::open(image_path).unwrap_or_else(|e| { + eprintln!("Failed to open MigTD image: {}", e); + exit(1); + }); + + debug!("Reading manifest file: {}", manifest_path); + let manifest = fs::read(manifest_path).unwrap_or_else(|e| { + eprintln!("Failed to open manifest file: {}", e); + exit(1); + }); - assert_eq!( - imagename.contains(".igvm") || imagename.contains(".bin"), - true - ); + assert_eq!( + imagename.contains(".igvm") || imagename.contains(".bin"), + true + ); - if imagename.contains(".igvm") { - igvmformat = true; - debug!("Detected IGVM format"); + if imagename.contains(".igvm") { + igvmformat = true; + debug!("Detected IGVM format"); + } else { + debug!("Detected BIN format"); + } + + debug!("Building TD info structure (unmasked)..."); + build_td_info_unmasked( + &manifest, + image, + config.test_disable_ra_and_accept_all, + config.policy_v2, + igvmformat, + ) + .unwrap_or_else(|e| { + eprintln!("Failed to build TD info: {:?}", e); + exit(1); + }) + }; + + // Compute the canonical v2 tdinfo_hash from the UNMASKED TDINFO. This is + // what gets written into the TCB mapping and equals `init_servtd_info_hash` + // for an attr=0 MigTD (tdinfo_hash = SHA384(TDINFO_STRUCT)). + let tdinfo_hash_v2 = if config.policy_v2 { + Some( + calculate_tdinfo_hash(clone_td_info(&unmasked_td_info)).unwrap_or_else(|e| { + eprintln!("Failed to calculate tdinfo_hash: {:?}", e); + exit(1); + }), + ) } else { - debug!("Detected BIN format"); + None + }; + + if let Some(ref hash) = tdinfo_hash_v2 { + debug!("tdinfo_hash (unmasked, attr=0): {}", bytes_to_hex(hash)); } - let servtd_attr = config.servtd_attr.unwrap_or(0); - debug!("ServTD attributes: {:#x}", servtd_attr); + if let Some(output_tdinfo_hash) = &config.output_tdinfo_hash { + let hash = tdinfo_hash_v2 + .as_ref() + .expect("--output-tdinfo-hash requires --policy-v2"); + debug!("Writing tdinfo_hash to: {:?}", output_tdinfo_hash); + fs::write(output_tdinfo_hash, bytes_to_hex(hash)).unwrap_or_else(|e| { + eprintln!("Failed to write tdinfo_hash file: {}", e); + exit(1); + }); + } - debug!("Building TD info structure..."); - let td_info = build_td_info( - &manifest, - image, - config.test_disable_ra_and_accept_all, - config.policy_v2, - servtd_attr, - igvmformat, - ) - .unwrap_or_else(|e| { - eprintln!("Failed to build TD info: {:?}", e); - exit(1); - }); + // Apply the (possibly masked) servtd_attr to produce the td_info used for + // the remaining outputs (`--output-file`, `--output-td-info`). + let mut td_info = clone_td_info(&unmasked_td_info); + apply_servtd_attr_masks(&mut td_info, servtd_attr); debug!("td_info: {:?}", td_info); - debug!( - "MRTD: {}", - td_info - .mrtd - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); - debug!( - "RTMR0: {}", - td_info - .rtmr0 - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); - debug!( - "RTMR1: {}", - td_info - .rtmr1 - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); - debug!( - "RTMR2: {}", - td_info - .rtmr2 - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); - debug!( - "RTMR3: {}", - td_info - .rtmr3 - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); + debug!("MRTD: {}", bytes_to_hex(&td_info.mrtd)); + debug!("RTMR0: {}", bytes_to_hex(&td_info.rtmr0)); + debug!("RTMR1: {}", bytes_to_hex(&td_info.rtmr1)); + debug!("RTMR2: {}", bytes_to_hex(&td_info.rtmr2)); + debug!("RTMR3: {}", bytes_to_hex(&td_info.rtmr3)); if let Some(output_td_info) = config.output_td_info { debug!("Writing TD Info to: {:?}", output_td_info); @@ -237,12 +382,29 @@ fn main() { debug!("Updating tcb_mapping file..."); if let Some(tcb_mapping_path) = &config.update_tcb_mapping { - if let Err(e) = update_tcb_mapping_file( - tcb_mapping_path, - &td_info.mrtd, - &td_info.rtmr0, - &td_info.rtmr1, - ) { + let output_path = config + .output_tcb_mapping + .as_deref() + .unwrap_or(tcb_mapping_path.as_path()); + let result = if config.policy_v2 { + let hash = tdinfo_hash_v2 + .as_ref() + .expect("v2 tcb-mapping update requires tdinfo_hash to be computed"); + let isvsvn = config.mapping_isvsvn.unwrap_or_else(|| { + eprintln!("--mapping-isvsvn is required with --policy-v2 --update-tcb-mapping"); + exit(1); + }); + update_tcb_mapping_file_v2(tcb_mapping_path, output_path, Some((hash, isvsvn))) + } else { + update_tcb_mapping_file_v1( + tcb_mapping_path, + output_path, + &td_info.mrtd, + &td_info.rtmr0, + &td_info.rtmr1, + ) + }; + if let Err(e) = result { eprintln!("Failed to update tcb_mapping file: {}", e); exit(1); } @@ -253,13 +415,7 @@ fn main() { eprintln!("Failed to calculate hash: {:?}", e); exit(1); }); - debug!( - "servtd_info_hash: {}", - servtd_info_hash - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); + debug!("servtd_info_hash: {}", bytes_to_hex(&servtd_info_hash)); debug!("Calculating servtd_hash..."); let servtd_hash = calculate_servtd_hash(&servtd_info_hash, SERVTD_TYPE_MIGTD, servtd_attr) @@ -267,13 +423,7 @@ fn main() { eprintln!("Failed to calculate hash: {:?}", e); exit(1); }); - debug!( - "servtd_hash: {}", - servtd_hash - .iter() - .map(|b| format!("{:02x}", b)) - .collect::<String>() - ); + debug!("servtd_hash: {}", bytes_to_hex(&servtd_hash)); let (hash, key) = if config.calc_servtd_hash { debug!("Using servtd_hash (final hash)"); @@ -287,7 +437,7 @@ fn main() { debug!("Writing hash to file: {:?}", output_file); if config.json { let json = json!({ - key: hash.iter().map(|b| format!("{:02x}", b)).collect::<String>(), + key: bytes_to_hex(&hash), }); fs::write(output_file, serde_json::to_string(&json).unwrap()).unwrap_or_else(|e| { eprintln!("Failed to write output file: {}", e); @@ -303,16 +453,11 @@ fn main() { debug!("Hash calculation complete"); if config.json { let json = json!({ - key: hash.iter().map(|b| format!("{:02x}", b)).collect::<String>(), + key: bytes_to_hex(&hash), }); println!("{}", serde_json::to_string_pretty(&json).unwrap()) } else { - println!( - "{}", - hash.iter() - .map(|byte| format!("{:02x}", byte)) - .collect::<String>() - ) + println!("{}", bytes_to_hex(&hash)) } } } diff --git a/tools/migtd-hash/src/migtd_consts.rs b/tools/migtd-hash/src/migtd_consts.rs new file mode 100644 index 000000000..f42f35805 --- /dev/null +++ b/tools/migtd-hash/src/migtd_consts.rs @@ -0,0 +1,69 @@ +// Copyright (c) 2025 Intel Corporation / Microsoft +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +//! Constants duplicated from the `migtd` crate so this offline tool does not +//! have to depend on `migtd`. Depending on `migtd` with `policy_v2` enabled +//! transitively activates `attestation/attest-lib-ext`, which builds the SGX +//! `servtd_attest` C library and produces an unresolved `__ImageBase` symbol +//! when linking a normal host binary. +//! +//! The values here MUST stay in sync with `src/migtd/src/config.rs` and +//! `src/migtd/src/event_log.rs`. A test below pins each constant to its +//! upstream byte pattern so any drift fails at `cargo test -p migtd-hash`. + +use r_efi::efi::Guid; +use td_layout::build_time::TD_SHIM_CONFIG_SIZE; + +/// Size (in bytes) of the Configuration Firmware Volume (CFV) section of the +/// MigTD IGVM/binary image. +pub const CONFIG_VOLUME_SIZE: usize = TD_SHIM_CONFIG_SIZE as usize; + +/// FFS GUID of the migration policy file embedded in CFV. +/// Mirrors `migtd::config::MIGTD_POLICY_FFS_GUID`. +pub const MIGTD_POLICY_FFS_GUID: Guid = Guid::from_fields( + 0x0BE92DC3, + 0x6221, + 0x4C98, + 0x87, + 0xC1, + &[0x8E, 0xEF, 0xFD, 0x70, 0xDE, 0x5A], +); + +/// FFS GUID of the root CA file embedded in CFV. +/// Mirrors `migtd::config::MIGTD_ROOT_CA_FFS_GUID`. +pub const MIGTD_ROOT_CA_FFS_GUID: Guid = Guid::from_fields( + 0xCA437832, + 0x4C51, + 0x4322, + 0xB1, + 0x3D, + &[0xA2, 0x1B, 0xD0, 0xC8, 0xFF, 0xF6], +); + +/// FFS GUID of the policy-issuer certificate chain file embedded in CFV. +/// Mirrors `migtd::config::MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID`. +pub const MIGTD_POLICY_ISSUER_CHAIN_FFS_GUID: Guid = Guid::from_fields( + 0x3F2FB27A, + 0x9596, + 0x431C, + 0xA6, + 0x8D, + &[0xD3, 0xEA, 0xB3, 0x9F, 0x8A, 0xEB], +); + +/// FFS GUID of the 48-byte RTMR1 signer anchor (CoRIM-only enrollment form). +/// Mirrors `migtd::config::MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID`. +pub const MIGTD_SERVTD_SIGNER_ANCHOR_FFS_GUID: Guid = Guid::from_fields( + 0x2B9D5A84, + 0x6F3C, + 0x4E71, + 0x8A, + 0x2D, + &[0x0C, 0x7E, 0x1F, 0x4B, 0x6A, 0x93], +); + +/// Marker event written into the event log when MigTD is built with the +/// `test_disable_ra_and_accept_all` feature. +/// Mirrors `migtd::event_log::TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT`. +pub const TEST_DISABLE_RA_AND_ACCEPT_ALL_EVENT: &[u8] = b"test_disable_ra_and_accept_all"; diff --git a/tools/migtd-policy-generator/readme.md b/tools/migtd-policy-generator/readme.md index a176a70ed..e10d41b2a 100644 --- a/tools/migtd-policy-generator/readme.md +++ b/tools/migtd-policy-generator/readme.md @@ -30,4 +30,9 @@ popd - Package a v2 policy data without signature: ``` ./target/debug/migtd-policy-generator v2 --policy-data /path/to/policy_data.json --collaterals config/collateral_pre_production_fmspc.json --servtd-collateral /path/to/servtd_collateral.json -o policy_data_full.json + ``` + +- Package CoRIM-only policy data with the authoritative signer CRL: + ``` + ./target/debug/migtd-policy-generator v2 --policy-data /path/to/policy_data.json --collaterals config/collateral_pre_production_fmspc.json --servtd-crl /path/to/servtd_crl.pem -o policy_data_full.json ``` \ No newline at end of file diff --git a/tools/migtd-policy-generator/src/main.rs b/tools/migtd-policy-generator/src/main.rs index eb2929c21..6b14540f6 100644 --- a/tools/migtd-policy-generator/src/main.rs +++ b/tools/migtd-policy-generator/src/main.rs @@ -47,6 +47,11 @@ struct V2Command { #[arg(long, value_name = "FILE")] servtd_collateral: Option<PathBuf>, + /// Locally-authoritative PEM CRL for servTD signer chains. This can be + /// supplied without --servtd-collateral for CoRIM-only policies. + #[arg(long, value_name = "FILE")] + servtd_crl: Option<PathBuf>, + /// Output file path #[arg(long, short, value_name = "FILE")] output: PathBuf, @@ -79,18 +84,19 @@ async fn main() { eprintln!("error: the required arguments were not provided: --collaterals <FILE>"); exit(1); }); - let servtd_collateral_path = cmd.servtd_collateral.as_ref().unwrap_or_else(|| { - eprintln!( - "error: the required arguments were not provided: --servtd-collateral <FILE>" - ); + // `--servtd-collateral` is optional: when omitted, a CoRIM-only + // policy (no `servtdCollateral`) is produced and the servtd + // endorsement is delivered as a separately-enrolled CoRIM. + let merged = build_v2_policy_data( + &cmd.policy_data, + collateral_path, + cmd.servtd_collateral.as_deref(), + cmd.servtd_crl.as_deref(), + ) + .unwrap_or_else(|e| { + eprintln!("Failed to generate v2 policy data: {}", e); exit(1); }); - let merged = - build_v2_policy_data(&cmd.policy_data, collateral_path, servtd_collateral_path) - .unwrap_or_else(|e| { - eprintln!("Failed to generate v2 policy data: {}", e); - exit(1); - }); if let Err(e) = fs::write(&cmd.output, merged) { eprintln!("Failed to write output file: {}", e); exit(1); diff --git a/tools/migtd-policy-generator/src/policy_v2.rs b/tools/migtd-policy-generator/src/policy_v2.rs index b91bf71a4..75610e192 100644 --- a/tools/migtd-policy-generator/src/policy_v2.rs +++ b/tools/migtd-policy-generator/src/policy_v2.rs @@ -9,11 +9,11 @@ use std::{fs, path::Path}; pub fn build_v2_policy_data( base_policy_data: &Path, collaterals: &Path, - servtd_collateral: &Path, + servtd_collateral: Option<&Path>, + servtd_crl: Option<&Path>, ) -> Result<Vec<u8>> { let policy_data_bytes = read_file(base_policy_data)?; let collateral_bytes = read_file(collaterals)?; - let servtd_collateral_bytes = read_file(servtd_collateral)?; let mut base: Value = serde_json::from_slice(&policy_data_bytes) .with_context(|| "Failed to parse base policy JSON")?; @@ -22,12 +22,23 @@ pub fn build_v2_policy_data( } let collaterals_val: Value = serde_json::from_slice(&collateral_bytes) .with_context(|| "Failed to parse collaterals JSON")?; - let servtd_val: Value = serde_json::from_slice(&servtd_collateral_bytes) - .with_context(|| "Failed to parse servtd_collaterals JSON")?; if let Some(map) = base.as_object_mut() { map.insert("collaterals".to_string(), collaterals_val); - map.insert("servtdCollateral".to_string(), servtd_val); + // Insert `servtdCollateral` only when provided. Omitting it yields a + // CoRIM-only policy; MigTD then resolves servtd lookups through the + // separately-enrolled CoRIM. + if let Some(servtd_path) = servtd_collateral { + let servtd_collateral_bytes = read_file(servtd_path)?; + let servtd_val: Value = serde_json::from_slice(&servtd_collateral_bytes) + .with_context(|| "Failed to parse servtd_collaterals JSON")?; + map.insert("servtdCollateral".to_string(), servtd_val); + } + if let Some(servtd_crl_path) = servtd_crl { + let servtd_crl = String::from_utf8(read_file(servtd_crl_path)?) + .with_context(|| "servtd CRL is not UTF-8 PEM")?; + map.insert("servtdCrl".to_string(), Value::String(servtd_crl)); + } } let out = serde_json::to_vec(&base)?; diff --git a/tools/servtd-collateral-generator/src/build.rs b/tools/servtd-collateral-generator/src/build.rs index cae439077..90f3fb1cf 100644 --- a/tools/servtd-collateral-generator/src/build.rs +++ b/tools/servtd-collateral-generator/src/build.rs @@ -12,37 +12,56 @@ use std::{fs, path::Path}; struct ServtdCollateral<'a> { major_version: u32, minor_version: u32, - servtd_identity: &'a RawValue, - servtd_identity_issuer_chain: String, servtd_tcb_mapping: &'a RawValue, servtd_tcb_mapping_issuer_chain: String, + #[serde(skip_serializing_if = "Option::is_none")] + servtd_identity: Option<&'a RawValue>, + #[serde(skip_serializing_if = "Option::is_none")] + servtd_identity_issuer_chain: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + servtd_crl: Option<String>, } pub fn build_servtd_collateral( - identity_path: &Path, - identity_chain_path: &Path, + identity_path: Option<&Path>, + identity_chain_path: Option<&Path>, mapping_path: &Path, mapping_chain_path: &Path, + servtd_crl_path: Option<&Path>, ) -> Result<Vec<u8>> { - let identity_bytes = read_file(identity_path)?; let mapping_bytes = read_file(mapping_path)?; - let identity_val: &RawValue = serde_json::from_slice(&identity_bytes) - .context("Failed to parse identity JSON (expected signed identity JSON)")?; let mapping_val: &RawValue = serde_json::from_slice(&mapping_bytes) .context("Failed to parse mapping JSON (expected signed mapping JSON)")?; - let identity_chain = String::from_utf8(read_file(identity_chain_path)?) - .context("Identity issuer chain not UTF-8")?; let mapping_chain = String::from_utf8(read_file(mapping_chain_path)?) .context("Mapping issuer chain not UTF-8")?; + // The TD Identity is optional; when present it must come with its chain + // (enforced at the CLI via clap `requires`). + let identity_bytes = identity_path.map(read_file).transpose()?; + let identity_val: Option<&RawValue> = identity_bytes + .as_deref() + .map(|b| { + serde_json::from_slice(b) + .context("Failed to parse identity JSON (expected signed identity JSON)") + }) + .transpose()?; + let identity_chain = identity_chain_path + .map(|path| String::from_utf8(read_file(path)?).context("Identity issuer chain not UTF-8")) + .transpose()?; + + let servtd_crl = servtd_crl_path + .map(|path| String::from_utf8(read_file(path)?).context("servtd CRL not UTF-8")) + .transpose()?; + let servtd_collateral = ServtdCollateral { major_version: 1, minor_version: 0, - servtd_identity: identity_val, - servtd_identity_issuer_chain: identity_chain, servtd_tcb_mapping: mapping_val, servtd_tcb_mapping_issuer_chain: mapping_chain, + servtd_identity: identity_val, + servtd_identity_issuer_chain: identity_chain, + servtd_crl, }; Ok(serde_json::to_vec(&servtd_collateral)?) diff --git a/tools/servtd-collateral-generator/src/main.rs b/tools/servtd-collateral-generator/src/main.rs index 29c86eac1..62a9563a4 100644 --- a/tools/servtd-collateral-generator/src/main.rs +++ b/tools/servtd-collateral-generator/src/main.rs @@ -17,18 +17,23 @@ use build::build_servtd_collateral; propagate_version = true )] struct Cli { - /// Signed ServTD identity JSON file (contains identity and signature) - #[arg(long, value_name = "FILE")] - identity: PathBuf, - /// PEM issuer chain for identity - #[arg(long, value_name = "FILE")] - identity_chain: PathBuf, + /// Optional signed ServTD identity JSON file (contains identity and + /// signature). The TD Identity is optional; omit it (together with + /// `--identity-chain`) to produce SVN-only collateral. + #[arg(long, value_name = "FILE", requires = "identity_chain")] + identity: Option<PathBuf>, + /// PEM issuer chain for identity (required iff `--identity` is given) + #[arg(long, value_name = "FILE", requires = "identity")] + identity_chain: Option<PathBuf>, /// Signed ServTD TCB mapping JSON file (contains tcb mapping and signature) #[arg(long, value_name = "FILE")] mapping: PathBuf, /// PEM issuer chain for mapping #[arg(long, value_name = "FILE")] mapping_chain: PathBuf, + /// Optional PEM CRL for the servTD signer chain (embedded as `servtdCrl`) + #[arg(long, value_name = "FILE")] + servtd_crl: Option<PathBuf>, /// Where to write the generated file #[arg(long, short, value_name = "FILE")] output: PathBuf, @@ -38,10 +43,11 @@ fn main() { let cli = Cli::parse(); let bytes = build_servtd_collateral( - &cli.identity, - &cli.identity_chain, + cli.identity.as_deref(), + cli.identity_chain.as_deref(), &cli.mapping, &cli.mapping_chain, + cli.servtd_crl.as_deref(), ) .unwrap_or_else(|e| { eprintln!("Failed to build ServTD collateral: {}", e); diff --git a/xtask/src/build.rs b/xtask/src/build.rs index 9b9e50adf..7abda146f 100644 --- a/xtask/src/build.rs +++ b/xtask/src/build.rs @@ -86,7 +86,8 @@ pub(crate) struct BuildArgs { /// Use migration policy v2 #[clap(long)] policy_v2: bool, - /// Issuer chain of migration policy v2, required if `policy_v2` is set + /// Issuer chain of migration policy v2. Provide this OR `--signer-anchor` + /// (at least one is required when `policy_v2` is set). #[clap(long)] policy_issuer_chain: Option<PathBuf>, /// Security Version Number recorded in the MigTD TD_INFO structure @@ -95,6 +96,19 @@ pub(crate) struct BuildArgs { /// Omit TD_INFO for compatibility with VMMs that do not support TDVF Type 7 #[clap(long)] no_tdinfo: bool, + /// Path of the 48-byte RTMR1 signer anchor to enroll (CoRIM-only form), + /// as an alternative to `--policy-issuer-chain`. The full PEM chain is not + /// carried in the image; the anchor is measured into RTMR1 identically. + /// Requires `policy_v2`. + #[clap(long)] + signer_anchor: Option<PathBuf>, + /// Path of the signed ServTD TCB-mapping CoRIM (`COSE_Sign1`, `.cose`). + /// When provided, it is enrolled into the CFV and the `servtd_corim` + /// feature is activated so the runtime resolves `hash -> SVN` through the + /// CoRIM. Requires `policy_v2`. The CoRIM is not measured, so enrolling it + /// does not change the image `tdinfo_hash`. + #[clap(long)] + servtd_corim: Option<PathBuf>, } #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] @@ -213,11 +227,13 @@ impl BuildArgs { "policy_v2 is enabled but no policy file is provided" )); } - if self.policy_issuer_chain.is_none() { + if self.policy_issuer_chain.is_none() && self.signer_anchor.is_none() { return Err(anyhow::anyhow!( - "policy_v2 is enabled but no policy_issuer_chain file is provided" + "policy_v2 is enabled but neither --policy-issuer-chain nor --signer-anchor was provided" )); } + } else if self.servtd_corim.is_some() { + return Err(anyhow::anyhow!("--servtd-corim requires --policy-v2")); } Ok(()) } @@ -371,10 +387,21 @@ impl BuildArgs { ]); let cmd = if self.policy_v2 { - cmd.args(&[ - "3F2FB27A-9596-431C-A68D-D3EAB39F8AEB", - self.policy_issuer_chain()?.to_str().unwrap(), - ]) + // Enroll the RTMR1 signer anchor: prefer the 48-byte anchor slot + // (CoRIM-only form) when `--signer-anchor` is given, else the + // legacy policy issuer chain PEM. + if let Some(anchor) = &self.signer_anchor { + let anchor = fs::canonicalize(anchor)?; + cmd.args(&[ + "2B9D5A84-6F3C-4E71-8A2D-0C7E1F4B6A93", + anchor.to_str().unwrap(), + ]) + } else { + cmd.args(&[ + "3F2FB27A-9596-431C-A68D-D3EAB39F8AEB", + self.policy_issuer_chain()?.to_str().unwrap(), + ]) + } } else { cmd.args(&[ "CA437832-4C51-4322-B13D-A21BD0C8FFF6", @@ -382,6 +409,19 @@ impl BuildArgs { ]) }; + // Enroll the signed ServTD TCB-mapping CoRIM under its own FFS GUID. + // This file is not measured (see config::MIGTD_SERVTD_CORIM_FFS_GUID), + // so it does not affect the image tdinfo_hash. + let corim_path = self.servtd_corim()?; + let cmd = if let Some(corim) = &corim_path { + cmd.args(&[ + "7E5B9C11-2D4A-4F6E-9B3C-1A2B3C4D5E6F", + corim.to_str().unwrap(), + ]) + } else { + cmd + }; + cmd.args(&["-o", bin.to_str().unwrap()]).run()?; Ok(()) @@ -456,6 +496,10 @@ impl BuildArgs { features.push_str(",policy_v2"); } + if self.servtd_corim.is_some() { + features.push_str(",servtd_corim"); + } + if let Some(selected) = &self.features { features.push_str(","); features.push_str(selected); @@ -592,6 +636,14 @@ impl BuildArgs { fs::canonicalize(path).map_err(|e| e.into()) } + /// Canonicalized path of the signed ServTD TCB-mapping CoRIM, if provided. + fn servtd_corim(&self) -> Result<Option<PathBuf>> { + match self.servtd_corim.as_ref() { + Some(path) => Ok(Some(fs::canonicalize(path)?)), + None => Ok(None), + } + } + fn root_ca(&self) -> Result<PathBuf> { let path = self.root_ca.as_ref().unwrap_or(&DEFAULT_CA); fs::canonicalize(path).map_err(|e| e.into()) diff --git a/xtask/src/library.rs b/xtask/src/library.rs index 8c1c38fec..14eefc6d1 100644 --- a/xtask/src/library.rs +++ b/xtask/src/library.rs @@ -50,16 +50,22 @@ impl LibraryCrates { // vmcall-raw variant of MigtdMigrationInformation are exercised. // Restricted to --lib because the bin target's `main` symbol // conflicts under `cfg(test) + main + !AzCVMEmu`. - cmd!(sh, "cargo test") - .args([ - "--lib", - "-p", - name.as_str(), - "--no-default-features", - "--features", - "main,policy_v2,vmcall-raw", - ]) - .run()?; + for features in [ + "main,policy_v2,vmcall-raw", + "main,vmcall-raw,spdm_attestation", + "main,policy_v2,vmcall-raw,spdm_attestation", + ] { + cmd!(sh, "cargo test") + .args([ + "--lib", + "-p", + name.as_str(), + "--no-default-features", + "--features", + features, + ]) + .run()?; + } } else if name.as_str() == "policy" { // Run tests for policy V1 and V2 cmd!(sh, "cargo test").args(["-p", name.as_str()]).run()?;