TEE attestation library for AMD SEV-SNP and Intel TDX platforms
Project description
FHEnom TEE Attestation Library
A Python library for generating and verifying TEE (Trusted Execution Environment) attestation reports across different hardware platforms.
Features
- Multi-Platform Support: Intel TDX and AMD SEV-SNP
- Unified API: Single interface for all TEE platforms
- Cryptographic Verification: Full certificate chain validation
- Automatic Dependency Management: System build dependencies are installed automatically when building from source
- Production Ready: Used in FHEnom AI confidential computing platform
Supported Platforms
- Intel TDX (Trust Domain Extensions)
- AMD SEV-SNP (Secure Encrypted Virtualization - Secure Nested Paging)
Installation
pip install dk-tee-attestation
A virtual environment is recommended because Ubuntu 23.04+ and other modern distributions block system-wide pip installs (PEP 668).
On Linux pre-built wheel is available but if you need to rebuild for your Python version, the custom build backend automatically handles it and installs:
- Build tools:
build-essential,python3-dev,pkg-config - Intel TDX libraries:
libtdx-attest,libtdx-attest-dev(via Intel SGX APT repository) - Rust toolchain (via maturin's automatic download)
On Windows pre-built wheel is available, but if building from source, Visual Studio Build Tools and Rust are required.
Docker
ENV PIP_BREAK_SYSTEM_PACKAGES=1
RUN pip3 install dk-tee-attestation
In Docker containers there is no risk of breaking system packages, so PIP_BREAK_SYSTEM_PACKAGES=1 is safe and avoids the need for a virtual environment.
What works where
| Capability | Linux | Windows |
|---|---|---|
| AMD SEV-SNP report generation | Yes (requires /dev/sev-guest) |
No |
| AMD SEV-SNP report verification | Yes | Yes |
| Intel TDX quote generation | Yes (requires /dev/tdx_guest + libtdx_attest.so) |
No |
| Intel TDX quote verification | Yes | Yes |
Report generation requires running inside the corresponding TEE hardware. Verification is pure Python and works on any machine with network access.
Quick Start
Generate an Attestation Report (Inside TEE)
from dk_tee_attestation import AttestationEngineFactory, TeeNotDetectedError
# Auto-detect the TEE platform (recommended)
try:
engine = AttestationEngineFactory.get()
except TeeNotDetectedError:
raise RuntimeError("No supported TEE platform detected on this machine.")
# Generate report with nonce (must be 64 bytes)
nonce = b"your_nonce_here" + b"\x00" * (64 - len(b"your_nonce_here"))
report_bytes = engine.get_report(nonce)
# Save for verification
with open("attestation_report.bin", "wb") as f:
f.write(report_bytes)
To explicitly select a platform instead of auto-detecting:
from dk_tee_attestation import AttestationEngineFactory, AttestationEngineType
engine = AttestationEngineFactory.get(AttestationEngineType.INTEL_TDX)
# or
engine = AttestationEngineFactory.get(AttestationEngineType.AMD_SEV_SNP)
Verify an Attestation Report (Verifier Side)
from dk_tee_attestation import AttestationEngineFactory, AttestationEngineType
# Create engine for the platform that generated the report
engine = AttestationEngineFactory.get(AttestationEngineType.INTEL_TDX)
# Load report
with open("attestation_report.bin", "rb") as f:
report_bytes = f.read()
# Verify (raises exception on failure)
nonce = b"your_nonce_here" + b"\x00" * (64 - len(b"your_nonce_here"))
try:
engine.verify_report(report_bytes, nonce)
print("Attestation verified successfully!")
except Exception as e:
print(f"Verification failed: {e}")
API Reference
AttestationEngineFactory
Factory for instantiating attestation engine implementations.
AttestationEngineFactory.get(engine_type=None) -> AttestationEngine
Instantiate and return an attestation engine.
Parameters
engine_type(AttestationEngineType, optional): Platform selector. If omitted, the TEE platform is auto-detected by probing available firmware interfaces.
Returns
- An
AttestationEngineinstance for the detected or requested platform.
Raises
TeeNotDetectedError: If auto-detection is used and no supported TEE platform is found.UnsupportedEngine: If an explicitengine_typeis provided but not registered.
AttestationEngine
Base interface for TEE attestation engines.
get_type() -> str
Return the engine type identifier for this engine instance.
Returns
str: TheAttestationEngineTypevalue (e.g."intel_tdx"or"amd_sev_snp").
Example
engine = AttestationEngineFactory.get()
print(engine.get_type()) # "intel_tdx" or "amd_sev_snp"
get_report(report_data: bytes) -> bytes
Generate a TEE attestation report.
Parameters
report_data(bytes): Nonce / challenge. Must be exactly 64 bytes.
Returns
bytes: Raw attestation report.
Raises
AttestationError: If report generation fails.TeeNotDetectedError: IfAttestationEngineFactory.get()is called with no argument and no supported TEE platform is found.
verify_report(report_bytes: bytes, expected_report_data: bytes) -> None
Verify a TEE attestation report.
Parameters
report_bytes(bytes): Raw attestation report to verify.expected_report_data(bytes): Expected nonce. Must be exactly 64 bytes.
Returns
None: Verification succeeded.
Raises
AttestationError: If verification fails.
Exception Hierarchy
All exceptions inherit from AttestationError, so you can catch it broadly or handle specific cases:
from dk_tee_attestation import AttestationError
try:
engine.verify_report(report_bytes, nonce)
except AttestationError as e:
print(f"Verification failed: {e}")
Key exception types:
TeeNotDetectedError: No supported TEE platform found during auto-detectionUnsupportedEngine: Explicit engine type is not registeredReportDataError: Nonce mismatch or invalid report dataSignatureError: Report signature verification failedCertChainError: Certificate chain validation failedKdsFetchError: Failed to fetch certificates from AMD KDS or Intel PCSMetadataMismatchError: TCB or hardware ID mismatchFirmwareOpenErrorAmdSevSnp: Cannot open/dev/sev-guestFirmwareOpenErrorIntelTdx: Cannot open/dev/tdx_guestorlibtdx_attest.sounavailable
Verification Process
Intel TDX Verification Steps
- Parse Quote: Extract structured data from TDX Quote v4 bytes
- Validate Nonce: Ensure report_data matches expected value
- Verify PCK Chain: Validate the embedded PCK certificate chain up to Intel Root CA
- Fetch TCB Info: Retrieve and verify TCB Info from Intel PCS
- Check TCB Status: Ensure platform TCB is not revoked or out of date
- Fetch QE Identity: Retrieve and verify QE Identity from Intel PCS
- Verify QE Report: Validate PCK signature over the Quoting Enclave report
- Verify Quote Signature: Validate attestation key signature over the TD Report Body
AMD SEV-SNP Verification Steps
- Parse Report: Extract structured data from raw bytes
- Validate Nonce: Ensure nonce matches expected value
- Fetch Certificates: Retrieve ARK, ASK, and VCEK from AMD KDS
- Verify Chain: Validate certificate chain signatures
- Check Metadata: Ensure TCB and hardware ID match
- Verify Signature: Validate report signature with VCEK
Platform-Specific Notes
Intel TDX
- Requires access to
/dev/tdx_guestdevice andlibtdx_attest.sofor quote generation - Fetches TCB Info and QE Identity from Intel Provisioning Certification Service (PCS)
- Verification is pure Python and works on any machine with network access
AMD SEV-SNP
- Requires access to
/dev/sev-guestdevice for report generation - Fetches certificates from AMD Key Distribution Service (KDS)
- Supports Milan, Genoa, and Turin processor families
Integration with FHEnom AI
This library is integrated into the FHEnom AI SDK:
# Install FHEnom AI with attestation support
pip install fhenomai
# Use via FHEnom AI client
from fhenomai import FHEnomClient
client = FHEnomClient.from_config()
result = client.admin.verify_attestation(report_bytes, nonce_hex, engine_type)
Requirements
- Python >= 3.8
- cryptography >= 46.0.0
- requests >= 2.32.0
Use Cases
- Remote Attestation: Prove code runs in genuine TEE
- Zero-Trust Security: Establish trust before sensitive operations
- Compliance: Demonstrate hardware-backed security
- Confidential Computing: Verify encrypted model execution
License
TBD
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dk_tee_attestation-0.6.1.tar.gz.
File metadata
- Download URL: dk_tee_attestation-0.6.1.tar.gz
- Upload date:
- Size: 33.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
353a691899ff3e2c8db24a806fb8cb2f28d765d2a2577b53c72aa0039aa5369d
|
|
| MD5 |
722ff68cdfd1d5a4aa4bb8247b1f78d9
|
|
| BLAKE2b-256 |
67c58efd44bab8f36716db8e4260cfe386c0fd4644f502cd92ef0665fcf3f668
|
File details
Details for the file dk_tee_attestation-0.6.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: dk_tee_attestation-0.6.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 137.5 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e1a3315aa7cb0e7047657ecc366e71b326e397d29f5a953cfd2b7149b019e7a
|
|
| MD5 |
9cffa939d227e92f80c5cf59898cdf7a
|
|
| BLAKE2b-256 |
b020014b4902eeea20e084ad5ef07ddb294ca14b3bece1183f54c4464af04f4e
|
File details
Details for the file dk_tee_attestation-0.6.1-cp312-cp312-manylinux_2_38_x86_64.whl.
File metadata
- Download URL: dk_tee_attestation-0.6.1-cp312-cp312-manylinux_2_38_x86_64.whl
- Upload date:
- Size: 244.3 kB
- Tags: CPython 3.12, manylinux: glibc 2.38+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
126c25dd0c07433111a5f9c7cf1cbfa1337a0c1459e065133b5727cb38bc10ae
|
|
| MD5 |
cad991618c1bbb62f17f62aa9f066278
|
|
| BLAKE2b-256 |
6f25d6d75794f19f79968e3177c0d4bdc828200975015dcbc2d7f3ade806c33b
|