Skip to content
Snippets Groups Projects
Commit 30d1aedc authored by Jonas Höglund's avatar Jonas Höglund
Browse files

Get hash of image.

parent b5bb0eb2
Branches
Tags
No related merge requests found
...@@ -40,20 +40,23 @@ ...@@ -40,20 +40,23 @@
#define FDT_MAGIC_SIZE 4 #define FDT_MAGIC_SIZE 4
#define MAX_VERSION 17 #define MAX_VERSION 17
#define MAX_PATH_LEN 100 #define MAX_PATH_LEN 100
#define SHA_256_LEN 32
/* Usage related data. */ /* Usage related data. */
static const char usage_synopsis[] = "fdtextract [options] <file>"; static const char usage_synopsis[] = "fdtextract [options] <file>";
static const char usage_short_opts[] = "le:o:" USAGE_COMMON_SHORT_OPTS; static const char usage_short_opts[] = "le:o:s:" USAGE_COMMON_SHORT_OPTS;
static struct option const usage_long_opts[] = { static struct option const usage_long_opts[] = {
{"list", no_argument, NULL, 'l'}, {"list", no_argument, NULL, 'l'},
{"extract", a_argument, NULL, 'e'}, {"extract", a_argument, NULL, 'e'},
{"out", a_argument, NULL, 'o'}, {"out", a_argument, NULL, 'o'},
{"hash", a_argument, NULL, 's'},
USAGE_COMMON_LONG_OPTS USAGE_COMMON_LONG_OPTS
}; };
static const char * const usage_opts_help[] = { static const char * const usage_opts_help[] = {
"List images embedded in FIT", "List images embedded in FIT",
"Extract image from FIT", "Extract image from FIT",
"Output image name", "Output image name",
"Hash of image",
USAGE_COMMON_OPTS_HELP USAGE_COMMON_OPTS_HELP
}; };
...@@ -142,13 +145,31 @@ static int extract_image(char *buf, char *name, char *out) ...@@ -142,13 +145,31 @@ static int extract_image(char *buf, char *name, char *out)
return 0; return 0;
} }
static int get_hash(char *buf, char *name)
{
char path[MAX_PATH_LEN];
int noffset, i;
uint8_t *val;
snprintf(path, MAX_PATH_LEN, "/images/%s/hash-1", name);
noffset = fdt_path_offset(buf, path);
if (noffset < 0) {
printf("Error: could not find image hash: %s.\n", name);
return -1;
}
val = (uint8_t *)fdt_getprop(buf, noffset, "value", NULL);
for (i=0; i<SHA_256_LEN; i++)
printf("%x", val[i]);
printf("\n");
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
const char *file; const char *file;
int opt; int opt;
char *buf, *name = NULL, *out = NULL; char *buf, *name = NULL, *out = NULL;
bool list = false; bool list = false, extract = false, hash = false;
bool extract = false;
size_t len; size_t len;
while ((opt = util_getopt_long()) != EOF) { while ((opt = util_getopt_long()) != EOF) {
...@@ -165,6 +186,10 @@ int main(int argc, char *argv[]) ...@@ -165,6 +186,10 @@ int main(int argc, char *argv[])
case 'o': case 'o':
out = optarg; out = optarg;
break; break;
case 's':
hash = true;
name = optarg;
break;
} }
} }
if (optind != argc - 1) if (optind != argc - 1)
...@@ -186,5 +211,8 @@ int main(int argc, char *argv[]) ...@@ -186,5 +211,8 @@ int main(int argc, char *argv[])
if (extract) if (extract)
extract_image(buf, name, out); extract_image(buf, name, out);
if (hash)
get_hash(buf, name);
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment