Skip to content

QEMU SWTPM Control and Data Message Exchanges

Stefan Berger edited this page Dec 27, 2017 · 1 revision

QEMU with SeaBIOS and TPM 1.2

Channel Request Response Comment
Control 00 00 00 10 00 00 00 00 CMD_SET_DATAFD
Data 80 01 00 00 00 0A 00 00 01 81 00 C4 00 00 00 0A 00 00 00 09 QEMU probing for TPM 1.2 / TPM 2
Data 00 C1 00 00 00 0A 00 00 00 F1 00 C4 00 00 00 0A 00 00 00 09 QEMU probing for TPM 1.2
Control 00 00 00 01 00 00 00 00 00 00 3F FF CMD_GET_CAPABILITY
Control 00 00 00 0E 00 00 00 00 CMD_STOP
Control 00 00 00 11 00 00 00 00 00 00 00 00 00 00 10 00 00 00 0C 00 00 00 10 00 CMD_SET_BUFFERSIZE
Control 00 00 00 0E 00 00 00 00 CMD_STOP
Control 00 00 00 11 00 00 10 00 00 00 00 00 00 00 10 00 00 00 0C 00 00 00 10 00 CMD_SET_BUFFERSIZE
Control 00 00 00 02 00 00 01 00 00 00 00 00 CMD_INIT
Control 00 00 00 04 00 00 00 00 00 00 00 00 CMD_GET_TPMESTABLISHED
Control 00 00 00 05 00 00 00 00 00 00 00 00 CMD_SET_LOCALITY
Data 00 C1 00 00 00 0C 00 00 00 99 00 01 00 C4 00 00 00 0A 00 00 00 00 TPM_Startup(ST_CLEAR)
Data 00 C1 00 00 00 0C 40 00 00 0A 00 08 00 C4 00 00 00 0A 00 00 00 03 TSC_PhysicalPresence(PRESENT)
Data 00 C1 00 00 00 16 00 00 00 65 00 00 00 04 00 00 00 04 00 00 01 08 00 C4 00 00 00 24 00 00 00 00 00 00 00 16 00 1F 00 01 00 01 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 TPM_GetCapability(FLAG_PERMANENT)
Data 00 C1 00 00 00 0C 40 00 00 0A 00 20 00 C4 00 00 00 0A 00 00 00 00 TSC_PhysicalPresence(CMD_ENABLE)
Data 00 C1 00 00 00 0C 40 00 00 0A 00 08 00 C4 00 00 00 0A 00 00 00 00 TSC_PhysicalPresence(PRESENT)
Data 00 C1 00 00 00 16 00 00 00 65 00 00 00 05 00 00 00 04 00 00 01 15 00 C4 00 00 00 1E 00 00 00 00 00 00 00 10 00 0F 42 40 00 0F 42 40 00 0F 42 40 00 0F 42 40 TPM_GetCapability(PROPERTY, PROP_TIS_TIMEOUT)
Data 00 C1 00 00 00 16 00 00 00 65 00 00 00 05 00 00 00 04 00 00 01 20 00 C4 00 00 00 1A 00 00 00 00 00 00 00 0C 02 FA F0 80 05 F5 E1 00 11 E1 A3 00 TPM_GetCapability(PROPERTY, PROP_DURATION)
Data 00 C1 00 00 00 0A 00 00 00 50 00 C4 00 00 00 0A 00 00 00 00 TPM_SelfTestFull()
Control 00 00 00 05 03 00 00 00 00 00 00 00 CMD_SET_LOCALITY
Data 00 C1 00 00 00 0A 40 00 00 0B 00 C4 00 00 00 0A 00 00 00 00 TSC_ResetEstablishmentBit()
Control 00 00 00 05 00 00 00 00 00 00 00 00 CMD_SET_LOCALITY
Data 00 C1 00 00 00 22 00 00 00 14 00 00 00 01 66 EC D4 40 B0 C6 2E 9E 20 6B 3A 10 0A 3D 5B B0 29 D9 55 08 00 C4 0 00 00 1E 00 00 00 00 9D 62 7B 58 91 9F E3 B2 14 3D 99 5D 21 65 23 FF D2 7D 07 A5 TPM_Extend(PCR1)
Data more TPM_Extend()
Data commands sent through SeaBIOS TPM 1.2 menu interaction
Data more TPM_Extend()
Data 00 C1 00 00 00 0C 40 00 00 0A 00 14 00 C4 00 00 00 0A 00 00 00 00 TSC_PhysicalPresence(NOTPRESENT|LOCK)
Data more TPM_Extend()
Data OS interaction with TPM 1.2
Control 00 00 00 03 00 00 00 00 CMD_SHUTDOWN

