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