blob: d39de789b42ad4250e66431590d33a023a54fb07 [file] [log] [blame]
======
TRUNKS
======
The Trunks TPM Library (TTL) is a set of types and functions used to interface
with a Trusted Platform Module. It is designed to be small, and does not
comply with the TSS specification. It is usable in firmware as well as in
user-level code.
-----------------
CODE ORGANIZATION
-----------------
A python script (ttl_generator.py) takes TPM command and data structure
specification from two source files, and outputs code to convert (marshal and
unmarshal) TPM commands between TPM format and C data structures. The input
files are:
tss_tpm_h --- This header file is provided by the Trusted Computing Group (TCG)
as part of the TSS specification
(http://www.trustedcomputinggroup.org/resources/tcg_software_stack_tss_specification).
It is in MIDL (Microsoft Interface Definition Language) format, which is
compatible with C by adding a few macros.
tpm_commands_specification.txt --- This text file is extracted from the TPM
main specification part 3 (in PDF format), also provided by the TCG
(http://www.trustedcomputinggroup.org/files/static_page_files/72C33D71-1A4B-B294-D02C7DF86630BE7C/TPM%20Main-Part%203%20Commands_v1.2_rev116_01032011.pdf).
It has been manually modified in a small number of places. It is first
processed by tpm_commands_extractor.sh, which produces
g_tpm_commands_structure.txt, which is then read by ttl_generator.py.
-------
TESTING
-------
A minimal test is provided. A normal build produces the binary ttl-test, which
tests the marshalling of a simple command.
We do not test the conversion steps from the PDF commands description and the
MIDL header file into marshalling code. We provide the code for the
conversions steps only to facilitate the upgrade to a new TPM standard, should
one come up. The conversion steps are very ad-hoc and cannot offer any
guarantee that the marshalling code is correct. Verifying its correctness
requires interfacing with a hardware or software TPM which is known to conform
to the standard. Inevitably, the testing of this software stack and of the TPM
itself (either hardware or software) are bound together.
It would be good if the TCG provided a formal description of the commands in a
language appropriate for parsing.