[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