Skip to main content
Before trusting any parsed transaction data, your wallet must verify the attestation to confirm it came from a genuine enclave running the expected code. For background on why verification matters and how the security model works, see Security Model.

Prerequisites

Verification levels

Choose the level of verification appropriate for your security requirements:

Level 1: Signature verification

Verify the parser’s P256 signature on the response.

Level 2: Boot attestation

Verify the enclave boot measurements (PCRs) to confirm the expected code is running.

Level 3: Manifest verification

Verify the exact application binary for complete supply chain verification.

Step-by-step implementation

Step 1: Extract attestation

The parser includes attestation in its responses:

Step 2: Decode CBOR

AWS attestation documents use CBOR encoding:

Step 3: Verify certificate chain

The attestation includes an X.509 certificate chain signed by AWS:

Step 4: Verify PCR values

Check Platform Configuration Registers against your allowlist:
Maintain an allowlist of valid PCR values:

Step 5: Extract public key

Only extract the public key after successful attestation verification:

Complete example

PCR management

Updating your allowlist

When the deployed qos enclave runtime is updated, PCR values change. Follow this process:
  1. Watch for deployment announcements that change the qos runtime rev (the rev whose EIF boots in the enclave, not the qos library rev parser_app links against — see Generating PCRs from source for the distinction).
  2. Reproduce the new PCR values: run scripts/extract-nitro-pcrs.sh with the updated deployment rev and confirm the script’s output matches the values published with the release.
  3. Add new PCRs to your allowlist.
  4. Deploy to production.
  5. Remove old PCRs after migration completes.

Supporting multiple versions

During migrations, support multiple PCR sets:

Monitoring

Track verification metrics in production:
Log verification attempts for auditing:

Troubleshooting

PCR mismatch

  • Parser was updated and your allowlist needs updating
  • You’re connecting to a different environment (staging vs production)
  • Check the parser releases for current PCR values

Certificate chain invalid

  • Check for clock skew on your system
  • Verify certificates haven’t expired
  • Ensure network connectivity for CRL checks

Signature verification failed

  • Confirm the message being verified matches what was signed
  • Check you’re using the correct public key from the attestation
  • Verify the signature format (ASN.1 DER encoding)

Debug commands

Check current PCR values on the enclave:
Verify an attestation document directly:

Next steps

Resources