Skip to content
Snippets Groups Projects
Commit 78eda89e authored by Tom Rini's avatar Tom Rini
Browse files

hash: Compile only hardware or software versions of SHA algorithms


Commit 089df18b ("lib: move hash CONFIG options to Kconfig") moved
CONFIG_SHA1, CONFIG_SHA256, CONFIG_SHA_HW_ACCEL, and
CONFIG_SHA_PROG_HW_ACCEL config options to Kconfig. So in the case of
SPL, CONFIG_SPL_HASH_SUPPORT enables CONFIG_SHA1 and CONFIG_SHA256 which
enables SHA SW library by default.  But in the case of platforms with
SHA HW library support, SHA SW library becomes redundant and increases
size of SPL by approx 18K.  Rework the code so that we have named
members and only have either software or hardware versions of the
algorithm, depending on the relevant config options.  Update the comment
around hash_algo to reflect this as well.

Reported-by: default avatarSumit Garg <sumit.garg@nxp.com>
Cc: Sumit Garg <sumit.garg@nxp.com>
Signed-off-by: default avatarTom Rini <trini@konsulko.com>
Reviewed-by: default avatarSumit Garg <sumit.garg@nxp.com>
parent 3809e302
No related branches found
No related tags found
No related merge requests found
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include <u-boot/sha256.h> #include <u-boot/sha256.h>
#include <u-boot/md5.h> #include <u-boot/md5.h>
#ifdef CONFIG_SHA1 #if defined(CONFIG_SHA1) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
static int hash_init_sha1(struct hash_algo *algo, void **ctxp) static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
{ {
sha1_context *ctx = malloc(sizeof(sha1_context)); sha1_context *ctx = malloc(sizeof(sha1_context));
...@@ -58,7 +58,7 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf, ...@@ -58,7 +58,7 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
} }
#endif #endif
#ifdef CONFIG_SHA256 #if defined(CONFIG_SHA256) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
static int hash_init_sha256(struct hash_algo *algo, void **ctxp) static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
{ {
sha256_context *ctx = malloc(sizeof(sha256_context)); sha256_context *ctx = malloc(sizeof(sha256_context));
...@@ -113,68 +113,61 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf, ...@@ -113,68 +113,61 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
} }
/* /*
* These are the hash algorithms we support. Chips which support accelerated * These are the hash algorithms we support. If we have hardware acceleration
* crypto could perhaps add named version of these algorithms here. Note that * is enable we will use that, otherwise a software version of the algorithm.
* algorithm names must be in lower case. * Note that algorithm names must be in lower case.
*/ */
static struct hash_algo hash_algo[] = { static struct hash_algo hash_algo[] = {
/* #ifdef CONFIG_SHA1
* CONFIG_SHA_HW_ACCEL is defined if hardware acceleration is
* available.
*/
#ifdef CONFIG_SHA_HW_ACCEL
{ {
"sha1", .name = "sha1",
SHA1_SUM_LEN, .digest_size = SHA1_SUM_LEN,
hw_sha1, .chunk_size = CHUNKSZ_SHA1,
CHUNKSZ_SHA1, #ifdef CONFIG_SHA_HW_ACCEL
#ifdef CONFIG_SHA_PROG_HW_ACCEL .hash_func_ws = hw_sha1,
hw_sha_init, #else
hw_sha_update, .hash_func_ws = sha1_csum_wd,
hw_sha_finish,
#endif #endif
}, {
"sha256",
SHA256_SUM_LEN,
hw_sha256,
CHUNKSZ_SHA256,
#ifdef CONFIG_SHA_PROG_HW_ACCEL #ifdef CONFIG_SHA_PROG_HW_ACCEL
hw_sha_init, .hash_init = hw_sha_init,
hw_sha_update, .hash_update = hw_sha_update,
hw_sha_finish, .hash_finish = hw_sha_finish,
#endif #else
}, .hash_init = hash_init_sha1,
.hash_update = hash_update_sha1,
.hash_finish = hash_finish_sha1,
#endif #endif
#ifdef CONFIG_SHA1
{
"sha1",
SHA1_SUM_LEN,
sha1_csum_wd,
CHUNKSZ_SHA1,
hash_init_sha1,
hash_update_sha1,
hash_finish_sha1,
}, },
#endif #endif
#ifdef CONFIG_SHA256 #ifdef CONFIG_SHA256
{ {
"sha256", .name = "sha256",
SHA256_SUM_LEN, .digest_size = SHA256_SUM_LEN,
sha256_csum_wd, .chunk_size = CHUNKSZ_SHA256,
CHUNKSZ_SHA256, #ifdef CONFIG_SHA_HW_ACCEL
hash_init_sha256, .hash_func_ws = hw_sha256,
hash_update_sha256, #else
hash_finish_sha256, .hash_func_ws = sha256_csum_wd,
#endif
#ifdef CONFIG_SHA_PROG_HW_ACCEL
.hash_init = hw_sha_init,
.hash_update = hw_sha_update,
.hash_finish = hw_sha_finish,
#else
.hash_init = hash_init_sha256,
.hash_update = hash_update_sha256,
.hash_finish = hash_finish_sha256,
#endif
}, },
#endif #endif
{ {
"crc32", .name = "crc32",
4, .digest_size = 4,
crc32_wd_buf, .chunk_size = CHUNKSZ_CRC32,
CHUNKSZ_CRC32, .hash_func_ws = crc32_wd_buf,
hash_init_crc32, .hash_init = hash_init_crc32,
hash_update_crc32, .hash_update = hash_update_crc32,
hash_finish_crc32, .hash_finish = hash_finish_crc32,
}, },
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment