Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
The standard IEC 11889-2-16 (formally adopted in Canada as CAN/CSA-ISO/IEC 11889-2-16) constitutes Part 2 of the multipart Trusted Platform Module (TPM) library specification. This document is technically equivalent to ISO/IEC 11889-2:2016 and defines all data structures, constants, unions, and enumerations used throughout the TPM 2.0 ecosystem. It provides the foundational type system that enables interoperability between TPM firmware, kernel drivers, and application software across different vendors and platforms.
The standard is essential for anyone developing TPM 2.0-compliant software stacks, embedded firmware, or security applications that interact with a discrete TPM, firmware TPM (fTPM), or virtual TPM. By specifying structures such as handles, key blobs, authorization packets, and command buffers, IEC 11889-2-16 ensures a common language for all TPM communications.
The standard defines over 300 distinct types, including structures (TPMS_*), unions (TPMU_*), and sized buffers (TPM2B_*). Each structure is explicitly tagged with a TPM_ST_* identifier to allow runtime type checking. The structures are grouped into categories:
| Structure Category | Example Types | Function |
|---|---|---|
| Handle & Resource Types | TPM_HANDLE, TPM_RH_OWNER | Identify persistent objects, sessions, and hierarchy roots |
| Key & Data Blobs | TPM2B_PUBLIC, TPM2B_PRIVATE | Represent public/private key pairs, seeds, and sensitive data |
| Algorithm Identifiers | TPM_ALG_ID, TPM_ECC_CURVE | Designate cryptographic algorithms, hash functions, and elliptic curves |
| Authorization | TPMS_AUTH_COMMAND, TPMS_AUTH_RESPONSE | Carry session handles, nonces, and HMACs for proof of authorization |
| Capability Reporting | TPMS_CAPABILITY_DATA | Return TPM properties, algorithm sets, and command attributes |
| Command Header | TPM2_CMD_HEADER | Wrap each command with tag, size, and code |
TPM2B_* structures with explicit size fields to prevent buffer overflows. Always assume little-endian byte order for all multi-byte integers, and rely on the provided TPM2B_MAX_BUFFER constants for static allocation. All exchanges with a TPM are serialized into a byte stream. IEC 11889-2-16 specifies the exact marshaling order for every structure: fields appear in a fixed sequence, and variable-length buffers are preceded by their size in bytes (inclusive). The standard defines the concept of “packed” alignment—no padding bytes are permitted between fields—ensuring deterministic binary layouts. This is critical for the TPM to parse commands correctly without ambiguity.
TPMT_SYM_DEF_OBJECT). Implementers must include the union selector (tag) and then only the fields corresponding to that tag. Misordering or including extra fields will cause desynchronization errors. IEC 11889-2-16 follows a systematic naming scheme:
TPM_ prefix for constant and alias definitions.TPMS_ for structures, TPMU_ for unions, TPMI_ for interface (abstraction) types.TPM2B_ for sized buffers where the size is stored in a leading UINT16.TPMT_ for tagged types that embed a type selector.These conventions help developers quickly identify the semantics of any identifier and reduce the learning curve across the TPM library.
The standard mandates little-endian byte ordering for all integer types (including handles, command codes, and sizes). This is aligned with common x86 architectures but requires conversion on big-endian systems. Additionally, all structures are packed with no implicit padding. Implementation code should use compiler-specific packing instructions (e.g., __attribute__((packed)) in GCC) or explicit byte-by-byte assembly to guarantee alignment.
To claim compliance with IEC 11889-2-16 (or its Canadian adoption CAN/CSA-ISO/IEC 11889-2-16), an implementation must pass the following checks:
TPM2B structures must never exceed the declared maximum.Products that successfully implement IEC 11889-2-16 are eligible for TPM 2.0 certification through the Trusted Computing Group (TCG) program. This certification ensures that the TPM stack interoperates with other compliant hardware and software.
Published in 2026