common: Move MD5 hash to hash_algo[] array.
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Fri, 3 Sep 2021 00:54:20 +0000 (19:54 -0500)
committerTom Rini <trini@konsulko.com>
Wed, 8 Sep 2021 20:11:46 +0000 (16:11 -0400)
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>
common/hash.c
include/image.h
include/u-boot/md5.h
lib/md5.c

index dca2363..6277fe6 100644 (file)
@@ -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",
index 489b220..e4b9cd0 100644 (file)
@@ -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
index e09c16a..6d48592 100644 (file)
@@ -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 */
index 2ae4a06..e2ba622 100644 (file)
--- 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