aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Berger <stefanb@linux.ibm.com>2019-01-30 14:06:06 -0500
committerKevin O'Connor <kevin@koconnor.net>2019-02-04 21:23:37 -0500
commitb7dbd200cfe938698ed09b339ac3209ecb893648 (patch)
treef0f6413d547aefb3e948e66ae540bccf982bc697
parent996d3c0297135f12ff3eda40dcb464b2375926e5 (diff)
downloadseabios-b7dbd200cfe938698ed09b339ac3209ecb893648.tar.gz
tcgbios: Use table to convert hash to buffer size
Use a table to convert the hash to the buffer size it needs. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
-rw-r--r--src/tcgbios.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/tcgbios.c b/src/tcgbios.c
index 24846d3b..0eabc606 100644
--- a/src/tcgbios.c
+++ b/src/tcgbios.c
@@ -161,23 +161,38 @@ struct tpm_log_entry {
+ SHA512_BUFSIZE + SM3_256_BUFSIZE];
} PACKED;
+static const struct hash_parameters {
+ u16 hashalg;
+ u8 hash_buffersize;
+} hash_parameters[] = {
+ {
+ .hashalg = TPM2_ALG_SHA1,
+ .hash_buffersize = SHA1_BUFSIZE,
+ }, {
+ .hashalg = TPM2_ALG_SHA256,
+ .hash_buffersize = SHA256_BUFSIZE,
+ }, {
+ .hashalg = TPM2_ALG_SHA384,
+ .hash_buffersize = SHA384_BUFSIZE,
+ }, {
+ .hashalg = TPM2_ALG_SHA512,
+ .hash_buffersize = SHA512_BUFSIZE,
+ }, {
+ .hashalg = TPM2_ALG_SM3_256,
+ .hash_buffersize = SM3_256_BUFSIZE,
+ }
+};
+
static int
tpm20_get_hash_buffersize(u16 hashAlg)
{
- switch (hashAlg) {
- case TPM2_ALG_SHA1:
- return SHA1_BUFSIZE;
- case TPM2_ALG_SHA256:
- return SHA256_BUFSIZE;
- case TPM2_ALG_SHA384:
- return SHA384_BUFSIZE;
- case TPM2_ALG_SHA512:
- return SHA512_BUFSIZE;
- case TPM2_ALG_SM3_256:
- return SM3_256_BUFSIZE;
- default:
- return -1;
+ unsigned i;
+
+ for (i = 0; i < ARRAY_SIZE(hash_parameters); i++) {
+ if (hash_parameters[i].hashalg == hashAlg)
+ return hash_parameters[i].hash_buffersize;
}
+ return -1;
}
// Add an entry at the start of the log describing digest formats