aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Berger <stefanb@linux.ibm.com>2020-03-30 08:10:29 -0400
committerAlexey Kardashevskiy <aik@ozlabs.ru>2020-05-13 11:25:23 +1000
commitd04fea6ab0431e81e43a9ce5b1ec33e0c2ea66eb (patch)
tree7ac493980e7bc23694c9097175a61d668efb463b
parentb64b57c9db9a9440252f4d07e7f625e6cf33add7 (diff)
downloadSLOF-d04fea6ab0431e81e43a9ce5b1ec33e0c2ea66eb.zip
SLOF-d04fea6ab0431e81e43a9ce5b1ec33e0c2ea66eb.tar.gz
SLOF-d04fea6ab0431e81e43a9ce5b1ec33e0c2ea66eb.tar.bz2
tcgbios: Add support for SHA3 type of algorithms
Add support for SHA3 type of algorithms that the vTPM may support some time in the future. The algorithms are assigned in "TCG Algorithm Registry" https://trustedcomputinggroup.org/resource/tcg-algorithm-registry/ Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
-rw-r--r--lib/libtpm/tcgbios.c26
-rw-r--r--lib/libtpm/tcgbios_int.h6
2 files changed, 29 insertions, 3 deletions
diff --git a/lib/libtpm/tcgbios.c b/lib/libtpm/tcgbios.c
index 944e86c..6f553a7 100644
--- a/lib/libtpm/tcgbios.c
+++ b/lib/libtpm/tcgbios.c
@@ -68,6 +68,9 @@ static struct {
#define TPM2_ALG_SHA384_FLAG (1 << 2)
#define TPM2_ALG_SHA512_FLAG (1 << 3)
#define TPM2_ALG_SM3_256_FLAG (1 << 4)
+#define TPM2_ALG_SHA3_256_FLAG (1 << 5)
+#define TPM2_ALG_SHA3_384_FLAG (1 << 6)
+#define TPM2_ALG_SHA3_512_FLAG (1 << 7)
static const uint8_t ZeroGuid[16] = { 0 };
@@ -114,9 +117,10 @@ static void probe_tpm(void)
struct tpm_log_entry {
TCG_PCR_EVENT2_Header hdr;
uint8_t pad[sizeof(struct TPML_DIGEST_VALUES)
- + 5 * sizeof(struct TPMT_HA)
+ + 8 * sizeof(struct TPMT_HA)
+ SHA1_BUFSIZE + SHA256_BUFSIZE + SHA384_BUFSIZE
- + SHA512_BUFSIZE + SM3_256_BUFSIZE];
+ + SHA512_BUFSIZE + SM3_256_BUFSIZE + SHA3_256_BUFSIZE
+ + SHA3_384_BUFSIZE + SHA3_512_BUFSIZE];
} __attribute__((packed));
static const struct hash_parameters {
@@ -151,6 +155,21 @@ static const struct hash_parameters {
.hashalg_flag = TPM2_ALG_SM3_256_FLAG,
.hash_buffersize = SM3_256_BUFSIZE,
.name = "SM3-256",
+ }, {
+ .hashalg = TPM2_ALG_SHA3_256,
+ .hashalg_flag = TPM2_ALG_SHA3_256_FLAG,
+ .hash_buffersize = SHA3_256_BUFSIZE,
+ .name = "SHA3-256",
+ }, {
+ .hashalg = TPM2_ALG_SHA3_384,
+ .hashalg_flag = TPM2_ALG_SHA3_384_FLAG,
+ .hash_buffersize = SHA3_384_BUFSIZE,
+ .name = "SHA3-384",
+ }, {
+ .hashalg = TPM2_ALG_SHA3_512,
+ .hashalg_flag = TPM2_ALG_SHA3_512_FLAG,
+ .hash_buffersize = SHA3_512_BUFSIZE,
+ .name = "SHA3-512",
}
};
@@ -634,7 +653,8 @@ static int tpm20_write_EfiSpecIdEventStruct(void)
{
struct {
struct TCG_EfiSpecIdEventStruct hdr;
- uint32_t pad[256];
+ uint32_t pad[sizeof(struct tpm_log_entry) +
+ sizeof(uint8_t)];
} event = {
.hdr.signature = "Spec ID Event03",
.hdr.platformClass = TPM_TCPA_ACPI_CLASS_CLIENT,
diff --git a/lib/libtpm/tcgbios_int.h b/lib/libtpm/tcgbios_int.h
index 1a88402..22df31d 100644
--- a/lib/libtpm/tcgbios_int.h
+++ b/lib/libtpm/tcgbios_int.h
@@ -50,6 +50,9 @@
#define SHA384_BUFSIZE 48
#define SHA512_BUFSIZE 64
#define SM3_256_BUFSIZE 32
+#define SHA3_256_BUFSIZE 32
+#define SHA3_384_BUFSIZE 48
+#define SHA3_512_BUFSIZE 64
/*
* Logging for TPM 2 is specified in TCG spec "TCG PC Client Platform
@@ -169,6 +172,9 @@ struct tpm_rsp_header {
#define TPM2_ALG_SHA384 0x000c
#define TPM2_ALG_SHA512 0x000d
#define TPM2_ALG_SM3_256 0x0012
+#define TPM2_ALG_SHA3_256 0x0027
+#define TPM2_ALG_SHA3_384 0x0028
+#define TPM2_ALG_SHA3_512 0x0029
/* TPM 2 command tags */
#define TPM2_ST_NO_SESSIONS 0x8001