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 <common.h>
13#include <command.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
23static 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 < (HARGS - 1))
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
47U_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