tree: bd13eabfc804c66584fba6988a8b836b170442d7 [path history] [tgz]

CrOS TPM2 Simulator

This project is the front end for a software TPM 2.0. It exposes libtpm2 as two file descriptors to accept commands from a client.

The main loop waits for requests on /dev/tpm-req, and writes responses to /dev/tpm-resp. All reads and writes are synchronous. A client should read and write to these file descriptors with the read() and write() syscalls. Multiple clients using the simulator simultaneously is undefined behavior. The main loop only exits when it receives an erroneous command.

Execute tpm2-simulator as root to inialize the software TPM and wait for commands.

An example of how a client can use tpm2-simulator is in trunks. See trunks::TpmSimulatorHandle. To use trunks with the software TPM, start the trunks daemon as root with the --simulator flag.


  • Because tpm2 builds a static library, if a change is made to any file in that repo, tpm2-simulator must be forcibly rebuilt to refect this change.

  • If the simulator ever goes into lockout, failure, or other erroneous mode, remove NVChip.