tee_verifier_enabled = true on a production chain.
Critical rule
Never enable T3 settlement for a vendor until that vendor’s full material bundle is complete, validated bysigil-tee-material … validate, and pinned in genesis via the bundle’s policyPatch.compute_params.<vendor>_trust_anchors. The verifier accepts only operator-supplied production material; synthetic test fixtures live behind #[cfg(test)] and are unreachable from release builds.
Operator tooling
node/sigil-tee-material ships a CLI that automates collection, validation, and genesis emission per vendor:
| Vendor | fetch | validate | emit-genesis |
|---|---|---|---|
| AMD SEV-SNP | amd-sev-snp fetch --product Milan|Genoa --out chain.pem | amd-sev-snp validate --ark-chain chain.pem | amd-sev-snp emit-genesis --ark-chain chain.pem --measurement m.hex --out genesis.tee.patch.json |
| Intel SGX DCAP | intel-sgx fetch --fmspc <12-hex> --out-dir ./sgx-material | intel-sgx validate --pck-chain ... --tcb-signing-cert ... --tcb-info ... --qe-identity ... --pck-crl ... | intel-sgx emit-genesis ... --mrenclave m.hex --mrsigner s.hex --out genesis.tee.patch.json |
| Intel TDX | intel-tdx fetch --fmspc <12-hex> --out-dir ./tdx-material | intel-tdx validate ... | intel-tdx emit-genesis ... --mrtd m.hex --mrsigner-seam s.hex --out genesis.tee.patch.json |
| Arm CCA | operator-supplied | arm-cca validate --iak iak.sec1 | arm-cca emit-genesis --iak iak.sec1 --rim r.hex --out genesis.tee.patch.json |
Bundle output format
Everyemit-genesis writes a normalised JSON envelope:
policyPatch.compute_params into their genesis JSON. The materials block is preserved for audit (who fetched, when, what bytes).
Failure modes
Allvalidate and emit-genesis paths fail closed and write nothing when:
fetchreceives a non-200 status or unreachable host.validatefinds a cert chain without a self-signed root.validatefinds a TCB Info or QE Identity JSON missing required envelope fields.validatefinds a CRL DER that does not parse.emit-genesisis given a measurement file with the wrong byte length (32 / 48 / 64 depending on vendor).emit-genesisfor Arm CCA is given a sample realm-token that does not verify against the supplied IAK public keys.- Intel TDX
validateoremit-genesisfinds a QE Identity withid != "TD_QE".
Mainnet readiness checklist
Before flippingtee_verifier_enabled = true:
- Genesis carries the full bundle for every vendor the chain accepts. Partial bundles are rejected as
FixtureMaterialRequired. - At least one real attestation fixture for each enabled vendor has been validated end-to-end against the operator’s pinned material.
- Compute-receipt verification has been exercised with
cargo test -p sigil-compute --features tee-verify. - Slashing has been exercised with a deliberately-invalid attestation and verified to record the slashing event.
- Vendor cert chains are monitored for expiry; an alert fires 14 days before any anchor expires.
Per-vendor material requirements
The detailed requirements per vendor are extensive. Refer to the source spec in the Sigil repository for the full byte-length, schema, and chain-of-trust requirements:- AMD SEV-SNP:
node/sigil-tee-material/src/vendors/amd_sev_snp.rs - Intel SGX DCAP:
node/sigil-tee-material/src/vendors/intel_sgx.rs - Intel TDX:
node/sigil-tee-material/src/vendors/intel_tdx.rs - Arm CCA:
node/sigil-tee-material/src/vendors/arm_cca.rs
Genesis policy patch
Once all vendors have been validated and bundles emitted, merge thepolicyPatch.compute_params blocks into the chain’s genesis:
See also
- Compute marketplace — receipt verification tiers.
- Security overview.