"Das U-Boot" Source Tree
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

cmd: md5sum: use hash_command

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@gmail.com>

authored by

Igor Opaniuk and committed by
Tom Rini
6ec3f920 606867c8

+16 -143
+1
cmd/Kconfig
··· 826 826 config CMD_MD5SUM 827 827 bool "md5sum" 828 828 select MD5 829 + select HASH 829 830 help 830 831 Compute MD5 checksum. 831 832
+10 -140
cmd/md5sum.c
··· 7 7 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 8 8 */ 9 9 10 - #include <common.h> 11 10 #include <command.h> 12 11 #include <env.h> 13 12 #include <image.h> 13 + #include <hash.h> 14 14 #include <mapmem.h> 15 15 #include <u-boot/md5.h> 16 16 #include <asm/io.h> 17 17 18 - /* 19 - * Store the resulting sum to an address or variable 20 - */ 21 - static void store_result(const u8 *sum, const char *dest) 22 - { 23 - unsigned int i; 24 - 25 - if (*dest == '*') { 26 - u8 *ptr; 27 - 28 - ptr = (u8 *)hextoul(dest + 1, NULL); 29 - for (i = 0; i < 16; i++) 30 - *ptr++ = sum[i]; 31 - } else { 32 - char str_output[33]; 33 - char *str_ptr = str_output; 34 - 35 - for (i = 0; i < 16; i++) { 36 - sprintf(str_ptr, "%02x", sum[i]); 37 - str_ptr += 2; 38 - } 39 - env_set(dest, str_output); 40 - } 41 - } 42 - 43 - #ifdef CONFIG_MD5SUM_VERIFY 44 - static int parse_verify_sum(char *verify_str, u8 *vsum) 18 + static int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc, 19 + char *const argv[]) 45 20 { 46 - if (*verify_str == '*') { 47 - u8 *ptr; 48 - 49 - ptr = (u8 *)hextoul(verify_str + 1, NULL); 50 - memcpy(vsum, ptr, 16); 51 - } else { 52 - unsigned int i; 53 - char *vsum_str; 54 - 55 - if (strlen(verify_str) == 32) 56 - vsum_str = verify_str; 57 - else { 58 - vsum_str = env_get(verify_str); 59 - if (vsum_str == NULL || strlen(vsum_str) != 32) 60 - return 1; 61 - } 62 - 63 - for (i = 0; i < 16; i++) { 64 - char *nullp = vsum_str + (i + 1) * 2; 65 - char end = *nullp; 66 - 67 - *nullp = '\0'; 68 - *(u8 *)(vsum + i) = 69 - hextoul(vsum_str + (i * 2), NULL); 70 - *nullp = end; 71 - } 72 - } 73 - return 0; 74 - } 75 - 76 - int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) 77 - { 78 - ulong addr, len; 79 - unsigned int i; 80 - u8 output[16]; 81 - u8 vsum[16]; 82 - int verify = 0; 21 + int flags = HASH_FLAG_ENV; 83 22 int ac; 84 - char * const *av; 85 - void *buf; 23 + char *const *av; 86 24 87 25 if (argc < 3) 88 26 return CMD_RET_USAGE; 89 27 90 28 av = argv + 1; 91 29 ac = argc - 1; 92 - if (strcmp(*av, "-v") == 0) { 93 - verify = 1; 30 + if (IS_ENABLED(CONFIG_MD5SUM_VERIFY) && strcmp(*av, "-v") == 0) { 31 + flags |= HASH_FLAG_VERIFY; 94 32 av++; 95 33 ac--; 96 - if (ac < 3) 97 - return CMD_RET_USAGE; 98 34 } 99 35 100 - addr = hextoul(*av++, NULL); 101 - len = hextoul(*av++, NULL); 102 - 103 - buf = map_sysmem(addr, len); 104 - md5_wd(buf, len, output, CHUNKSZ_MD5); 105 - unmap_sysmem(buf); 106 - 107 - if (!verify) { 108 - printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1); 109 - for (i = 0; i < 16; i++) 110 - printf("%02x", output[i]); 111 - printf("\n"); 112 - 113 - if (ac > 2) 114 - store_result(output, *av); 115 - } else { 116 - char *verify_str = *av++; 117 - 118 - if (parse_verify_sum(verify_str, vsum)) { 119 - printf("ERROR: %s does not contain a valid md5 sum\n", 120 - verify_str); 121 - return 1; 122 - } 123 - if (memcmp(output, vsum, 16) != 0) { 124 - printf("md5 for %08lx ... %08lx ==> ", addr, 125 - addr + len - 1); 126 - for (i = 0; i < 16; i++) 127 - printf("%02x", output[i]); 128 - printf(" != "); 129 - for (i = 0; i < 16; i++) 130 - printf("%02x", vsum[i]); 131 - printf(" ** ERROR **\n"); 132 - return 1; 133 - } 134 - } 135 - 136 - return 0; 36 + return hash_command("md5", flags, cmdtp, flag, ac, av); 137 37 } 138 - #else 139 - static int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc, 140 - char *const argv[]) 141 - { 142 - unsigned long addr, len; 143 - unsigned int i; 144 - u8 output[16]; 145 - void *buf; 146 38 147 - if (argc < 3) 148 - return CMD_RET_USAGE; 149 - 150 - addr = hextoul(argv[1], NULL); 151 - len = hextoul(argv[2], NULL); 152 - 153 - buf = map_sysmem(addr, len); 154 - md5_wd(buf, len, output, CHUNKSZ_MD5); 155 - unmap_sysmem(buf); 156 - 157 - printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1); 158 - for (i = 0; i < 16; i++) 159 - printf("%02x", output[i]); 160 - printf("\n"); 161 - 162 - if (argc > 3) 163 - store_result(output, argv[3]); 164 - 165 - return 0; 166 - } 167 - #endif 168 - 169 - #ifdef CONFIG_MD5SUM_VERIFY 39 + #if IS_ENABLED(CONFIG_MD5SUM_VERIFY) 170 40 U_BOOT_CMD( 171 41 md5sum, 5, 1, do_md5sum, 172 42 "compute MD5 message digest", ··· 182 52 "address count [[*]sum]\n" 183 53 " - compute MD5 message digest [save to sum]" 184 54 ); 185 - #endif 55 + #endif /* IS_ENABLED(CONFIG_MD5SUM_VERIFY) */
+5 -3
common/hash.c
··· 321 321 /* Try to minimize code size for boards that don't want much hashing */ 322 322 #if CONFIG_IS_ENABLED(SHA256) || IS_ENABLED(CONFIG_CMD_SHA1SUM) || \ 323 323 CONFIG_IS_ENABLED(CRC32_VERIFY) || IS_ENABLED(CONFIG_CMD_HASH) || \ 324 - CONFIG_IS_ENABLED(SHA384) || CONFIG_IS_ENABLED(SHA512) 324 + CONFIG_IS_ENABLED(SHA384) || CONFIG_IS_ENABLED(SHA512) || \ 325 + IS_ENABLED(CONFIG_CMD_MD5SUM) 325 326 #define multi_hash() 1 326 327 #else 327 328 #define multi_hash() 0 ··· 404 405 } 405 406 406 407 #if !defined(CONFIG_SPL_BUILD) && (defined(CONFIG_CMD_HASH) || \ 407 - defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32)) 408 + defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32)) || \ 409 + defined(CONFIG_CMD_MD5SUM) 408 410 /** 409 411 * store_result: Store the resulting sum to an address or variable 410 412 * ··· 565 567 566 568 /* Try to avoid code bloat when verify is not needed */ 567 569 #if defined(CONFIG_CRC32_VERIFY) || defined(CONFIG_SHA1SUM_VERIFY) || \ 568 - defined(CONFIG_HASH_VERIFY) 570 + defined(CONFIG_MD5SUM_VERIFY) || defined(CONFIG_HASH_VERIFY) 569 571 if (flags & HASH_FLAG_VERIFY) { 570 572 #else 571 573 if (0) {