Skip to content

vaportpm: no_std attestation surface; verify auto-detects captured input#9

Merged
HarryR merged 1 commit into
mainfrom
no-std-attestation
Jul 11, 2026
Merged

vaportpm: no_std attestation surface; verify auto-detects captured input#9
HarryR merged 1 commit into
mainfrom
no-std-attestation

Conversation

@HarryR

@HarryR HarryR commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

What

Makes the vaportpm attestation surface no_std-capable so a single payload can attest on every cloud, including from inside a UEFI bootloader (stage0's chain-loaded payload), and makes vaportpm-verify ingest a raw cloud console capture directly.

vaportpm-attest

  • attest_with(tpm, nonce, fetcher) is the no_std core; the HTTP certificate fetcher is decoupled behind an injected CertFetcher trait. The std attest() (opens /dev/tpm0 + StdHttpFetcher) stays behind the http-fetch feature.
  • cert / a9n / nsm / roots lifted to no_std (alloc, BTreeMap, core::str). The AWS Nitro NSM document is reached via a TPM vendor command, so it stays in the no_std attest surface rather than being gated behind std.
  • Features: attest (no_std surface), http-fetch (std fetcher, default on), std.
  • Workspace deps set default-features = false at the workspace level; -attest / -verify opt back into std where each needs it.

vaportpm-verify

  • normalize_attestation_input auto-detects the captured form — bare JSON, a base64 blob, or either wrapped in ===ATTESTATION=== markers with EC2/Nitro serial-console timestamps interleaved — so a raw console log verifies with no preprocessing. New InputDecode error for malformed input.

Validation

  • 138 workspace tests pass; clippy -D warnings clean.
  • vaportpm-attest builds for x86_64-unknown-uefi with --no-default-features --features attest.
  • End-to-end on real EC2 Nitro hardware: a stage0 UEFI payload built against this attest_with produced an attestation that vaportpm-verify confirmed (provider Aws, TPM quote + NSM chain to the AWS root).

🤖 Generated with Claude Code

…ured input

Make the attestation surface (quote + cert chain + unified JSON) no_std-capable so
one payload can attest on every cloud, including from inside a UEFI bootloader.

vaportpm-attest:
- attest_with(tpm, nonce, fetcher) is the no_std core; the HTTP certificate fetcher
  is decoupled behind an injected CertFetcher trait. The std attest() (opens /dev/tpm0
  + StdHttpFetcher) stays behind the http-fetch feature.
- cert/a9n/nsm/roots lifted to no_std (alloc, BTreeMap, core::str). The AWS Nitro NSM
  document is a TPM vendor command, so it stays in the no_std `attest` surface, not std.
- Features: attest (no_std surface), http-fetch (std fetcher, default), std.
- Workspace deps set default-features = false at the workspace level; -attest and
  -verify opt back into std where each needs it.

vaportpm-verify:
- normalize_attestation_input auto-detects the captured form -- bare JSON, a base64
  blob, or either wrapped in ===ATTESTATION=== markers with EC2/Nitro serial-console
  timestamps interleaved -- so a raw console capture verifies directly. New InputDecode
  error for malformed input.

138 workspace tests pass; clippy -D warnings clean; vaportpm-attest builds for
x86_64-unknown-uefi with --no-default-features --features attest.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@HarryR
HarryR force-pushed the no-std-attestation branch from 7681d53 to 930f452 Compare June 26, 2026 16:00
@HarryR
HarryR merged commit 03e109a into main Jul 11, 2026
1 of 2 checks passed
@HarryR
HarryR deleted the no-std-attestation branch July 11, 2026 18:22
HarryR added a commit that referenced this pull request Jul 11, 2026
First git-tagged release baseline. 0.1.0 and 0.2.0 were never tagged, and 0.2.0 existed in two distinct untagged states (post-#9 on main, and this PR), so a clean 0.3.0 anchors the accumulated feature (no_std attestation surface) and internal (session split, lockboot:build harness, x509-cert test certs) changes to a single verifiable point. High-assurance consumers should pin as { git = "...", rev = "<sha>", version = "=0.3.0" }.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
HarryR added a commit that referenced this pull request Jul 11, 2026
First git-tagged release baseline. 0.1.0 and 0.2.0 were never tagged, and 0.2.0 existed in two distinct untagged states (post-#9 on main, and this PR), so a clean 0.3.0 anchors the accumulated feature (no_std attestation surface) and internal (session split, lockboot:build harness, x509-cert test certs) changes to a single verifiable point. High-assurance consumers should pin as { git = "...", rev = "<sha>", version = "=0.3.0" }.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant