vaseboot/include/VasEBoot/tpm.h

95 lines
3.2 KiB
C

/*
* 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 <http://www.gnu.org/licenses/>.
*/
#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