[PATCH v1] cmd: md5sum: use hash_command
Igor Opaniuk
igor.opaniuk at gmail.com
Thu Feb 29 20:14:08 CET 2024
Hello Tom,
On Sun, Feb 11, 2024 at 7:56 PM Igor Opaniuk <igor.opaniuk at foundries.io>
wrote:
> From: Igor Opaniuk <igor.opaniuk at gmail.com>
>
> Drop old implementation and use hash_command() instead, as
> how it's currently done for crc32 and sha1sum cmds.
>
> Test:
> => md5sum 0x60000000 0x200
> md5 for 60000000 ... 600001ff ==> e6bbbe95f5b41996f4a9b9af7bbd4050
>
> Signed-off-by: Igor Opaniuk <igor.opaniuk at gmail.com>
> ---
>
> cmd/md5sum.c | 149 ++++-----------------------------------------------
> 1 file changed, 9 insertions(+), 140 deletions(-)
>
> diff --git a/cmd/md5sum.c b/cmd/md5sum.c
> index 0f0e1d3dd68..618265e8d50 100644
> --- a/cmd/md5sum.c
> +++ b/cmd/md5sum.c
> @@ -7,7 +7,6 @@
> * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> */
>
> -#include <common.h>
> #include <command.h>
> #include <env.h>
> #include <image.h>
> @@ -15,158 +14,28 @@
> #include <u-boot/md5.h>
> #include <asm/io.h>
>
> -/*
> - * 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 *)hextoul(dest + 1, NULL);
> - 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;
> - }
> - env_set(dest, str_output);
> - }
> -}
> -
> -#ifdef CONFIG_MD5SUM_VERIFY
> -static int parse_verify_sum(char *verify_str, u8 *vsum)
> -{
> - if (*verify_str == '*') {
> - u8 *ptr;
> -
> - ptr = (u8 *)hextoul(verify_str + 1, NULL);
> - memcpy(vsum, ptr, 16);
> - } else {
> - unsigned int i;
> - char *vsum_str;
> -
> - if (strlen(verify_str) == 32)
> - vsum_str = verify_str;
> - else {
> - vsum_str = env_get(verify_str);
> - 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) =
> - hextoul(vsum_str + (i * 2), NULL);
> - *nullp = end;
> - }
> - }
> - return 0;
> -}
> -
> -int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc, char *const
> argv[])
> +static int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc,
> + char *const argv[])
> {
> - ulong addr, len;
> - unsigned int i;
> - u8 output[16];
> - u8 vsum[16];
> - int verify = 0;
> + int flags = HASH_FLAG_ENV;
> int ac;
> - char * const *av;
> - void *buf;
> + char *const *av;
>
> if (argc < 3)
> return CMD_RET_USAGE;
>
> av = argv + 1;
> ac = argc - 1;
> - if (strcmp(*av, "-v") == 0) {
> - verify = 1;
> + if (IS_ENABLED(CONFIG_MD5SUM_VERIFY) && strcmp(*av, "-v") == 0) {
> + flags |= HASH_FLAG_VERIFY;
> av++;
> ac--;
> - if (ac < 3)
> - return CMD_RET_USAGE;
> }
>
> - addr = hextoul(*av++, NULL);
> - len = hextoul(*av++, NULL);
> -
> - buf = map_sysmem(addr, len);
> - md5_wd(buf, len, output, CHUNKSZ_MD5);
> - unmap_sysmem(buf);
> -
> - if (!verify) {
> - printf("md5 for %08lx ... %08lx ==> ", addr, addr + len -
> 1);
> - for (i = 0; i < 16; i++)
> - printf("%02x", output[i]);
> - printf("\n");
> -
> - if (ac > 2)
> - store_result(output, *av);
> - } else {
> - char *verify_str = *av++;
> -
> - if (parse_verify_sum(verify_str, vsum)) {
> - printf("ERROR: %s does not contain a valid md5
> sum\n",
> - 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 **\n");
> - return 1;
> - }
> - }
> -
> - return 0;
> -}
> -#else
> -static int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc,
> - char *const argv[])
> -{
> - unsigned long addr, len;
> - unsigned int i;
> - u8 output[16];
> - void *buf;
> -
> - if (argc < 3)
> - return CMD_RET_USAGE;
> -
> - addr = hextoul(argv[1], NULL);
> - len = hextoul(argv[2], NULL);
> -
> - buf = map_sysmem(addr, len);
> - md5_wd(buf, len, output, CHUNKSZ_MD5);
> - unmap_sysmem(buf);
> -
> - printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1);
> - for (i = 0; i < 16; i++)
> - printf("%02x", output[i]);
> - printf("\n");
> -
> - if (argc > 3)
> - store_result(output, argv[3]);
> -
> - return 0;
> + return hash_command("md5", flags, cmdtp, flag, ac, av);
> }
> -#endif
>
> -#ifdef CONFIG_MD5SUM_VERIFY
> +#if IS_ENABLED(CONFIG_MD5SUM_VERIFY)
> U_BOOT_CMD(
> md5sum, 5, 1, do_md5sum,
> "compute MD5 message digest",
> @@ -182,4 +51,4 @@ U_BOOT_CMD(
> "address count [[*]sum]\n"
> " - compute MD5 message digest [save to sum]"
> );
> -#endif
> +#endif /* IS_ENABLED(CONFIG_MD5SUM_VERIFY) */
> --
> 2.34.1
>
>
Are there currently any objections that can prevent these cosmetic
cleanup from being applied? If there are any - just let me know, thanks
--
Best regards - Atentamente - Meilleures salutations
Igor Opaniuk
mailto: igor.opaniuk at gmail.com
skype: igor.opanyuk
http://ua.linkedin.com/in/iopaniuk
More information about the U-Boot
mailing list