|
19 | 19 | typedef unsigned char byte;
|
20 | 20 |
|
21 | 21 | char segment_name[] = ".sha256_sig";
|
| 22 | +char segment_key_name[] = ".sig_key"; |
22 | 23 |
|
23 | 24 | int sha256_file(char *path, char outputBuffer[65], int skip_offset, int skip_length)
|
24 | 25 | {
|
@@ -109,38 +110,53 @@ int main(int argc,char **argv) {
|
109 | 110 |
|
110 | 111 | char *filename = argv[1];
|
111 | 112 |
|
112 |
| - unsigned long skip_offset = 0; |
113 |
| - unsigned long skip_length = 0; |
| 113 | + unsigned long skip_offset_sig = 0; |
| 114 | + unsigned long skip_length_sig = 0; |
| 115 | + |
| 116 | + unsigned long skip_offset_key = 0; |
| 117 | + unsigned long skip_length_key = 0; |
114 | 118 |
|
115 |
| - if (!appimage_get_elf_section_offset_and_length(filename, ".sha256_sig", &skip_offset, &skip_length)) { |
| 119 | + if (!appimage_get_elf_section_offset_and_length(filename, ".sha256_sig", &skip_offset_sig, &skip_length_sig)) { |
116 | 120 | fprintf(stderr, "Failed to read .sha256_sig section");
|
117 | 121 | exit(1);
|
118 | 122 | }
|
| 123 | + if (!appimage_get_elf_section_offset_and_length(filename, ".sig_key", &skip_offset_key, &skip_length_key)) { |
| 124 | + fprintf(stderr, "Failed to read .sig_key section"); |
| 125 | + exit(1); |
| 126 | + } |
119 | 127 |
|
120 |
| - if(skip_length > 0) { |
121 |
| - fprintf(stderr, "Skipping ELF section %s with offset %lu, length %lu\n", segment_name, skip_offset, skip_length); |
| 128 | + if(skip_length_sig > 0) { |
| 129 | + fprintf(stderr, "Skipping ELF section %s with offset %lu, length %lu\n", segment_name, skip_offset_sig, skip_length_sig); |
122 | 130 | } else {
|
123 | 131 | fprintf(stderr, "ELF section %s not found, is the file signed?\n", segment_name);
|
124 | 132 | exit(1);
|
125 | 133 | }
|
| 134 | + if(skip_length_key > 0) { |
| 135 | + fprintf(stderr, "Skipping ELF section %s with offset %lu, length %lu\n", segment_key_name, skip_offset_key, skip_length_key); |
| 136 | + } else { |
| 137 | + fprintf(stderr, "ELF section %s not found, is the file signed?\n", segment_key_name); |
| 138 | + exit(1); |
| 139 | + } |
| 140 | + int skip_offset = skip_offset_sig; |
| 141 | + int skip_length = skip_length_sig + skip_length_key; |
126 | 142 |
|
127 | 143 | char *digestfile;
|
128 | 144 | digestfile = g_strconcat("/tmp/", basename(g_strconcat(filename, ".digest", NULL)), NULL);
|
129 | 145 | char *signaturefile;
|
130 | 146 | signaturefile = g_strconcat("/tmp/", basename(g_strconcat(filename, ".sig", NULL)), NULL);
|
131 | 147 |
|
132 |
| - uint8_t *data = malloc(skip_length); |
| 148 | + uint8_t *data = malloc(skip_length_sig); |
133 | 149 | unsigned long k;
|
134 | 150 | FILE* fd = fopen(filename, "r");
|
135 |
| - fseek(fd, skip_offset, SEEK_SET); |
136 |
| - fread(data, skip_length, sizeof(uint8_t), fd); |
| 151 | + fseek(fd, skip_offset_sig, SEEK_SET); |
| 152 | + fread(data, skip_length_sig, sizeof(uint8_t), fd); |
137 | 153 | fclose(fd);
|
138 | 154 | FILE *fpdst2 = fopen(signaturefile, "w");
|
139 | 155 | if (fpdst2 == NULL) {
|
140 | 156 | fprintf(stderr, "Not able to open the signature file for writing, aborting");
|
141 | 157 | exit(1);
|
142 | 158 | }
|
143 |
| - for (k = 0; k < skip_length; k++) { |
| 159 | + for (k = 0; k < skip_length_sig; k++) { |
144 | 160 | fprintf(fpdst2, "%c", data[k]);
|
145 | 161 | }
|
146 | 162 | fclose(fpdst2);
|
|
0 commit comments