Commit fe54aeaa authored by Alexandru Gagniuc's avatar Alexandru Gagniuc Committed by Tom Rini
Browse files

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: default avatarAlexandru Gagniuc <mr.nuke.me@gmail.com>
[trini: Use CONFIG_IS_ENABLED not IS_ENABLED for MD5 check]
Signed-off-by: Tom Rini's avatarTom Rini <trini@konsulko.com>
parent 07212096
...@@ -207,12 +207,25 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf, ...@@ -207,12 +207,25 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
return 0; 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 * 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. * is enable we will use that, otherwise a software version of the algorithm.
* Note that 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[] = {
#if I_WANT_MD5
{
.name = "md5",
.digest_size = MD5_SUM_LEN,
.chunk_size = CHUNKSZ_MD5,
.hash_func_ws = md5_wd,
},
#endif
#ifdef CONFIG_SHA1 #ifdef CONFIG_SHA1
{ {
.name = "sha1", .name = "sha1",
......
...@@ -31,6 +31,7 @@ struct fdt_region; ...@@ -31,6 +31,7 @@ struct fdt_region;
#define IMAGE_ENABLE_OF_LIBFDT 1 #define IMAGE_ENABLE_OF_LIBFDT 1
#define CONFIG_FIT_VERBOSE 1 /* enable fit_format_{error,warning}() */ #define CONFIG_FIT_VERBOSE 1 /* enable fit_format_{error,warning}() */
#define CONFIG_FIT_RSASSA_PSS 1 #define CONFIG_FIT_RSASSA_PSS 1
#define CONFIG_MD5
#define CONFIG_SHA1 #define CONFIG_SHA1
#define CONFIG_SHA256 #define CONFIG_SHA256
#define CONFIG_SHA384 #define CONFIG_SHA384
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include "compiler.h" #include "compiler.h"
#define MD5_SUM_LEN 16
struct MD5Context { struct MD5Context {
__u32 buf[4]; __u32 buf[4];
__u32 bits[2]; __u32 bits[2];
...@@ -28,7 +30,7 @@ void md5 (unsigned char *input, int len, unsigned char output[16]); ...@@ -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 * 'output' must have enough space to hold 16 bytes. If 'chunk' Trigger the
* watchdog every 'chunk_sz' bytes of input processed. * watchdog every 'chunk_sz' bytes of input processed.
*/ */
void md5_wd (unsigned char *input, int len, unsigned char output[16], void md5_wd(const unsigned char *input, unsigned int len,
unsigned int chunk_sz); unsigned char output[16], unsigned int chunk_sz);
#endif /* _MD5_H */ #endif /* _MD5_H */
...@@ -284,12 +284,12 @@ md5 (unsigned char *input, int len, unsigned char output[16]) ...@@ -284,12 +284,12 @@ md5 (unsigned char *input, int len, unsigned char output[16])
* watchdog every 'chunk_sz' bytes of input processed. * watchdog every 'chunk_sz' bytes of input processed.
*/ */
void 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) unsigned int chunk_sz)
{ {
struct MD5Context context; struct MD5Context context;
#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
unsigned char *end, *curr; const unsigned char *end, *curr;
int chunk; int chunk;
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment