Patchwork [U-Boot,v3,22/22] hash: Use lower case for hash algorithm names

login
register
mail settings
Submitter Simon Glass
Date Feb. 25, 2013, 3:33 a.m.
Message ID <1361763213-31183-23-git-send-email-sjg@chromium.org>
Download mbox | patch
Permalink /patch/222840/
State Accepted, archived
Delegated to: Tom Rini
Headers show

Comments

Simon Glass - Feb. 25, 2013, 3:33 a.m.
Rather than use strcasecmp() in the hash algorithm search, require the
caller to do this first. Most of U-Boot can use lower case anyway, and
the hash command can convert to lower case before calling hash_command().
This saves needing strcasecmp() for boards that use hashing but not
the hash command.

Signed-off-by: Simon Glass <sjg@chromium.org>
---
Changes in v3: None
Changes in v2: None

 common/cmd_hash.c |  4 ++++
 common/hash.c     | 11 ++++++-----
 include/hash.h    |  2 +-
 3 files changed, 11 insertions(+), 6 deletions(-)

Patch

diff --git a/common/cmd_hash.c b/common/cmd_hash.c
index 8c03b5c..4fe0e78 100644
--- a/common/cmd_hash.c
+++ b/common/cmd_hash.c
@@ -26,9 +26,11 @@ 
 #include <common.h>
 #include <command.h>
 #include <hash.h>
+#include <linux/ctype.h>
 
 static int do_hash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+	char *s;
 #ifdef CONFIG_HASH_VERIFY
 	int flags = HASH_FLAG_ENV;
 
@@ -45,6 +47,8 @@  static int do_hash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	/* Move forward to 'algorithm' parameter */
 	argc--;
 	argv++;
+	for (s = *argv; *s; s++)
+		*s = tolower(*s);
 	return hash_command(*argv, flags, cmdtp, flag, argc - 1, argv + 1);
 }
 
diff --git a/common/hash.c b/common/hash.c
index d6f4aa1..dc15596 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -32,7 +32,8 @@ 
 
 /*
  * These are the hash algorithms we support. Chips which support accelerated
- * crypto could perhaps add named version of these algorithms here.
+ * crypto could perhaps add named version of these algorithms here. Note that
+ * algorithm names must be in lower case.
  */
 static struct hash_algo hash_algo[] = {
 	/*
@@ -42,7 +43,7 @@  static struct hash_algo hash_algo[] = {
 	 */
 #ifdef CONFIG_CMD_SHA1
 	{
-		"SHA1",
+		"sha1",
 		SHA1_SUM_LEN,
 		sha1_csum_wd,
 		CHUNKSZ_SHA1,
@@ -51,7 +52,7 @@  static struct hash_algo hash_algo[] = {
 #endif
 #ifdef CONFIG_SHA256
 	{
-		"SHA256",
+		"sha256",
 		SHA256_SUM_LEN,
 		sha256_csum_wd,
 		CHUNKSZ_SHA256,
@@ -59,7 +60,7 @@  static struct hash_algo hash_algo[] = {
 #define MULTI_HASH
 #endif
 	{
-		"CRC32",
+		"crc32",
 		4,
 		crc32_wd_buf,
 		CHUNKSZ_CRC32,
@@ -202,7 +203,7 @@  static struct hash_algo *find_hash_algo(const char *name)
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
-		if (!strcasecmp(name, hash_algo[i].name))
+		if (!strcmp(name, hash_algo[i].name))
 			return &hash_algo[i];
 	}
 
diff --git a/include/hash.h b/include/hash.h
index f2b2c45..2dbbd9b 100644
--- a/include/hash.h
+++ b/include/hash.h
@@ -61,7 +61,7 @@  enum {
  *
  * This common function is used to implement specific hash commands.
  *
- * @algo_name:		Hash algorithm being used
+ * @algo_name:		Hash algorithm being used (lower case!)
  * @flags:		Flags value (HASH_FLAG_...)
  * @cmdtp:		Pointer to command table entry
  * @flag:		Some flags normally 0 (see CMD_FLAG_.. above)