|
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