diff options
author | Stefan Berger <stefanb@linux.ibm.com> | 2019-01-30 14:06:06 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-02-04 21:23:37 -0500 |
commit | b7dbd200cfe938698ed09b339ac3209ecb893648 (patch) | |
tree | f0f6413d547aefb3e948e66ae540bccf982bc697 | |
parent | 996d3c0297135f12ff3eda40dcb464b2375926e5 (diff) | |
download | seabios-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.c | 41 |
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 |