Skip to content

Commit 473d421

Browse files
yobsonTheAssassin
authored andcommitted
Fixed Validate.c (Issue 949)
1 parent 312be7b commit 473d421

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

src/validate.c

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
typedef unsigned char byte;
2020

2121
char segment_name[] = ".sha256_sig";
22+
char segment_key_name[] = ".sig_key";
2223

2324
int sha256_file(char *path, char outputBuffer[65], int skip_offset, int skip_length)
2425
{
@@ -109,38 +110,53 @@ int main(int argc,char **argv) {
109110

110111
char *filename = argv[1];
111112

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;
114118

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)) {
116120
fprintf(stderr, "Failed to read .sha256_sig section");
117121
exit(1);
118122
}
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+
}
119127

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);
122130
} else {
123131
fprintf(stderr, "ELF section %s not found, is the file signed?\n", segment_name);
124132
exit(1);
125133
}
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;
126142

127143
char *digestfile;
128144
digestfile = g_strconcat("/tmp/", basename(g_strconcat(filename, ".digest", NULL)), NULL);
129145
char *signaturefile;
130146
signaturefile = g_strconcat("/tmp/", basename(g_strconcat(filename, ".sig", NULL)), NULL);
131147

132-
uint8_t *data = malloc(skip_length);
148+
uint8_t *data = malloc(skip_length_sig);
133149
unsigned long k;
134150
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);
137153
fclose(fd);
138154
FILE *fpdst2 = fopen(signaturefile, "w");
139155
if (fpdst2 == NULL) {
140156
fprintf(stderr, "Not able to open the signature file for writing, aborting");
141157
exit(1);
142158
}
143-
for (k = 0; k < skip_length; k++) {
159+
for (k = 0; k < skip_length_sig; k++) {
144160
fprintf(fpdst2, "%c", data[k]);
145161
}
146162
fclose(fpdst2);

0 commit comments

Comments
 (0)