Frans Hendriks has uploaded this change for review.

View Change

security/tpm/tss/tcg-2.0: Use tlcl_get_hash_size_from_algo()  for hash size

mashal_TPMT_HA() uses size of SHA-256 hash.
Use tlcll_get_hash_size_from_algo(0) to determince the hash size.

BUG=N/A
TEST=Build binary and verified logging on Facebook FBG-1701

Change-Id: I739260e13e9cd10a61d52e13e8741b12ec868d7f
Signed-off-by: Frans Hendriks <fhendriks@eltan.com>
---
M src/security/tpm/tss.h
M src/security/tpm/tss/tcg-2.0/tss.c
M src/security/tpm/tss/tcg-2.0/tss_marshaling.c
M src/security/tpm/tss/tcg-2.0/tss_structures.h
4 files changed, 52 insertions(+), 1 deletion(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/51/33251/1
diff --git a/src/security/tpm/tss.h b/src/security/tpm/tss.h
index 548a39a..2ff9eed 100644
--- a/src/security/tpm/tss.h
+++ b/src/security/tpm/tss.h
@@ -70,6 +70,14 @@
* custom tpm standards like cr50
*/
void *tpm_process_command(TPM_CC command, void *command_body);
+/*
+ * Return size of digest.
+ *
+ * @param[in] HashAlgo Hash algorithm
+ *
+ * @return size of digest
+ */
+uint16_t tlcl_get_hash_size_from_algo(TPMI_ALG_HASH hashAlgo);

#endif

diff --git a/src/security/tpm/tss/tcg-2.0/tss.c b/src/security/tpm/tss/tcg-2.0/tss.c
index e579bff..24d7726 100644
--- a/src/security/tpm/tss/tcg-2.0/tss.c
+++ b/src/security/tpm/tss/tcg-2.0/tss.c
@@ -361,3 +361,33 @@

return TPM_SUCCESS;
}
+/**
+ Return size of digest.
+
+ @param[in] HashAlgo Hash algorithm
+
+ @return size of digest
+**/
+
+uint16_t tlcl_get_hash_size_from_algo(TPMI_ALG_HASH hashAlgo)
+{
+ uint16_t value;
+
+ switch (hashAlgo) {
+ case TPM_ALG_ERROR:
+ value = 1;
+ break;
+ case TPM_ALG_SHA1:
+ value = SHA1_DIGEST_SIZE;
+ break;
+ case TPM_ALG_SHA256:
+ value = SHA256_DIGEST_SIZE;
+ break;
+ default:
+ printk(BIOS_SPEW, "%s: unknown hash algorithm %d\n", __func__,
+ hashAlgo);
+ value = 0;
+ };
+
+ return value;
+}
diff --git a/src/security/tpm/tss/tcg-2.0/tss_marshaling.c b/src/security/tpm/tss/tcg-2.0/tss_marshaling.c
index 21da73a..a74eb09 100644
--- a/src/security/tpm/tss/tcg-2.0/tss_marshaling.c
+++ b/src/security/tpm/tss/tcg-2.0/tss_marshaling.c
@@ -12,6 +12,7 @@

#include "tss_marshaling.h"
#include <security/tpm/tss/vendor/cr50/cr50.h>
+#include <security/tpm/tss.h>

static uint16_t tpm_tag CAR_GLOBAL; /* Depends on the command type. */

@@ -82,7 +83,7 @@

rc |= marshal_TPMI_ALG_HASH(ob, tpmtha->hashAlg);
rc |= obuf_write(ob, tpmtha->digest.sha256,
- sizeof(tpmtha->digest.sha256));
+ tlcl_get_hash_size_from_algo(tpmtha->hashAlg));

return rc;
}
diff --git a/src/security/tpm/tss/tcg-2.0/tss_structures.h b/src/security/tpm/tss/tcg-2.0/tss_structures.h
index 991cbcf..dcd4468 100644
--- a/src/security/tpm/tss/tcg-2.0/tss_structures.h
+++ b/src/security/tpm/tss/tcg-2.0/tss_structures.h
@@ -36,12 +36,24 @@
typedef TPM_HANDLE TPM_RH;

/* Some hardcoded algorithm values. */
+/* Table 7 - TPM_ALG_ID Constants */
+#define TPM_ALG_ERROR ((TPM_ALG_ID)0x0000)
#define TPM_ALG_HMAC ((TPM_ALG_ID)0x0005)
#define TPM_ALG_NULL ((TPM_ALG_ID)0x0010)
#define TPM_ALG_SHA1 ((TPM_ALG_ID)0x0004)
#define TPM_ALG_SHA256 ((TPM_ALG_ID)0x000b)
+#define TPM_ALG_SHA384 ((TPM_ALG_ID)0x000C)
+#define TPM_ALG_SHA512 ((TPM_ALG_ID)0x000D)
+#define TPM_ALG_SM3_256 ((TPM_ALG_ID)0x0012)

+/* Annex A Algorithm Constants */
+
+/* Table 205 - Defines for SHA1 Hash Values */
+#define SHA1_DIGEST_SIZE 20
+/* Table 206 - Defines for SHA256 Hash Values */
#define SHA256_DIGEST_SIZE 32
+/* Table 208 - Defines for SHA512 Hash Values */
+#define SHA512_DIGEST_SIZE 64

/* Some hardcoded hierarchies. */
#define TPM_RH_NULL 0x40000007

To view, visit change 33251. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I739260e13e9cd10a61d52e13e8741b12ec868d7f
Gerrit-Change-Number: 33251
Gerrit-PatchSet: 1
Gerrit-Owner: Frans Hendriks <fhendriks@eltan.com>
Gerrit-MessageType: newchange