curl --request POST \
--url https://api.example.com/tdx_quote{
"success": true,
"quote": {},
"tcb_info": {},
"timestamp": "<string>",
"quote_type": "<string>",
"error": "<string>"
}curl --request POST \
--url https://api.example.com/tdx_quote{
"success": true,
"quote": {},
"tcb_info": {},
"timestamp": "<string>",
"quote_type": "<string>",
"error": "<string>"
}Documentation Index
Fetch the complete documentation index at: https://mintlify.com/concrete-security/umbra/llms.txt
Use this file to discover all available pages before exploring further.
POST /tdx_quote
X-TLS-EKM-Channel-Binding header with HMAC-signed EKM value.{ekm_hex}:{hmac_hex} where:
ekm_hex: 64-character hex string (32 bytes) of the TLS Exported Keying Materialhmac_hex: 64-character HMAC-SHA256 signature of the EKM valueHMAC-SHA256(ekm_hex, EKM_SHARED_SECRET)
{
"nonce_hex": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"
}
nonce_hex (must be exactly 64 hex characters)report_data field in the TDX quote is computed as:
report_data = SHA512(nonce_hex + ekm_hex)
curl -X POST https://your-attestation-service.com/tdx_quote \
-H "Content-Type: application/json" \
-H "X-TLS-EKM-Channel-Binding: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456:8f3a2b1c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcd" \
-d '{
"nonce_hex": "deadbeef0123456789abcdef0123456789abcdef0123456789abcdef01234567"
}'
{
"success": true,
"quote": {
// GetQuoteResponse object from dstack_sdk
// Contains raw TDX quote bytes and metadata
},
"tcb_info": {
// TcbInfoV05x object with TCB level information
// Used for verifying the quote
},
"timestamp": "1709654400",
"quote_type": "tdx"
}
EKM_SHARED_SECRET to prevent header forgery.EKM_SHARED_SECRET environment variable. The secret must be at least 32 characters long.cvm/attestation-service/attestation_service.py:182-263