[U-Boot] [PATCH 3/4] [RFC] hash: Add function to find hash_algo struct with progressive hash
Ruchika Gupta
ruchika.gupta at freescale.com
Wed Dec 17 11:05:51 CET 2014
Signed-off-by: Ruchika Gupta <ruchika.gupta at freescale.com>
CC: Simon Glass <sjg at chromium.org>
---
common/hash.c | 35 ++++++++++++++++++++++++++---------
include/hash.h | 15 +++++++++++++++
2 files changed, 41 insertions(+), 9 deletions(-)
diff --git a/common/hash.c b/common/hash.c
index 12d6759..87263df 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -20,7 +20,7 @@
#include <asm/io.h>
#include <asm/errno.h>
-#ifdef CONFIG_CMD_SHA1SUM
+#ifdef CONFIG_SHA256
static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
{
sha1_context *ctx = malloc(sizeof(sha1_context));
@@ -125,12 +125,8 @@ static struct hash_algo hash_algo[] = {
CHUNKSZ_SHA256,
},
#endif
- /*
- * This is CONFIG_CMD_SHA1SUM instead of CONFIG_SHA1 since otherwise
- * it bloats the code for boards which use SHA1 but not the 'hash'
- * or 'sha1sum' commands.
- */
-#ifdef CONFIG_CMD_SHA1SUM
+
+#ifdef CONFIG_SHA1
{
"sha1",
SHA1_SUM_LEN,
@@ -140,7 +136,6 @@ static struct hash_algo hash_algo[] = {
hash_update_sha1,
hash_finish_sha1,
},
-#define MULTI_HASH
#endif
#ifdef CONFIG_SHA256
{
@@ -152,7 +147,6 @@ static struct hash_algo hash_algo[] = {
hash_update_sha256,
hash_finish_sha256,
},
-#define MULTI_HASH
#endif
{
"crc32",
@@ -165,6 +159,10 @@ static struct hash_algo hash_algo[] = {
},
};
+#if defined(CONFIG_SHA256) || defined(CONFIG_CMD_SHA1SUM)
+#define MULTI_HASH
+#endif
+
#if defined(CONFIG_HASH_VERIFY) || defined(CONFIG_CMD_HASH)
#define MULTI_HASH
#endif
@@ -311,6 +309,25 @@ int hash_lookup_algo(const char *algo_name, struct hash_algo **algop)
return -EPROTONOSUPPORT;
}
+int hash_progressive_lookup_algo(const char *algo_name,
+ struct hash_algo **algop)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
+ if (!strcmp(algo_name, hash_algo[i].name)) {
+ if (hash_algo[i].hash_init) {
+ *algop = &hash_algo[i];
+ return 0;
+ }
+ }
+ }
+
+ debug("Unknown hash algorithm '%s'\n", algo_name);
+ return -EPROTONOSUPPORT;
+}
+
+
void hash_show(struct hash_algo *algo, ulong addr, ulong len, uint8_t *output)
{
int i;
diff --git a/include/hash.h b/include/hash.h
index d8ec4f0..059f84e 100644
--- a/include/hash.h
+++ b/include/hash.h
@@ -128,6 +128,21 @@ int hash_block(const char *algo_name, const void *data, unsigned int len,
int hash_lookup_algo(const char *algo_name, struct hash_algo **algop);
/**
+ * hash_progressive_lookup_algo() - Look up the hash_algo struct with progressive
+ * hash support for an algorithm
+ *
+ * The function returns the pointer to the struct or -EPROTONOSUPPORT if the
+ * algorithm is not available with progressive hash support.
+ *
+ * @algo_name: Hash algorithm to look up
+ * @algop: Pointer to the hash_algo struct if found
+ *
+ * @return 0 if ok, -EPROTONOSUPPORT for an unknown algorithm.
+ */
+int hash_progressive_lookup_algo(const char *algo_name,
+ struct hash_algo **algop);
+
+/**
* hash_show() - Print out a hash algorithm and value
*
* You will get a message like this (without a newline at the end):
--
1.8.1.4
More information about the U-Boot
mailing list