QEMU with SeaBIOS and TPM 2

Channel Request Response Comment
Control 00 00 00 10 00 00 00 00 CMD_SET_DATAFD
Data 80 01 00 00 00 0A 00 00 01 81 80 01 00 00 00 0A 00 00 01 01 QEMU probing for TPM 1.2 / TPM 2
Control 00 00 00 01 00 00 00 00 00 00 3F FF CMD_GET_CAPABILITY
Control 00 00 00 0E 00 00 00 00 CMD_STOP
Control 00 00 00 11 00 00 00 00 00 00 00 00 00 00 10 00 00 00 0A 2A 00 00 10 00 CMD_SET_BUFFERSIZE
Control 00 00 00 0E 00 00 00 00 CMD_STOP
Control 00 00 00 11 00 00 10 00 00 00 00 00 00 00 10 00 00 00 0A 2A 00 00 10 00 CMD_SET_BUFFERSIZE
Control 00 00 00 02 00 00 01 00 00 00 00 00 CMD_INIT
Control 00 00 00 04 00 00 00 00 00 00 00 00 CMD_GET_TPMESTABLISHED
Control 00 00 00 05 00 00 00 00 00 00 00 00 CMD_SET_LOCALITY
Data 80 01 00 00 00 0C 00 00 01 44 00 00 80 01 00 00 00 0A 00 00 00 00 TPM2_Startup(SU_CLEAR)
Data 80 01 00 00 00 0B 00 00 01 43 01 80 01 00 00 00 0A 00 00 00 00 TPM2_SelfTest(FullTest=YES)
Data 80 01 00 00 00 16 00 00 01 7A 00 00 00 05 00 00 00 00 00 00 00 08 80 01 00 00 00 25 00 00 00 00 00 00 00 00 05 00 00 00 03 00 04 03 FF FF FF 00 0B 03 FF FF FF 00 0C 03 FF FF FF TPM2_GetCapability()
Data 80 02 00 00 00 89 00 00 01 82 00 00 00 01 00 00 00 09 40 00 00 09 00 00 01 00 00 00 00 00 03 00 04 66 EC D4 40 B0 C6 2E 9E 20 6B 3A 10 0A 3D 5B B0 29 D9 55 08 00 0B 66 EC D4 40 B0 C6 2E 9E 20 6B 3A 10 0A 3D 5B B0 29 D9 55 08 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 66 EC D4 40 B0 C6 2E 9E 20 6B 3A 10 0A 3D 5B B0 29 D9 55 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 02 00 00 00 13 00 00 00 00 00 00 00 00 00 00 01 00 00 TPM2_PcrExtend()
Data more TPM2_PcrExtend()
Data 80 01 00 00 00 14 00 00 01 46 00 08 DD 8B 31 0C 0C 31 8B F5 80 01 00 00 00 0A 00 00 00 00 TPM2_StirRandom()
Data 80 01 00 00 00 0C 00 00 01 7B 00 14 80 01 00 00 00 20 00 00 00 00 00 14 A6 A4 2C D7 C1 A5 B2 45 B4 1E 8C FF 9A 48 64 FF D6 03 0A C5 TPM2_GetRandom()
Data 80 02 00 00 00 31 00 00 01 29 40 00 00 0C 00 00 00 09 40 00 00 09 00 00 01 00 00 00 14 A6 A4 2C D7 C1 A5 B2 45 B4 1E 8C FF 9A 48 64 FF D6 03 0A C5 80 02 00 00 00 13 00 00 00 00 00 00 00 00 00 00 01 00 00 TPM2_HierarchyChangeAuth()
Data more TPM2_PcrExtend()
Data OS interaction with TPM 1.2
Control 00 00 00 03 00 00 00 00 CMD_SHUTDOWN