aboutsummaryrefslogtreecommitdiff
path: root/util/broadcom/secimage/sbi.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/broadcom/secimage/sbi.c')
-rw-r--r--util/broadcom/secimage/sbi.c197
1 files changed, 0 insertions, 197 deletions
diff --git a/util/broadcom/secimage/sbi.c b/util/broadcom/secimage/sbi.c
deleted file mode 100644
index f156ed5946..0000000000
--- a/util/broadcom/secimage/sbi.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2015 Broadcom Corporation
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <zlib.h>
-#include "secimage.h"
-
-#define MIN_SIZE (1024*120)
-
-/*----------------------------------------------------------------------
- * Name : SBIUsage
- * Purpose :
- * Input : none
- * Output : none
- *---------------------------------------------------------------------*/
-int SBIUsage(void)
-{
- printf("\nTo create a Secure Boot Image:\n");
- printf("secimage: -out <output binary> [-hmac hmac_binary_key] <-config configfile>");
- printf("\n\t\t[-bl input binary]\n");
- return 0;
-}
-
-/*----------------------------------------------------------------------
- * Name : AddImagePayload
- * Purpose :
- * Input : none
- * Output : none
- *---------------------------------------------------------------------*/
-int AddImagePayload(char *h, char *filename, unsigned int filesize)
-{
- uint32_t totalLen;
- int length = filesize;
- int padlen = 0;
- int status = 0;
-
- totalLen = 0x40;
-
- status = DataRead(filename, (uint8_t *)h + totalLen, &length);
- printf("\r\n Adding file %s ... \r\n", filename);
- if (!status) {
- if (length & 15) {
- padlen = 16 - (length & 15);
- memset((uint8_t *)h + totalLen + length, 0, padlen);
- length += padlen;
- }
-
- *(uint32_t *)&h[FIELD5_OFFSET] = length;
- *(uint32_t *)&h[FIELD6_OFFSET] += length;
-
- } else
- printf("Error reading image Payload from %s\n", filename);
-
- return status;
-}
-
-/*----------------------------------------------------------------------
- * Name : CreateSecureBootImage
- * Purpose :
- * Input : none
- * Output : none
- *---------------------------------------------------------------------*/
-int CreateSecureBootImage(int ac, char **av)
-{
- char *configfile = NULL, *arg, *privkey = NULL, *bl = NULL;
- int status = 0;
- uint32_t sbiLen;
- struct stat file_stat;
- uint32_t add_header = 1;
- char *outfile = *av;
- unsigned int filesize;
- char *buf;
- --ac; ++av;
-
- if (ac <= 0)
- return SBIUsage();
-
- while (ac) {
- arg = *av;
- if (!strcmp(arg, "-bl")) {
- --ac, ++av;
- bl = *av;
- } else if (!strcmp(arg, "-hmac")) {
- --ac, ++av;
- privkey = *av;
- } else if (!strcmp(arg, "-config")) {
- --ac, ++av;
- configfile = *av;
- } else if (!strcmp(arg, "-noheader")) {
- add_header = 0;
- } else {
- return SBIUsage();
- }
- --ac, ++av;
- }
-
- if (!bl) {
- puts("-bl not set");
- return -1;
- }
-
- if (!privkey) {
- puts("-hmac not set");
- return -1;
- }
-
- if (stat(bl, &file_stat) == -1) {
- puts("Can't stat bl");
- return -1;
- }
- filesize = file_stat.st_size + MIN_SIZE;
- buf = calloc(sizeof(uint8_t), filesize);
-
- if (buf == NULL) {
- puts("Memory allocation error");
- status = -1;
- goto done;
- }
-
- *(uint32_t *)&buf[FIELD6_OFFSET] = 0x40;
- *(uint32_t *)&buf[FIELD9_OFFSET] = 0x45F2D99A;
- *(uint32_t *)&buf[FIELD3_OFFSET] = 0x900FFFFF;
- *(uint16_t *)&buf[FIELD1_OFFSET] = 0x40;
- *(uint32_t *)&buf[FIELD4_OFFSET] = 0x40;
- *(uint16_t *)&buf[FIELD2_OFFSET] = 0x10;
- *(uint16_t *)&buf[FIELD8_OFFSET] = 0x20;
- *(uint16_t *)&buf[FIELD7_OFFSET] = 0x10;
-
- if (status == 0) {
-
- if (configfile)
- FillHeaderFromConfigFile(buf, configfile);
-
- status = AddImagePayload(buf, bl, filesize);
- if (status) {
- status = -1;
- goto done;
- }
-
- sbiLen = *(uint32_t *)&buf[FIELD6_OFFSET];
-
- printf("HMAC signing %d bytes\n", sbiLen);
- status = AppendHMACSignature((uint8_t *)buf, sbiLen, privkey,
- add_header ? 0x10 : 0x40);
- if (status > 0) {
- sbiLen += status;
- status = 0;
- }
-
- if (!status) {
- ((HEADER *)buf)->Length = sbiLen;
- ((HEADER *)buf)->crc = crc32(0xFFFFFFFF,
- (uint8_t *)buf, 12);
-
- printf("Generating Image file %s: %d bytes\n",
- outfile, sbiLen);
- if (!add_header)
- status = DataWrite(outfile, &buf[0x40],
- sbiLen - 0x40);
- else
- status = DataWrite(outfile, buf, sbiLen);
- }
- }
- if (status < 0)
- printf("Generation error %d\n", status);
-
-done:
- free(buf);
- return status;
-}
-
-int main(int argc, char **argv)
-{
- argc--;
- argv++;
- if (argc > 0) {
- if (!strcmp(*argv, "-out"))
- return CreateSecureBootImage(--argc, ++argv);
- }
- SBIUsage();
- return 0;
-}