fit_check_sign.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2014
  4. * DENX Software Engineering
  5. * Heiko Schocher <hs@denx.de>
  6. *
  7. * Based on:
  8. * (C) Copyright 2008 Semihalf
  9. *
  10. * (C) Copyright 2000-2004
  11. * DENX Software Engineering
  12. * Wolfgang Denk, wd@denx.de
  13. *
  14. * Updated-by: Prafulla Wadaskar <prafulla@marvell.com>
  15. * FIT image specific code abstracted from mkimage.c
  16. * some functions added to address abstraction
  17. *
  18. * All rights reserved.
  19. */
  20. #include "mkimage.h"
  21. #include "fit_common.h"
  22. #include <image.h>
  23. #include <u-boot/crc.h>
  24. void usage(char *cmdname)
  25. {
  26. fprintf(stderr, "Usage: %s -f fit file -k key file\n"
  27. " -f ==> set fit file which should be checked'\n"
  28. " -k ==> set key file which contains the key'\n",
  29. cmdname);
  30. exit(EXIT_FAILURE);
  31. }
  32. int main(int argc, char **argv)
  33. {
  34. int ffd = -1;
  35. int kfd = -1;
  36. struct stat fsbuf;
  37. struct stat ksbuf;
  38. void *fit_blob;
  39. char *fdtfile = NULL;
  40. char *keyfile = NULL;
  41. char cmdname[256];
  42. int ret;
  43. void *key_blob;
  44. int c;
  45. strncpy(cmdname, *argv, sizeof(cmdname) - 1);
  46. cmdname[sizeof(cmdname) - 1] = '\0';
  47. while ((c = getopt(argc, argv, "f:k:")) != -1)
  48. switch (c) {
  49. case 'f':
  50. fdtfile = optarg;
  51. break;
  52. case 'k':
  53. keyfile = optarg;
  54. break;
  55. default:
  56. usage(cmdname);
  57. break;
  58. }
  59. if (!fdtfile) {
  60. fprintf(stderr, "%s: Missing fdt file\n", *argv);
  61. usage(*argv);
  62. }
  63. if (!keyfile) {
  64. fprintf(stderr, "%s: Missing key file\n", *argv);
  65. usage(*argv);
  66. }
  67. ffd = mmap_fdt(cmdname, fdtfile, 0, &fit_blob, &fsbuf, false, true);
  68. if (ffd < 0)
  69. return EXIT_FAILURE;
  70. kfd = mmap_fdt(cmdname, keyfile, 0, &key_blob, &ksbuf, false, true);
  71. if (kfd < 0)
  72. return EXIT_FAILURE;
  73. image_set_host_blob(key_blob);
  74. ret = fit_check_sign(fit_blob, key_blob);
  75. if (!ret) {
  76. ret = EXIT_SUCCESS;
  77. fprintf(stderr, "Signature check OK\n");
  78. } else {
  79. ret = EXIT_FAILURE;
  80. fprintf(stderr, "Signature check Bad (error %d)\n", ret);
  81. }
  82. (void) munmap((void *)fit_blob, fsbuf.st_size);
  83. (void) munmap((void *)key_blob, ksbuf.st_size);
  84. close(ffd);
  85. close(kfd);
  86. exit(ret);
  87. }