Blame view

cmd/md5sum.c 3.58 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
2
  /*
5ab177bed   Joe Hershberger   Implement verify ...
3
4
5
   * (C) Copyright 2011
   * Joe Hershberger, National Instruments, joe.hershberger@ni.com
   *
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
6
7
   * (C) Copyright 2000
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
8
9
10
11
   */
  
  #include <common.h>
  #include <command.h>
9fb625ce0   Simon Glass   env: Move env_set...
12
  #include <env.h>
0eb25b619   Joe Hershberger   common: Make sure...
13
  #include <mapmem.h>
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
14
  #include <u-boot/md5.h>
794449551   Suriyan Ramasami   sandbox: Use md5s...
15
  #include <asm/io.h>
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
16

ecd729500   Joe Hershberger   Add parameter to ...
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  /*
   * Store the resulting sum to an address or variable
   */
  static void store_result(const u8 *sum, const char *dest)
  {
  	unsigned int i;
  
  	if (*dest == '*') {
  		u8 *ptr;
  
  		ptr = (u8 *)simple_strtoul(dest + 1, NULL, 16);
  		for (i = 0; i < 16; i++)
  			*ptr++ = sum[i];
  	} else {
  		char str_output[33];
  		char *str_ptr = str_output;
  
  		for (i = 0; i < 16; i++) {
  			sprintf(str_ptr, "%02x", sum[i]);
  			str_ptr += 2;
  		}
382bee57f   Simon Glass   env: Rename seten...
38
  		env_set(dest, str_output);
ecd729500   Joe Hershberger   Add parameter to ...
39
40
  	}
  }
5ab177bed   Joe Hershberger   Implement verify ...
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  #ifdef CONFIG_MD5SUM_VERIFY
  static int parse_verify_sum(char *verify_str, u8 *vsum)
  {
  	if (*verify_str == '*') {
  		u8 *ptr;
  
  		ptr = (u8 *)simple_strtoul(verify_str + 1, NULL, 16);
  		memcpy(vsum, ptr, 16);
  	} else {
  		unsigned int i;
  		char *vsum_str;
  
  		if (strlen(verify_str) == 32)
  			vsum_str = verify_str;
  		else {
00caae6d4   Simon Glass   env: Rename geten...
56
  			vsum_str = env_get(verify_str);
5ab177bed   Joe Hershberger   Implement verify ...
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  			if (vsum_str == NULL || strlen(vsum_str) != 32)
  				return 1;
  		}
  
  		for (i = 0; i < 16; i++) {
  			char *nullp = vsum_str + (i + 1) * 2;
  			char end = *nullp;
  
  			*nullp = '\0';
  			*(u8 *)(vsum + i) =
  				simple_strtoul(vsum_str + (i * 2), NULL, 16);
  			*nullp = end;
  		}
  	}
  	return 0;
  }
  
  int do_md5sum(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  {
  	ulong addr, len;
  	unsigned int i;
  	u8 output[16];
  	u8 vsum[16];
  	int verify = 0;
  	int ac;
  	char * const *av;
794449551   Suriyan Ramasami   sandbox: Use md5s...
83
  	void *buf;
5ab177bed   Joe Hershberger   Implement verify ...
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  
  	if (argc < 3)
  		return CMD_RET_USAGE;
  
  	av = argv + 1;
  	ac = argc - 1;
  	if (strcmp(*av, "-v") == 0) {
  		verify = 1;
  		av++;
  		ac--;
  		if (ac < 3)
  			return CMD_RET_USAGE;
  	}
  
  	addr = simple_strtoul(*av++, NULL, 16);
  	len = simple_strtoul(*av++, NULL, 16);
794449551   Suriyan Ramasami   sandbox: Use md5s...
100
101
102
  	buf = map_sysmem(addr, len);
  	md5_wd(buf, len, output, CHUNKSZ_MD5);
  	unmap_sysmem(buf);
5ab177bed   Joe Hershberger   Implement verify ...
103
104
105
106
107
108
109
  
  	if (!verify) {
  		printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1);
  		for (i = 0; i < 16; i++)
  			printf("%02x", output[i]);
  		printf("
  ");
ecd729500   Joe Hershberger   Add parameter to ...
110
111
112
  
  		if (ac > 2)
  			store_result(output, *av);
5ab177bed   Joe Hershberger   Implement verify ...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
  	} else {
  		char *verify_str = *av++;
  
  		if (parse_verify_sum(verify_str, vsum)) {
  			printf("ERROR: %s does not contain a valid md5 sum
  ",
  				verify_str);
  			return 1;
  		}
  		if (memcmp(output, vsum, 16) != 0) {
  			printf("md5 for %08lx ... %08lx ==> ", addr,
  				addr + len - 1);
  			for (i = 0; i < 16; i++)
  				printf("%02x", output[i]);
  			printf(" != ");
  			for (i = 0; i < 16; i++)
  				printf("%02x", vsum[i]);
  			printf(" ** ERROR **
  ");
  			return 1;
  		}
  	}
  
  	return 0;
  }
  #else
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
139
140
141
142
143
  static int do_md5sum(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  {
  	unsigned long addr, len;
  	unsigned int i;
  	u8 output[16];
794449551   Suriyan Ramasami   sandbox: Use md5s...
144
  	void *buf;
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
145
146
  
  	if (argc < 3)
4c12eeb8b   Simon Glass   Convert cmd_usage...
147
  		return CMD_RET_USAGE;
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
148
149
150
  
  	addr = simple_strtoul(argv[1], NULL, 16);
  	len = simple_strtoul(argv[2], NULL, 16);
794449551   Suriyan Ramasami   sandbox: Use md5s...
151
152
153
  	buf = map_sysmem(addr, len);
  	md5_wd(buf, len, output, CHUNKSZ_MD5);
  	unmap_sysmem(buf);
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
154
155
156
157
158
  	printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1);
  	for (i = 0; i < 16; i++)
  		printf("%02x", output[i]);
  	printf("
  ");
ecd729500   Joe Hershberger   Add parameter to ...
159
160
  	if (argc > 3)
  		store_result(output, argv[3]);
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
161
162
  	return 0;
  }
5ab177bed   Joe Hershberger   Implement verify ...
163
  #endif
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
164

5ab177bed   Joe Hershberger   Implement verify ...
165
166
167
168
  #ifdef CONFIG_MD5SUM_VERIFY
  U_BOOT_CMD(
  	md5sum,	5,	1,	do_md5sum,
  	"compute MD5 message digest",
ecd729500   Joe Hershberger   Add parameter to ...
169
170
171
172
  	"address count [[*]sum]
  "
  		"    - compute MD5 message digest [save to sum]
  "
5ab177bed   Joe Hershberger   Implement verify ...
173
174
175
176
177
  	"md5sum -v address count [*]sum
  "
  		"    - verify md5sum of memory area"
  );
  #else
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
178
  U_BOOT_CMD(
ecd729500   Joe Hershberger   Add parameter to ...
179
  	md5sum,	4,	1,	do_md5sum,
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
180
  	"compute MD5 message digest",
ecd729500   Joe Hershberger   Add parameter to ...
181
182
183
  	"address count [[*]sum]
  "
  		"    - compute MD5 message digest [save to sum]"
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
184
  );
5ab177bed   Joe Hershberger   Implement verify ...
185
  #endif