summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorRuchika Gupta <ruchika.gupta@freescale.com>2015-01-23 16:01:57 +0530
committerSimon Glass <sjg@chromium.org>2015-01-29 17:09:59 -0700
commit46fe2c04443f3d777791910da21649bb3ddf878f (patch)
tree4713a5df7c7a962f5535f7f01ef76b767bf8221a /common
parentd9f23c7fe20fced0a84713d5084a6d2896463257 (diff)
downloadblackbird-obmc-uboot-46fe2c04443f3d777791910da21649bb3ddf878f.tar.gz
blackbird-obmc-uboot-46fe2c04443f3d777791910da21649bb3ddf878f.zip
hash: Add function to find hash_algo struct with progressive hash
The hash_algo structure has some implementations in which progressive hash API's are not defined. These are basically the hardware based implementations of SHA. An API is added to find the algo which has progressive hash API's defined. This can then be integrated with RSA checksum library which uses Progressive Hash API's. Signed-off-by: Ruchika Gupta <ruchika.gupta@freescale.com> CC: Simon Glass <sjg@chromium.org> Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r--common/hash.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/common/hash.c b/common/hash.c
index aceabc5cad..c4d8c3a041 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_SHA1
static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
{
sha1_context *ctx = malloc(sizeof(sha1_context));
@@ -125,12 +125,7 @@ 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 +135,6 @@ static struct hash_algo hash_algo[] = {
hash_update_sha1,
hash_finish_sha1,
},
-#define MULTI_HASH
#endif
#ifdef CONFIG_SHA256
{
@@ -152,7 +146,6 @@ static struct hash_algo hash_algo[] = {
hash_update_sha256,
hash_finish_sha256,
},
-#define MULTI_HASH
#endif
{
"crc32",
@@ -165,6 +158,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 +308,24 @@ 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;
OpenPOWER on IntegriCloud