[PATCH 1/2 v3] tpm: Add some headers from the spec
Heinrich Schuchardt
xypron.glpk at gmx.de
Tue Nov 10 21:11:16 CET 2020
On 11/10/20 8:49 AM, Ilias Apalodimas wrote:
> A following patch introduces EFI_TCG2_PROTOCOL.
> Add the required TPMv2 headers to support it.
>
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> ---
> changes since v2:
> - Added description and pointers to TCG specs
> - updated copyright info
> include/tpm-v2.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 77 insertions(+)
>
> diff --git a/include/tpm-v2.h b/include/tpm-v2.h
> index f6c045d35480..c75cd5d8dfe8 100644
> --- a/include/tpm-v2.h
> +++ b/include/tpm-v2.h
> @@ -1,6 +1,13 @@
> /* SPDX-License-Identifier: GPL-2.0+ */
> /*
> + * Defines APIs and structures that allow software to interact with a
> + * TPM2 device
> + *
> + * Copyright (c) 2020 Linaro
> * Copyright (c) 2018 Bootlin
> + *
> + * https://trustedcomputinggroup.org/resource/tss-overview-common-structures-specification/
> + *
> * Author: Miquel Raynal <miquel.raynal at bootlin.com>
> */
>
> @@ -11,6 +18,74 @@
>
> #define TPM2_DIGEST_LEN 32
>
> +#define TPM2_MAX_PCRS 32
> +#define TPM2_PCR_SELECT_MAX ((TPM2_MAX_PCRS + 7) / 8)
> +#define TPM2_MAX_CAP_BUFFER 1024
> +#define TPM2_MAX_TPM_PROPERTIES ((TPM2_MAX_CAP_BUFFER - sizeof(u32) /* TPM2_CAP */ - \
> + sizeof(u32)) / sizeof(struct tpms_tagged_property))
> +
> +/*
> + * We deviate from this draft of the specification by increasing the value of
> + * TPM2_NUM_PCR_BANKS from 3 to 16 to ensure compatibility with TPM2
> + * implementations that have enabled a larger than typical number of PCR
> + * banks. This larger value for TPM2_NUM_PCR_BANKS is expected to be included
> + * in a future revision of the specification.
> + */
> +#define TPM2_NUM_PCR_BANKS 16
> +
> +/* Definition of (UINT32) TPM2_CAP Constants */
> +#define TPM2_CAP_PCRS 0x00000005U
> +#define TPM2_CAP_TPM_PROPERTIES 0x00000006U
> +
> +/* Definition of (UINT32) TPM2_PT Constants */
> +#define PT_GROUP (u32)(0x00000100)
TPM2_PT_GROUP
Please, be consistent in using the TPM2 prefix.
> +#define PT_FIXED (u32)(PT_GROUP * 1)
TPM2_PT_FIXED
Otherwise
Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> +#define TPM2_PT_MANUFACTURER (u32)(PT_FIXED + 5)
> +#define TPM2_PT_PCR_COUNT (u32)(PT_FIXED + 18)
> +#define TPM2_PT_MAX_COMMAND_SIZE (u32)(PT_FIXED + 30)
> +#define TPM2_PT_MAX_RESPONSE_SIZE (u32)(PT_FIXED + 31)
> +
> +/* TPMS_TAGGED_PROPERTY Structure */
> +struct tpms_tagged_property {
> + u32 property;
> + u32 value;
> +} __packed;
> +
> +/* TPMS_PCR_SELECTION Structure */
> +struct tpms_pcr_selection {
> + u16 hash;
> + u8 size_of_select;
> + u8 pcr_select[TPM2_PCR_SELECT_MAX];
> +} __packed;
> +
> +/* TPML_PCR_SELECTION Structure */
> +struct tpml_pcr_selection {
> + u32 count;
> + struct tpms_pcr_selection selection[TPM2_NUM_PCR_BANKS];
> +} __packed;
> +
> +/* TPML_TAGGED_TPM_PROPERTY Structure */
> +struct tpml_tagged_tpm_property {
> + u32 count;
> + struct tpms_tagged_property tpm_property[TPM2_MAX_TPM_PROPERTIES];
> +} __packed;
> +
> +/* TPMU_CAPABILITIES Union */
> +union tpmu_capabilities {
> + /*
> + * Non exhaustive. Only added the structs needed for our
> + * current code
> + */
> + struct tpml_pcr_selection assigned_pcr;
> + struct tpml_tagged_tpm_property tpm_properties;
> +} __packed;
> +
> +/* TPMS_CAPABILITY_DATA Structure */
> +struct tpms_capability_data {
> + u32 capability;
> + union tpmu_capabilities data;
> +} __packed;
> +
> /**
> * TPM2 Structure Tags for command/response buffers.
> *
> @@ -123,11 +198,13 @@ enum tpm2_return_codes {
> * TPM2 algorithms.
> */
> enum tpm2_algorithms {
> + TPM2_ALG_SHA1 = 0x04,
> TPM2_ALG_XOR = 0x0A,
> TPM2_ALG_SHA256 = 0x0B,
> TPM2_ALG_SHA384 = 0x0C,
> TPM2_ALG_SHA512 = 0x0D,
> TPM2_ALG_NULL = 0x10,
> + TPM2_ALG_SM3_256 = 0x12,
> };
>
> /* NV index attributes */
>
More information about the U-Boot
mailing list