xref: /openbmc/u-boot/tools/fit_check_sign.c (revision a9468115)
129a23f9dSHeiko Schocher /*
229a23f9dSHeiko Schocher  * (C) Copyright 2014
329a23f9dSHeiko Schocher  * DENX Software Engineering
429a23f9dSHeiko Schocher  * Heiko Schocher <hs@denx.de>
529a23f9dSHeiko Schocher  *
629a23f9dSHeiko Schocher  * Based on:
729a23f9dSHeiko Schocher  * (C) Copyright 2008 Semihalf
829a23f9dSHeiko Schocher  *
929a23f9dSHeiko Schocher  * (C) Copyright 2000-2004
1029a23f9dSHeiko Schocher  * DENX Software Engineering
1129a23f9dSHeiko Schocher  * Wolfgang Denk, wd@denx.de
1229a23f9dSHeiko Schocher  *
1329a23f9dSHeiko Schocher  * Updated-by: Prafulla Wadaskar <prafulla@marvell.com>
1429a23f9dSHeiko Schocher  *		FIT image specific code abstracted from mkimage.c
1529a23f9dSHeiko Schocher  *		some functions added to address abstraction
1629a23f9dSHeiko Schocher  *
1729a23f9dSHeiko Schocher  * All rights reserved.
1829a23f9dSHeiko Schocher  *
1929a23f9dSHeiko Schocher  * SPDX-License-Identifier:	GPL-2.0+
2029a23f9dSHeiko Schocher  */
2129a23f9dSHeiko Schocher 
2229a23f9dSHeiko Schocher #include "mkimage.h"
2329a23f9dSHeiko Schocher #include "fit_common.h"
2429a23f9dSHeiko Schocher #include <image.h>
2529a23f9dSHeiko Schocher #include <u-boot/crc.h>
2629a23f9dSHeiko Schocher 
2729a23f9dSHeiko Schocher void usage(char *cmdname)
2829a23f9dSHeiko Schocher {
2929a23f9dSHeiko Schocher 	fprintf(stderr, "Usage: %s -f fit file -k key file\n"
3029a23f9dSHeiko Schocher 			 "          -f ==> set fit file which should be checked'\n"
3129a23f9dSHeiko Schocher 			 "          -k ==> set key file which contains the key'\n",
3229a23f9dSHeiko Schocher 		cmdname);
3329a23f9dSHeiko Schocher 	exit(EXIT_FAILURE);
3429a23f9dSHeiko Schocher }
3529a23f9dSHeiko Schocher 
3629a23f9dSHeiko Schocher int main(int argc, char **argv)
3729a23f9dSHeiko Schocher {
3829a23f9dSHeiko Schocher 	int ffd = -1;
3929a23f9dSHeiko Schocher 	int kfd = -1;
4029a23f9dSHeiko Schocher 	struct stat fsbuf;
4129a23f9dSHeiko Schocher 	struct stat ksbuf;
4229a23f9dSHeiko Schocher 	void *fit_blob;
4329a23f9dSHeiko Schocher 	char *fdtfile = NULL;
4429a23f9dSHeiko Schocher 	char *keyfile = NULL;
4564375014SMichael van der Westhuizen 	char cmdname[256];
4629a23f9dSHeiko Schocher 	int ret;
4729a23f9dSHeiko Schocher 	void *key_blob;
4829a23f9dSHeiko Schocher 	int c;
4929a23f9dSHeiko Schocher 
5064375014SMichael van der Westhuizen 	strncpy(cmdname, *argv, sizeof(cmdname) - 1);
5164375014SMichael van der Westhuizen 	cmdname[sizeof(cmdname) - 1] = '\0';
5229a23f9dSHeiko Schocher 	while ((c = getopt(argc, argv, "f:k:")) != -1)
5329a23f9dSHeiko Schocher 		switch (c) {
5429a23f9dSHeiko Schocher 		case 'f':
5529a23f9dSHeiko Schocher 			fdtfile = optarg;
5629a23f9dSHeiko Schocher 			break;
5729a23f9dSHeiko Schocher 		case 'k':
5829a23f9dSHeiko Schocher 			keyfile = optarg;
5929a23f9dSHeiko Schocher 			break;
6029a23f9dSHeiko Schocher 		default:
6129a23f9dSHeiko Schocher 			usage(cmdname);
6229a23f9dSHeiko Schocher 			break;
6329a23f9dSHeiko Schocher 	}
6429a23f9dSHeiko Schocher 
65*a9468115SSimon Glass 	ffd = mmap_fdt(cmdname, fdtfile, 0, &fit_blob, &fsbuf, false);
6629a23f9dSHeiko Schocher 	if (ffd < 0)
6729a23f9dSHeiko Schocher 		return EXIT_FAILURE;
68*a9468115SSimon Glass 	kfd = mmap_fdt(cmdname, keyfile, 0, &key_blob, &ksbuf, false);
6929a23f9dSHeiko Schocher 	if (ffd < 0)
7029a23f9dSHeiko Schocher 		return EXIT_FAILURE;
7129a23f9dSHeiko Schocher 
7229a23f9dSHeiko Schocher 	image_set_host_blob(key_blob);
7329a23f9dSHeiko Schocher 	ret = fit_check_sign(fit_blob, key_blob);
7429a23f9dSHeiko Schocher 
7529a23f9dSHeiko Schocher 	if (ret)
7629a23f9dSHeiko Schocher 		ret = EXIT_SUCCESS;
7729a23f9dSHeiko Schocher 	else
7829a23f9dSHeiko Schocher 		ret = EXIT_FAILURE;
7929a23f9dSHeiko Schocher 
8029a23f9dSHeiko Schocher 	(void) munmap((void *)fit_blob, fsbuf.st_size);
8129a23f9dSHeiko Schocher 	(void) munmap((void *)key_blob, ksbuf.st_size);
8229a23f9dSHeiko Schocher 
8329a23f9dSHeiko Schocher 	close(ffd);
8429a23f9dSHeiko Schocher 	close(kfd);
8529a23f9dSHeiko Schocher 	exit(ret);
8629a23f9dSHeiko Schocher }
87