--- embedaddon/strongswan/src/libtpmtss/tpm_tss_trousers.c 2020/06/03 09:46:44 1.1.1.1 +++ embedaddon/strongswan/src/libtpmtss/tpm_tss_trousers.c 2021/03/17 00:20:08 1.1.1.2 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Andreas Steffen + * Copyright (C) 2016-2020 Andreas Steffen * HSR Hochschule fuer Technik Rapperswil * * Copyright (c) 2008 Hal Finney @@ -35,6 +35,8 @@ #include #include +#include + #define LABEL "TPM 1.2 -" /* size in bytes of a TSS AIK public key blob */ @@ -396,6 +398,12 @@ METHOD(tpm_tss_t, supported_signature_schemes, enumera return enumerator_create_empty(); } +METHOD(tpm_tss_t, has_pcr_bank, bool, + private_tpm_tss_trousers_t *this, hash_algorithm_t alg) +{ + return alg == HASH_SHA1; +} + METHOD(tpm_tss_t, read_pcr, bool, private_tpm_tss_trousers_t *this, uint32_t pcr_num, chunk_t *pcr_value, hash_algorithm_t alg) @@ -404,6 +412,10 @@ METHOD(tpm_tss_t, read_pcr, bool, uint8_t *value; uint32_t len; + if (alg != HASH_SHA1) + { + return FALSE; + } result = Tspi_TPM_PcrRead(this->hTPM, pcr_num, &len, &value); if (result != TSS_SUCCESS) { @@ -423,6 +435,10 @@ METHOD(tpm_tss_t, extend_pcr, bool, uint32_t pcr_len; uint8_t *pcr_ptr; + if (alg != HASH_SHA1) + { + return FALSE; + } result = Tspi_TPM_PcrExtend(this->hTPM, pcr_num, data.len, data.ptr, NULL, &pcr_len, &pcr_ptr); if (result != TSS_SUCCESS) @@ -456,6 +472,11 @@ METHOD(tpm_tss_t, quote, bool, enumerator_t *enumerator; bool success = FALSE; + if (alg != HASH_SHA1) + { + return FALSE; + } + /* Retrieve SRK from TPM and set the authentication to well known secret*/ result = Tspi_Context_LoadKeyByUUID(this->hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK); @@ -609,6 +630,19 @@ METHOD(tpm_tss_t, get_data, bool, return FALSE; } +METHOD(tpm_tss_t, get_event_digest, bool, + private_tpm_tss_trousers_t *this, int fd, hash_algorithm_t alg, + chunk_t *digest) +{ + if (alg != HASH_SHA1) + { + return FALSE; + } + *digest = chunk_alloc(HASH_SIZE_SHA1); + + return read(fd, digest->ptr, digest->len) == digest->len; +} + METHOD(tpm_tss_t, destroy, void, private_tpm_tss_trousers_t *this) { @@ -649,12 +683,14 @@ tpm_tss_t *tpm_tss_trousers_create() .generate_aik = _generate_aik, .get_public = _get_public, .supported_signature_schemes = _supported_signature_schemes, + .has_pcr_bank = _has_pcr_bank, .read_pcr = _read_pcr, .extend_pcr = _extend_pcr, .quote = _quote, .sign = _sign, .get_random = _get_random, .get_data = _get_data, + .get_event_digest = _get_event_digest, .destroy = _destroy, }, .load_aik = _load_aik,