mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-26 05:32:47 +00:00
39 lines
1.3 KiB
C
39 lines
1.3 KiB
C
#include "tad.h"
|
|
#include "sha.h"
|
|
|
|
|
|
u32 VerifyTadStub(TadStub* tad) {
|
|
TadFooter* ftr = &(tad->footer);
|
|
TadHeader* hdr = &(tad->header);
|
|
TadBanner* bnr = &(tad->banner);
|
|
|
|
if ((strncmp(hdr->magic, TAD_HEADER_MAGIC, strlen(TAD_HEADER_MAGIC)) != 0) ||
|
|
(sha_cmp(ftr->banner_sha256, bnr, sizeof(TadBanner), SHA256_MODE) != 0) ||
|
|
(sha_cmp(ftr->header_sha256, hdr, sizeof(TadHeader), SHA256_MODE) != 0))
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
u32 BuildTadContentTable(void* table, void* header) {
|
|
TadHeader* hdr = (TadHeader*) header;
|
|
TadContentTable* tbl = (TadContentTable*) table;
|
|
|
|
if (strncmp(hdr->magic, TAD_HEADER_MAGIC, strlen(TAD_HEADER_MAGIC)) != 0)
|
|
return 1;
|
|
|
|
tbl->banner_end = 0 + sizeof(TadBanner) + sizeof(TadBlockMetaData);
|
|
tbl->header_end = tbl->banner_end + sizeof(TadHeader) + sizeof(TadBlockMetaData);
|
|
tbl->footer_end = tbl->header_end + sizeof(TadFooter) + sizeof(TadBlockMetaData);
|
|
|
|
u32 content_end_last = tbl->footer_end;
|
|
for (u32 i = 0; i < TAD_NUM_CONTENT; i++) {
|
|
tbl->content_end[i] = content_end_last;
|
|
if (!hdr->content_size[i]) continue; // non-existant section
|
|
tbl->content_end[i] += align(hdr->content_size[i], 0x10) + sizeof(TadBlockMetaData);
|
|
content_end_last = tbl->content_end[i];
|
|
}
|
|
|
|
return 0;
|
|
}
|