Add signature support
authorKetut Putu Kumajaya <ketut.kumajaya@gmail.com>
Mon, 23 Jun 2014 13:18:46 +0000 (20:18 +0700)
committerBrandon McAnsh <brandon.mcansh@gmail.com>
Sun, 8 Jan 2017 05:20:45 +0000 (00:20 -0500)
Change-Id: Idf5b6144b78e156e6c77e656cfe14097750259e5

dtbhtool/bootimg.h
dtbhtool/mkbootimg.c
dtbhtool/unpackbootimg.c

index 4692f0cf9dd5c6d26d4d0842dfc3b8d916b86b75..ef0e61c3271fdfd9583dcf5b6362079828a06c39 100644 (file)
@@ -61,6 +61,8 @@ struct boot_img_hdr
 ** +-----------------+
 ** | device tree     | p pages
 ** +-----------------+
+** | signature       | 256 bytes
+** +-----------------+
 **
 ** n = (kernel_size + page_size - 1) / page_size
 ** m = (ramdisk_size + page_size - 1) / page_size
index 06fc95be80622b5ddead166d3d0fea09233f1ac2..09e2e784d18cd2e94f42ad7b57bc5b30d4c63135 100644 (file)
@@ -67,6 +67,7 @@ int usage(void)
             "       [ --pagesize <pagesize> ]\n"
             "       [ --ramdisk_offset <address> ]\n"
             "       [ --dt <filename> ]\n"
+            "       [ --signature <filename> ]\n"
             "       -o|--output <filename>\n"
             );
     return 1;
@@ -109,6 +110,8 @@ int main(int argc, char **argv)
     char *board = "";
     char *dt_fn = 0;
     void *dt_data = 0;
+    char *sig_fn = 0;
+    void *sig_data = 0;
     unsigned pagesize = 2048;
     int fd;
     SHA_CTX ctx;
@@ -162,6 +165,8 @@ int main(int argc, char **argv)
             }
         } else if(!strcmp(arg, "--dt")) {
             dt_fn = val;
+        } else if(!strcmp(arg, "--signature")) {
+            sig_fn = val;
         } else {
             return usage();
         }
@@ -236,6 +241,14 @@ int main(int argc, char **argv)
         }
     }
 
+    if(sig_fn) {
+        sig_data = load_file(sig_fn, 0);
+        if (sig_data == 0) {
+            fprintf(stderr,"error: could not load signature '%s'\n", sig_fn);
+            return 1;
+        }
+    }
+
     /* put a hash of the contents in the header so boot images can be
      * differentiated based on their first 2k.
      */
@@ -278,6 +291,11 @@ int main(int argc, char **argv)
         if(write(fd, dt_data, hdr.dt_size) != hdr.dt_size) goto fail;
         if(write_padding(fd, pagesize, hdr.dt_size)) goto fail;
     }
+
+    if(sig_data) {
+        if(write(fd, sig_data, 256) != 256) goto fail;
+    }
+
     return 0;
 
 fail:
index 3d2fda736576ba7021dce54cd970364023939ed1..aef2166bd89d22cad5aedf499a175bd5b2784326 100644 (file)
@@ -203,7 +203,19 @@ int main(int argc, char** argv)
     total_read += header.dt_size;
     fwrite(dt, header.dt_size, 1, r);
     fclose(d);
-    
+
+    total_read += read_padding(f, header.dt_size, pagesize);
+
+    sprintf(tmp, "%s/%s", directory, basename(filename));
+    strcat(tmp, "-signature");
+    FILE *fsig = fopen(tmp, "wb");
+    byte* bsig = (byte*)malloc(256);
+    //printf("Reading signature...\n");
+    fread(bsig, 256, 1, f);
+    total_read += 256;
+    fwrite(bsig, 256, 1, r);
+    fclose(fsig);
+
     fclose(f);
     
     //printf("Total Read: %d\n", total_read);