summaryrefslogtreecommitdiff
path: root/src/security/tpm/tspi
diff options
context:
space:
mode:
authorFrans Hendriks <fhendriks@eltan.com>2019-09-04 10:57:30 +0200
committerPatrick Georgi <pgeorgi@google.com>2019-09-05 14:54:52 +0000
commitfdb9805d6884090fd7bf62dbdf9c858692e55fb4 (patch)
tree79231a394e2e5004baae39617efb6b81599b9b0b /src/security/tpm/tspi
parent563b8694d247b718f6288b54f0d4055cefec40a8 (diff)
downloadcoreboot-fdb9805d6884090fd7bf62dbdf9c858692e55fb4.tar.xz
security/tpm/tss/tcg-2.0: Add multi digits support to tlcl_extend()
To support multi digists the tlcl_extend() for TPM2 expects TPML_DIGEST_VALUE pointer as input argument. BUG=N/A TEST=Build binary and verified logging on Facebook FBG-1701 Change-Id: I8d86c41c23e4e93a84e0527d7cddcfd30d5d8394 Signed-off-by: Frans Hendriks <fhendriks@eltan.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/33252 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Lance Zhao <lance.zhao@gmail.com>
Diffstat (limited to 'src/security/tpm/tspi')
-rw-r--r--src/security/tpm/tspi/tspi.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/security/tpm/tspi/tspi.c b/src/security/tpm/tspi/tspi.c
index 4698a4dc8c..4cf371196e 100644
--- a/src/security/tpm/tspi/tspi.c
+++ b/src/security/tpm/tspi/tspi.c
@@ -4,6 +4,7 @@
* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
* Copyright 2017 Facebook Inc.
* Copyright 2018 Siemens AG
+ * Copyright 2019 Eltan B.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,6 +21,7 @@
#include <security/tpm/tspi.h>
#include <security/tpm/tss.h>
#include <stdlib.h>
+#include <string.h>
#if CONFIG(VBOOT)
#include <vb2_api.h>
#include <vb2_sha.h>
@@ -209,7 +211,28 @@ uint32_t tpm_extend_pcr(int pcr, enum vb2_hash_algorithm digest_algo,
if (!digest)
return TPM_E_IOERROR;
+#if CONFIG(TPM2)
+ TPML_DIGEST_VALUES tpml_digests;
+
+ tpml_digests.count = 1;
+ switch (digest_algo) {
+ case VB2_HASH_SHA1:
+ tpml_digests.digests[0].hashAlg = TPM_ALG_SHA1;
+ memcpy(tpml_digests.digests[0].digest.sha1,
+ digest, sizeof(TPMU_HA));
+ break;
+ case VB2_HASH_SHA256:
+ tpml_digests.digests[0].hashAlg = TPM_ALG_SHA256;
+ memcpy(tpml_digests.digests[0].digest.sha256,
+ digest, sizeof(TPMU_HA));
+ break;
+ default:
+ return TPM_E_IOERROR;
+ }
+ result = tlcl_extend(pcr, (uint8_t *)&tpml_digests, NULL);
+#else
result = tlcl_extend(pcr, digest, NULL);
+#endif
if (result != TPM_SUCCESS)
return result;