Hello Tom, On Sun, Feb 11, 2024 at 7:56 PM Igor Opaniuk <igor.opan...@foundries.io> wrote:
> From: Igor Opaniuk <igor.opan...@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.opan...@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, w...@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.opan...@gmail.com skype: igor.opanyuk http://ua.linkedin.com/in/iopaniuk