TPM 2.0 Library Specification: The Parts
The TPM 2.0 library specification is the most important and base-level specification for TPM 2.0. This specification describes the core TPM 2.0 functionality that is common to all TPM 2.0 implementations.
The library specification consists of four parts:
• Part 1, Architecture: This lives up to its name and is the most important part to read in detail. In text form, it describes the TPM operation and much of the rationale behind the design.
It also contains many of the practical details of how the TPM operates. For instance, this is the only place that describes how to create sessions, which are used to authorize, audit, and encrypt commands. As such, it describes all variations of session types in great detail.
• Part 2, Structures: This presents the data types, structures, and unions that are used by TPM 2.0, and is analogous to a description of data types in a programming guide. Included in the definitions are the error codes returned when commands fail.
• Part 3, Commands: This presents the TPM 2.0 commands, which are analogous to function descriptions in a programming guide. It describes the input and output parameters for each of the TPM 2.0 commands and the command-specific error conditions.
The actions performed by the command are precisely described by the included C code. This code calls many supporting routines that aren't in Part 3; these routines and their error codes are described in Part 4.
• Part 4, Supporting Routines: This section contains the code for the supporting routines called by the code in Part 3 as well as the error codes output by that code. This code explains the guts of the
TPM 2.0 operation in excruciating detail. When stepping through the simulator code to understand why a particular error is occurring, you will spend a lot of time here. So, one way or another, you're going to become familiar with significant parts of this code.
Before we get started, some definitions are in order so that you can better understand the specification. This is a good section to bookmark, because you'll refer to these definitions frequently as you read the specification and the rest of this book. Don't get discouraged
if you're unable to completely comprehend these definitions at first; aim for a high-level understanding for the first reading, and then bookmark this section for future referral.