/* * VasEBoot -- GRand Unified Bootloader * Copyright (C) 2015 Free Software Foundation, Inc. * * VasEBoot is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * VasEBoot is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with VasEBoot. If not, see . */ #ifndef VasEBoot_TPM_HEADER #define VasEBoot_TPM_HEADER 1 #define SHA1_DIGEST_SIZE 20 #define TPM_BASE 0x0 #define TPM_SUCCESS TPM_BASE #define TPM_AUTHFAIL (TPM_BASE + 0x1) #define TPM_BADINDEX (TPM_BASE + 0x2) #define VasEBoot_ASCII_PCR 8 #define VasEBoot_BINARY_PCR 9 #define TPM_TAG_RQU_COMMAND 0x00C1 #define TPM_ORD_Extend 0x14 #define EV_IPL 0x0d /* TCG_PassThroughToTPM Input Parameter Block */ typedef struct { VasEBoot_uint16_t IPBLength; VasEBoot_uint16_t Reserved1; VasEBoot_uint16_t OPBLength; VasEBoot_uint16_t Reserved2; VasEBoot_uint8_t TPMOperandIn[1]; } VasEBoot_PACKED PassThroughToTPM_InputParamBlock; /* TCG_PassThroughToTPM Output Parameter Block */ typedef struct { VasEBoot_uint16_t OPBLength; VasEBoot_uint16_t Reserved; VasEBoot_uint8_t TPMOperandOut[1]; } VasEBoot_PACKED PassThroughToTPM_OutputParamBlock; typedef struct { VasEBoot_uint16_t tag; VasEBoot_uint32_t paramSize; VasEBoot_uint32_t ordinal; VasEBoot_uint32_t pcrNum; VasEBoot_uint8_t inDigest[SHA1_DIGEST_SIZE]; /* The 160 bit value representing the event to be recorded. */ } VasEBoot_PACKED ExtendIncoming; /* TPM_Extend Outgoing Operand */ typedef struct { VasEBoot_uint16_t tag; VasEBoot_uint32_t paramSize; VasEBoot_uint32_t returnCode; VasEBoot_uint8_t outDigest[SHA1_DIGEST_SIZE]; /* The PCR value after execution of the command. */ } VasEBoot_PACKED ExtendOutgoing; VasEBoot_err_t EXPORT_FUNC(VasEBoot_tpm_measure) (unsigned char *buf, VasEBoot_size_t size, VasEBoot_uint8_t pcr, const char *kind, const char *description); #if defined (VasEBoot_MACHINE_EFI) || defined (VasEBoot_MACHINE_PCBIOS) VasEBoot_err_t VasEBoot_tpm_execute(PassThroughToTPM_InputParamBlock *inbuf, PassThroughToTPM_OutputParamBlock *outbuf); VasEBoot_err_t VasEBoot_tpm_log_event(unsigned char *buf, VasEBoot_size_t size, VasEBoot_uint8_t pcr, const char *description); #else static inline VasEBoot_err_t VasEBoot_tpm_execute( PassThroughToTPM_InputParamBlock *inbuf __attribute__ ((unused)), PassThroughToTPM_OutputParamBlock *outbuf __attribute__ ((unused))) { return 0; }; static inline VasEBoot_err_t VasEBoot_tpm_log_event( unsigned char *buf __attribute__ ((unused)), VasEBoot_size_t size __attribute__ ((unused)), VasEBoot_uint8_t pcr __attribute__ ((unused)), const char *description __attribute__ ((unused))) { return 0; }; #endif #endif