| ====== |
| 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. |