summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>2021-09-03 03:54:20 +0300
committerTom Rini <trini@konsulko.com>2021-09-08 23:11:46 +0300
commitfe54aeaa4acbb41880b05acef9ef949e62d299dd (patch)
tree7530b6a5bf82364263c4fc06cef926cde5b97ca4
parent0721209699c5092b4d364c3b57256840d3a7dcbc (diff)
downloadu-boot-fe54aeaa4acbb41880b05acef9ef949e62d299dd.tar.xz
common: Move MD5 hash to hash_algo[] array.
MD5 is being called directly in some places, but it is not available via hash_lookup_algo("md5"). This is inconsistent with other hasing routines. To resolve this, add an "md5" entry to hash_algos[]. The #ifdef clause looks funnier than those for other entries. This is because both MD5 and SPL_MD5 configs exist, whereas the other hashes do not have "SPL_" entries. The long term plan is to get rid of the ifdefs, so those should not be expected to survive much longer. The md5 entry does not have .hash_init/update/finish members. That's okay because hash_progressive_lookup_algo() will catch that, and return -EPROTONOSUPPORT, while hash_lookup_algo() will return the correct pointer. Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> [trini: Use CONFIG_IS_ENABLED not IS_ENABLED for MD5 check] Signed-off-by: Tom Rini <trini@konsulko.com>
-rw-r--r--common/hash.c13
-rw-r--r--include/image.h1
-rw-r--r--include/u-boot/md5.h6
-rw-r--r--lib/md5.c4
4 files changed, 20 insertions, 4 deletions
diff --git a/common/hash.c b/common/hash.c
index dca23635ab..6277fe65b3 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -207,12 +207,25 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
return 0;
}
+#ifdef USE_HOSTCC
+# define I_WANT_MD5 1
+#else
+# define I_WANT_MD5 CONFIG_IS_ENABLED(MD5)
+#endif
/*
* These are the hash algorithms we support. If we have hardware acceleration
* is enable we will use that, otherwise a software version of the algorithm.
* Note that algorithm names must be in lower case.
*/
static struct hash_algo hash_algo[] = {
+#if I_WANT_MD5
+ {
+ .name = "md5",
+ .digest_size = MD5_SUM_LEN,
+ .chunk_size = CHUNKSZ_MD5,
+ .hash_func_ws = md5_wd,
+ },
+#endif
#ifdef CONFIG_SHA1
{
.name = "sha1",
diff --git a/include/image.h b/include/image.h
index 489b220eba..e4b9cd0df2 100644
--- a/include/image.h
+++ b/include/image.h
@@ -31,6 +31,7 @@ struct fdt_region;
#define IMAGE_ENABLE_OF_LIBFDT 1
#define CONFIG_FIT_VERBOSE 1 /* enable fit_format_{error,warning}() */
#define CONFIG_FIT_RSASSA_PSS 1
+#define CONFIG_MD5
#define CONFIG_SHA1
#define CONFIG_SHA256
#define CONFIG_SHA384
diff --git a/include/u-boot/md5.h b/include/u-boot/md5.h
index e09c16a6e3..6d48592aa6 100644
--- a/include/u-boot/md5.h
+++ b/include/u-boot/md5.h
@@ -8,6 +8,8 @@
#include "compiler.h"
+#define MD5_SUM_LEN 16
+
struct MD5Context {
__u32 buf[4];
__u32 bits[2];
@@ -28,7 +30,7 @@ void md5 (unsigned char *input, int len, unsigned char output[16]);
* 'output' must have enough space to hold 16 bytes. If 'chunk' Trigger the
* watchdog every 'chunk_sz' bytes of input processed.
*/
-void md5_wd (unsigned char *input, int len, unsigned char output[16],
- unsigned int chunk_sz);
+void md5_wd(const unsigned char *input, unsigned int len,
+ unsigned char output[16], unsigned int chunk_sz);
#endif /* _MD5_H */
diff --git a/lib/md5.c b/lib/md5.c
index 2ae4a06319..e2ba622ea4 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -284,12 +284,12 @@ md5 (unsigned char *input, int len, unsigned char output[16])
* watchdog every 'chunk_sz' bytes of input processed.
*/
void
-md5_wd (unsigned char *input, int len, unsigned char output[16],
+md5_wd(const unsigned char *input, unsigned int len, unsigned char output[16],
unsigned int chunk_sz)
{
struct MD5Context context;
#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
- unsigned char *end, *curr;
+ const unsigned char *end, *curr;
int chunk;
#endif