1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (c) 2012 The Chromium OS Authors.
4  *
5  * (C) Copyright 2011
6  * Joe Hershberger, National Instruments, joe.hershberger@ni.com
7  *
8  * (C) Copyright 2000
9  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
10  */
11 
12 #include <command.h>
13 #include <env.h>
14 #include <hash.h>
15 #include <linux/ctype.h>
16 
17 #if IS_ENABLED(CONFIG_HASH_VERIFY)
18 #define HARGS 6
19 #else
20 #define HARGS 5
21 #endif
22 
do_hash(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])23 static int do_hash(struct cmd_tbl *cmdtp, int flag, int argc,
24 		   char *const argv[])
25 {
26 	char *s;
27 	int flags = HASH_FLAG_ENV;
28 
29 	if (argc < 4)
30 		return CMD_RET_USAGE;
31 
32 #if IS_ENABLED(CONFIG_HASH_VERIFY)
33 	if (!strcmp(argv[1], "-v")) {
34 		flags |= HASH_FLAG_VERIFY;
35 		argc--;
36 		argv++;
37 	}
38 #endif
39 	/* Move forward to 'algorithm' parameter */
40 	argc--;
41 	argv++;
42 	for (s = *argv; *s; s++)
43 		*s = tolower(*s);
44 	return hash_command(*argv, flags, cmdtp, flag, argc - 1, argv + 1);
45 }
46 
47 U_BOOT_CMD(
48 	hash,	HARGS,	1,	do_hash,
49 	"compute hash message digest",
50 	"algorithm address count [[*]hash_dest]\n"
51 		"    - compute message digest [save to env var / *address]"
52 #if IS_ENABLED(CONFIG_HASH_VERIFY)
53 	"\nhash -v algorithm address count [*]hash\n"
54 		"    - verify message digest of memory area to immediate value, \n"
55 		"      env var or *address"
56 #endif
57 );
58