Merge pull request #43 from lioncash/func

Mark identifiers as internally linked where appropriate
This commit is contained in:
SciresM 2018-08-16 20:55:15 -07:00 committed by GitHub
commit 0269d0b91b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 51 additions and 51 deletions

2
aes.c
View file

@ -113,7 +113,7 @@ void aes_decrypt(aes_ctx_t *ctx, void *dst, const void *src, size_t l) {
mbedtls_cipher_finish(&ctx->cipher_dec, NULL, NULL); mbedtls_cipher_finish(&ctx->cipher_dec, NULL, NULL);
} }
void get_tweak(unsigned char *tweak, size_t sector) { static void get_tweak(unsigned char *tweak, size_t sector) {
for (int i = 0xF; i >= 0; i--) { /* Nintendo LE custom tweak... */ for (int i = 0xF; i >= 0; i--) { /* Nintendo LE custom tweak... */
tweak[i] = (unsigned char)(sector & 0xFF); tweak[i] = (unsigned char)(sector & 0xFF);
sector >>= 8; sector >>= 8;

View file

@ -50,7 +50,7 @@ int os_rmdir(const oschar_t *dir) {
#endif #endif
} }
void filepath_update(filepath_t *fpath) { static void filepath_update(filepath_t *fpath) {
memset(fpath->os_path, 0, MAX_PATH * sizeof(oschar_t)); memset(fpath->os_path, 0, MAX_PATH * sizeof(oschar_t));
os_strcpy(fpath->os_path, fpath->char_path); os_strcpy(fpath->os_path, fpath->char_path);
} }

4
kip.c
View file

@ -129,7 +129,7 @@ char *kip1_get_json(kip1_ctx_t *ctx) {
return output_str; return output_str;
} }
void kip1_blz_uncompress(void *hdr_end) { static void kip1_blz_uncompress(void *hdr_end) {
uint32_t addl_size = ((uint32_t *)hdr_end)[-1]; uint32_t addl_size = ((uint32_t *)hdr_end)[-1];
uint32_t header_size = ((uint32_t *)hdr_end)[-2]; uint32_t header_size = ((uint32_t *)hdr_end)[-2];
uint32_t cmp_and_hdr_size = ((uint32_t *)hdr_end)[-3]; uint32_t cmp_and_hdr_size = ((uint32_t *)hdr_end)[-3];
@ -175,7 +175,7 @@ void kip1_blz_uncompress(void *hdr_end) {
} }
} }
void *kip1_uncompress(kip1_ctx_t *ctx, uint64_t *size) { static void *kip1_uncompress(kip1_ctx_t *ctx, uint64_t *size) {
/* Make new header with correct sizes, fixed flags. */ /* Make new header with correct sizes, fixed flags. */
kip1_header_t new_header = *ctx->header; kip1_header_t new_header = *ctx->header;
for (unsigned int i = 0; i < 3; i++) { for (unsigned int i = 0; i < 3; i++) {

4
nax0.c
View file

@ -3,7 +3,7 @@
#include "sha.h" #include "sha.h"
#include "nax0.h" #include "nax0.h"
size_t nax0_read(nax0_ctx_t *ctx, uint64_t offset, void *dst, size_t size) { static size_t nax0_read(nax0_ctx_t *ctx, uint64_t offset, void *dst, size_t size) {
if (ctx->num_files == 1) { if (ctx->num_files == 1) {
fseeko64(ctx->files[0], offset, SEEK_SET); fseeko64(ctx->files[0], offset, SEEK_SET);
return fread(dst, 1, size, ctx->files[0]); return fread(dst, 1, size, ctx->files[0]);
@ -151,7 +151,7 @@ void nax0_save(nax0_ctx_t *ctx) {
free(buf); free(buf);
} }
const char *nax0_get_key_summary(unsigned int k) { static const char *nax0_get_key_summary(unsigned int k) {
switch (k) { switch (k) {
case 0: case 0:
return "Save"; return "Save";

36
nca.c
View file

@ -14,7 +14,7 @@ void nca_init(nca_ctx_t *ctx) {
} }
/* Updates the CTR for an offset. */ /* Updates the CTR for an offset. */
void nca_update_ctr(unsigned char *ctr, uint64_t ofs) { static void nca_update_ctr(unsigned char *ctr, uint64_t ofs) {
ofs >>= 4; ofs >>= 4;
for (unsigned int j = 0; j < 0x8; j++) { for (unsigned int j = 0; j < 0x8; j++) {
ctr[0x10-j-1] = (unsigned char)(ofs & 0xFF); ctr[0x10-j-1] = (unsigned char)(ofs & 0xFF);
@ -23,7 +23,7 @@ void nca_update_ctr(unsigned char *ctr, uint64_t ofs) {
} }
/* Updates the CTR for a bktr offset. */ /* Updates the CTR for a bktr offset. */
void nca_update_bktr_ctr(unsigned char *ctr, uint32_t ctr_val, uint64_t ofs) { static void nca_update_bktr_ctr(unsigned char *ctr, uint32_t ctr_val, uint64_t ofs) {
ofs >>= 4; ofs >>= 4;
for (unsigned int j = 0; j < 0x8; j++) { for (unsigned int j = 0; j < 0x8; j++) {
ctr[0x10-j-1] = (unsigned char)(ofs & 0xFF); ctr[0x10-j-1] = (unsigned char)(ofs & 0xFF);
@ -74,7 +74,7 @@ void nca_section_fseek(nca_section_ctx_t *ctx, uint64_t offset) {
} }
} }
size_t nca_bktr_section_physical_fread(nca_section_ctx_t *ctx, void *buffer, size_t count) { static size_t nca_bktr_section_physical_fread(nca_section_ctx_t *ctx, void *buffer, size_t count) {
size_t read = 0; /* XXX */ size_t read = 0; /* XXX */
size_t size = 1; size_t size = 1;
char block_buf[0x10]; char block_buf[0x10];
@ -311,7 +311,7 @@ void nca_free_section_contexts(nca_ctx_t *ctx) {
} }
} }
void nca_save(nca_ctx_t *ctx) { static void nca_save(nca_ctx_t *ctx) {
/* Save header. */ /* Save header. */
filepath_t *header_path = &ctx->tool_ctx->settings.header_path; filepath_t *header_path = &ctx->tool_ctx->settings.header_path;
@ -657,7 +657,7 @@ void nca_decrypt_key_area(nca_ctx_t *ctx) {
} }
char *nca_get_distribution_type(nca_ctx_t *ctx) { static char *nca_get_distribution_type(nca_ctx_t *ctx) {
switch (ctx->header.distribution) { switch (ctx->header.distribution) {
case 0: case 0:
return "Download"; return "Download";
@ -668,7 +668,7 @@ char *nca_get_distribution_type(nca_ctx_t *ctx) {
} }
} }
char *nca_get_content_type(nca_ctx_t *ctx) { static char *nca_get_content_type(nca_ctx_t *ctx) {
switch (ctx->header.content_type) { switch (ctx->header.content_type) {
case 0: case 0:
return "Program"; return "Program";
@ -685,7 +685,7 @@ char *nca_get_content_type(nca_ctx_t *ctx) {
} }
} }
char *nca_get_encryption_type(nca_ctx_t *ctx) { static char *nca_get_encryption_type(nca_ctx_t *ctx) {
if (ctx->has_rights_id) { if (ctx->has_rights_id) {
return "Titlekey crypto"; return "Titlekey crypto";
} else { } else {
@ -693,7 +693,7 @@ char *nca_get_encryption_type(nca_ctx_t *ctx) {
} }
} }
void nca_print_key_area(nca_ctx_t *ctx) { static void nca_print_key_area(nca_ctx_t *ctx) {
if (ctx->format_version == NCAVERSION_NCA0_BETA) { if (ctx->format_version == NCAVERSION_NCA0_BETA) {
printf("Key Area (Encrypted):\n"); printf("Key Area (Encrypted):\n");
memdump(stdout, "Key (RSA-OAEP Encrypted): ", &ctx->header.encrypted_keys, 0x100); memdump(stdout, "Key (RSA-OAEP Encrypted): ", &ctx->header.encrypted_keys, 0x100);
@ -727,7 +727,7 @@ void nca_print_key_area(nca_ctx_t *ctx) {
} }
} }
char *nca_get_section_type(nca_section_ctx_t *meta) { static char *nca_get_section_type(nca_section_ctx_t *meta) {
switch (meta->type) { switch (meta->type) {
case PFS0: { case PFS0: {
if (meta->pfs0_ctx.is_exefs) return "ExeFS"; if (meta->pfs0_ctx.is_exefs) return "ExeFS";
@ -743,7 +743,7 @@ char *nca_get_section_type(nca_section_ctx_t *meta) {
} }
void nca_print_sections(nca_ctx_t *ctx) { static void nca_print_sections(nca_ctx_t *ctx) {
printf("Sections:\n"); printf("Sections:\n");
for (unsigned int i = 0; i < 4; i++) { for (unsigned int i = 0; i < 4; i++) {
if (ctx->section_contexts[i].is_present) { /* Section exists. */ if (ctx->section_contexts[i].is_present) { /* Section exists. */
@ -839,7 +839,7 @@ void nca_print(nca_ctx_t *ctx) {
printf("\n"); printf("\n");
} }
validity_t nca_section_check_external_hash_table(nca_section_ctx_t *ctx, unsigned char *hash_table, uint64_t data_ofs, uint64_t data_len, uint64_t block_size, int full_block) { static validity_t nca_section_check_external_hash_table(nca_section_ctx_t *ctx, unsigned char *hash_table, uint64_t data_ofs, uint64_t data_len, uint64_t block_size, int full_block) {
if (block_size == 0) { if (block_size == 0) {
/* Block size of 0 is always invalid. */ /* Block size of 0 is always invalid. */
return VALIDITY_INVALID; return VALIDITY_INVALID;
@ -879,7 +879,7 @@ validity_t nca_section_check_external_hash_table(nca_section_ctx_t *ctx, unsigne
} }
validity_t nca_section_check_hash_table(nca_section_ctx_t *ctx, uint64_t hash_ofs, uint64_t data_ofs, uint64_t data_len, uint64_t block_size, int full_block) { static validity_t nca_section_check_hash_table(nca_section_ctx_t *ctx, uint64_t hash_ofs, uint64_t data_ofs, uint64_t data_len, uint64_t block_size, int full_block) {
if (block_size == 0) { if (block_size == 0) {
/* Block size of 0 is always invalid. */ /* Block size of 0 is always invalid. */
return VALIDITY_INVALID; return VALIDITY_INVALID;
@ -906,7 +906,7 @@ validity_t nca_section_check_hash_table(nca_section_ctx_t *ctx, uint64_t hash_of
return result; return result;
} }
void nca_save_pfs0_file(nca_section_ctx_t *ctx, uint32_t i, filepath_t *dirpath) { static void nca_save_pfs0_file(nca_section_ctx_t *ctx, uint32_t i, filepath_t *dirpath) {
if (i >= ctx->pfs0_ctx.header->num_files) { if (i >= ctx->pfs0_ctx.header->num_files) {
fprintf(stderr, "Could not save file %"PRId32"!\n", i); fprintf(stderr, "Could not save file %"PRId32"!\n", i);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -1438,7 +1438,7 @@ void nca_save_pfs0_section(nca_section_ctx_t *ctx) {
} }
/* RomFS functions... */ /* RomFS functions... */
int nca_is_romfs_file_updated(nca_section_ctx_t *ctx, uint64_t file_offset, uint64_t file_size) { static int nca_is_romfs_file_updated(nca_section_ctx_t *ctx, uint64_t file_offset, uint64_t file_size) {
/* All files in a Base RomFS are "updated". */ /* All files in a Base RomFS are "updated". */
if (ctx->type == ROMFS) { if (ctx->type == ROMFS) {
return 1; return 1;
@ -1459,7 +1459,7 @@ int nca_is_romfs_file_updated(nca_section_ctx_t *ctx, uint64_t file_offset, uint
return 0; return 0;
} }
int nca_visit_romfs_file(nca_section_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) { static int nca_visit_romfs_file(nca_section_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) {
romfs_fentry_t *entry; romfs_fentry_t *entry;
if (ctx->type == ROMFS) { if (ctx->type == ROMFS) {
entry = romfs_get_fentry(ctx->romfs_ctx.files, file_offset); entry = romfs_get_fentry(ctx->romfs_ctx.files, file_offset);
@ -1506,7 +1506,7 @@ int nca_visit_romfs_file(nca_section_ctx_t *ctx, uint32_t file_offset, filepath_
return found_file; return found_file;
} }
int nca_visit_nca0_romfs_file(nca_section_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) { static int nca_visit_nca0_romfs_file(nca_section_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) {
romfs_fentry_t *entry = romfs_get_fentry(ctx->nca0_romfs_ctx.files, file_offset); romfs_fentry_t *entry = romfs_get_fentry(ctx->nca0_romfs_ctx.files, file_offset);
filepath_t *cur_path = calloc(1, sizeof(filepath_t)); filepath_t *cur_path = calloc(1, sizeof(filepath_t));
if (cur_path == NULL) { if (cur_path == NULL) {
@ -1540,7 +1540,7 @@ int nca_visit_nca0_romfs_file(nca_section_ctx_t *ctx, uint32_t file_offset, file
return found_file; return found_file;
} }
int nca_visit_romfs_dir(nca_section_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) { static int nca_visit_romfs_dir(nca_section_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) {
romfs_direntry_t *entry; romfs_direntry_t *entry;
if (ctx->type == ROMFS) { if (ctx->type == ROMFS) {
entry = romfs_get_direntry(ctx->romfs_ctx.directories, dir_offset); entry = romfs_get_direntry(ctx->romfs_ctx.directories, dir_offset);
@ -1585,7 +1585,7 @@ int nca_visit_romfs_dir(nca_section_ctx_t *ctx, uint32_t dir_offset, filepath_t
return any_files; return any_files;
} }
int nca_visit_nca0_romfs_dir(nca_section_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) { static int nca_visit_nca0_romfs_dir(nca_section_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) {
romfs_direntry_t *entry = romfs_get_direntry(ctx->nca0_romfs_ctx.directories, dir_offset); romfs_direntry_t *entry = romfs_get_direntry(ctx->nca0_romfs_ctx.directories, dir_offset);
filepath_t *cur_path = calloc(1, sizeof(filepath_t)); filepath_t *cur_path = calloc(1, sizeof(filepath_t));
if (cur_path == NULL) { if (cur_path == NULL) {

View file

@ -4,7 +4,7 @@
#include "nca0_romfs.h" #include "nca0_romfs.h"
/* NCA0 RomFS functions... */ /* NCA0 RomFS functions... */
void nca0_romfs_visit_file(nca0_romfs_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) { static void nca0_romfs_visit_file(nca0_romfs_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) {
romfs_fentry_t *entry = romfs_get_fentry(ctx->files, file_offset); romfs_fentry_t *entry = romfs_get_fentry(ctx->files, file_offset);
filepath_t *cur_path = calloc(1, sizeof(filepath_t)); filepath_t *cur_path = calloc(1, sizeof(filepath_t));
if (cur_path == NULL) { if (cur_path == NULL) {
@ -32,7 +32,7 @@ void nca0_romfs_visit_file(nca0_romfs_ctx_t *ctx, uint32_t file_offset, filepath
} }
} }
void nca0_romfs_visit_dir(nca0_romfs_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) { static void nca0_romfs_visit_dir(nca0_romfs_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) {
romfs_direntry_t *entry = romfs_get_direntry(ctx->directories, dir_offset); romfs_direntry_t *entry = romfs_get_direntry(ctx->directories, dir_offset);
filepath_t *cur_path = calloc(1, sizeof(filepath_t)); filepath_t *cur_path = calloc(1, sizeof(filepath_t));
if (cur_path == NULL) { if (cur_path == NULL) {

22
npdm.c
View file

@ -6,7 +6,7 @@
#include "rsa.h" #include "rsa.h"
#include "cJSON.h" #include "cJSON.h"
const char *svc_names[0x80] = { static const char * const svc_names[0x80] = {
"svcUnknown", "svcUnknown",
"svcSetHeapSize", "svcSetHeapSize",
"svcSetMemoryPermission", "svcSetMemoryPermission",
@ -141,7 +141,7 @@ const char *svc_names[0x80] = {
#define MAX_FS_PERM_BOOL 0x1B #define MAX_FS_PERM_BOOL 0x1B
#define FS_PERM_MASK_NODEBUG 0xBFFFFFFFFFFFFFFFULL #define FS_PERM_MASK_NODEBUG 0xBFFFFFFFFFFFFFFFULL
const fs_perm_t fs_permissions_rw[MAX_FS_PERM_RW] = { static const fs_perm_t fs_permissions_rw[MAX_FS_PERM_RW] = {
{"MountContentType2", 0x8000000000000801}, {"MountContentType2", 0x8000000000000801},
{"MountContentType5", 0x8000000000000801}, {"MountContentType5", 0x8000000000000801},
{"MountContentType3", 0x8000000000000801}, {"MountContentType3", 0x8000000000000801},
@ -183,7 +183,7 @@ const fs_perm_t fs_permissions_rw[MAX_FS_PERM_RW] = {
{"HostAccess", 0xC000000000400000} {"HostAccess", 0xC000000000400000}
}; };
const fs_perm_t fs_permissions_bool[MAX_FS_PERM_BOOL] = { static const fs_perm_t fs_permissions_bool[MAX_FS_PERM_BOOL] = {
{"BisCache", 0x8000000000000080}, {"BisCache", 0x8000000000000080},
{"EraseMmc", 0x8000000000000080}, {"EraseMmc", 0x8000000000000080},
{"GameCardCertificate", 0x8000000000000010}, {"GameCardCertificate", 0x8000000000000010},
@ -224,7 +224,7 @@ char *npdm_get_proc_category(int process_category) {
} }
} }
char *kac_get_app_type(uint32_t app_type) { static char *kac_get_app_type(uint32_t app_type) {
switch (app_type) { switch (app_type) {
case 0: case 0:
return "System Module"; return "System Module";
@ -237,7 +237,7 @@ char *kac_get_app_type(uint32_t app_type) {
} }
} }
void kac_add_mmio(kac_t *kac, kac_mmio_t *mmio) { static void kac_add_mmio(kac_t *kac, kac_mmio_t *mmio) {
/* Perform an ordered insertion. */ /* Perform an ordered insertion. */
if (kac->mmio == NULL || mmio->address < kac->mmio->address) { if (kac->mmio == NULL || mmio->address < kac->mmio->address) {
mmio->next = kac->mmio; mmio->next = kac->mmio;
@ -450,7 +450,7 @@ void kac_print(const uint32_t *descriptors, uint32_t num_descriptors) {
} }
/* Modified from https://stackoverflow.com/questions/23457305/compare-strings-with-wildcard */ /* Modified from https://stackoverflow.com/questions/23457305/compare-strings-with-wildcard */
int match(const char *pattern, const char *candidate, int p, int c) { static int match(const char *pattern, const char *candidate, int p, int c) {
if (pattern[p] == '\0') { if (pattern[p] == '\0') {
return candidate[c] == '\0'; return candidate[c] == '\0';
} else if (pattern[p] == '*') { } else if (pattern[p] == '*') {
@ -464,7 +464,7 @@ int match(const char *pattern, const char *candidate, int p, int c) {
} }
} }
int sac_matches(sac_entry_t *lst, char *service) { static int sac_matches(sac_entry_t *lst, char *service) {
sac_entry_t *cur = lst; sac_entry_t *cur = lst;
while (cur != NULL) { while (cur != NULL) {
if (match(cur->service, service, 0, 0)) return 1; if (match(cur->service, service, 0, 0)) return 1;
@ -473,7 +473,7 @@ int sac_matches(sac_entry_t *lst, char *service) {
return 0; return 0;
} }
void sac_parse(char *sac, uint32_t sac_size, sac_entry_t *r_host, sac_entry_t *r_accesses, sac_entry_t **out_hosts, sac_entry_t **out_accesses) { static void sac_parse(char *sac, uint32_t sac_size, sac_entry_t *r_host, sac_entry_t *r_accesses, sac_entry_t **out_hosts, sac_entry_t **out_accesses) {
sac_entry_t *accesses = NULL; sac_entry_t *accesses = NULL;
sac_entry_t *hosts = NULL; sac_entry_t *hosts = NULL;
sac_entry_t *cur_entry = NULL; sac_entry_t *cur_entry = NULL;
@ -513,7 +513,7 @@ void sac_parse(char *sac, uint32_t sac_size, sac_entry_t *r_host, sac_entry_t *r
*out_accesses = accesses; *out_accesses = accesses;
} }
void sac_print(char *acid_sac, uint32_t acid_size, char *aci0_sac, uint32_t aci0_size) { static void sac_print(char *acid_sac, uint32_t acid_size, char *aci0_sac, uint32_t aci0_size) {
/* Parse the ACID sac. */ /* Parse the ACID sac. */
sac_entry_t *acid_accesses = NULL; sac_entry_t *acid_accesses = NULL;
sac_entry_t *acid_hosts = NULL; sac_entry_t *acid_hosts = NULL;
@ -558,7 +558,7 @@ void sac_print(char *acid_sac, uint32_t acid_size, char *aci0_sac, uint32_t aci0
void fac_print(fac_t *fac, fah_t *fah) { static void fac_print(fac_t *fac, fah_t *fah) {
if (fac->version == fah->version) { if (fac->version == fah->version) {
printf(" Version: %"PRId32"\n", fac->version); printf(" Version: %"PRId32"\n", fac->version);
} else { } else {
@ -705,7 +705,7 @@ void cJSON_AddU64ToObject(cJSON *obj, const char *name, uint64_t val) {
cJSON_AddStringToObject(obj, name, buf); cJSON_AddStringToObject(obj, name, buf);
} }
cJSON *sac_get_json(char *sac, uint32_t sac_size) { static cJSON *sac_get_json(char *sac, uint32_t sac_size) {
cJSON *sac_json = cJSON_CreateObject(); cJSON *sac_json = cJSON_CreateObject();
char service[9] = {0}; char service[9] = {0};
uint32_t ofs = 0; uint32_t ofs = 0;

2
nso.c
View file

@ -3,7 +3,7 @@
#include "lz4.h" #include "lz4.h"
#include "sha.h" #include "sha.h"
void *nso_uncompress(nso0_ctx_t *ctx) { static void *nso_uncompress(nso0_ctx_t *ctx) {
/* Make new header with correct sizes, fixed flags. */ /* Make new header with correct sizes, fixed flags. */
nso0_header_t new_header = *ctx->header; nso0_header_t new_header = *ctx->header;
for (unsigned int i = 0; i < 3; i++) { for (unsigned int i = 0; i < 3; i++) {

View file

@ -235,7 +235,7 @@ void pk21_process(pk21_ctx_t *ctx) {
} }
} }
const char *pk21_get_section_name(int section) { static const char *pk21_get_section_name(int section) {
switch (section) { switch (section) {
case 0: return "Kernel"; case 0: return "Kernel";
case 1: return "INI1"; case 1: return "INI1";

2
pfs0.c
View file

@ -73,7 +73,7 @@ void pfs0_process(pfs0_ctx_t *ctx) {
} }
void pfs0_save_file(pfs0_ctx_t *ctx, uint32_t i, filepath_t *dirpath) { static void pfs0_save_file(pfs0_ctx_t *ctx, uint32_t i, filepath_t *dirpath) {
if (i >= ctx->header->num_files) { if (i >= ctx->header->num_files) {
fprintf(stderr, "Could not save file %"PRId32"!\n", i); fprintf(stderr, "Could not save file %"PRId32"!\n", i);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);

12
pki.c
View file

@ -4,7 +4,7 @@
#include "pki.h" #include "pki.h"
/* Keydata for very early beta NCA0 archives' RSA-OAEP. */ /* Keydata for very early beta NCA0 archives' RSA-OAEP. */
const unsigned char beta_nca0_modulus[0x100] = { static const unsigned char beta_nca0_modulus[0x100] = {
0xAD, 0x58, 0xEE, 0x97, 0xF9, 0x47, 0x90, 0x7D, 0xF9, 0x29, 0x5F, 0x1F, 0x39, 0x68, 0xEE, 0x49, 0xAD, 0x58, 0xEE, 0x97, 0xF9, 0x47, 0x90, 0x7D, 0xF9, 0x29, 0x5F, 0x1F, 0x39, 0x68, 0xEE, 0x49,
0x4C, 0x1E, 0x8D, 0x84, 0x91, 0x31, 0x5D, 0xE5, 0x96, 0x27, 0xB2, 0xB3, 0x59, 0x7B, 0xDE, 0xFD, 0x4C, 0x1E, 0x8D, 0x84, 0x91, 0x31, 0x5D, 0xE5, 0x96, 0x27, 0xB2, 0xB3, 0x59, 0x7B, 0xDE, 0xFD,
0xB7, 0xEB, 0x40, 0xA1, 0xE7, 0xEB, 0xDC, 0x60, 0xD0, 0x3D, 0xC5, 0x50, 0x92, 0xAD, 0x3D, 0xC4, 0xB7, 0xEB, 0x40, 0xA1, 0xE7, 0xEB, 0xDC, 0x60, 0xD0, 0x3D, 0xC5, 0x50, 0x92, 0xAD, 0x3D, 0xC4,
@ -24,7 +24,7 @@ const unsigned char beta_nca0_modulus[0x100] = {
}; };
unsigned char beta_nca0_exponent[0x100] = { static unsigned char beta_nca0_exponent[0x100] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -43,7 +43,7 @@ unsigned char beta_nca0_exponent[0x100] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
}; };
const unsigned char beta_nca0_label_hash[0x20] = { static const unsigned char beta_nca0_label_hash[0x20] = {
0xE3, 0xB0, 0xC4, 0x42, 0x98, 0xFC, 0x1C, 0x14, 0x9A, 0xFB, 0xF4, 0xC8, 0x99, 0x6F, 0xB9, 0x24, 0xE3, 0xB0, 0xC4, 0x42, 0x98, 0xFC, 0x1C, 0x14, 0x9A, 0xFB, 0xF4, 0xC8, 0x99, 0x6F, 0xB9, 0x24,
0x27, 0xAE, 0x41, 0xE4, 0x64, 0x9B, 0x93, 0x4C, 0xA4, 0x95, 0x99, 0x1B, 0x78, 0x52, 0xB8, 0x55 0x27, 0xAE, 0x41, 0xE4, 0x64, 0x9B, 0x93, 0x4C, 0xA4, 0x95, 0x99, 0x1B, 0x78, 0x52, 0xB8, 0x55
}; };
@ -66,7 +66,7 @@ const unsigned char *pki_get_beta_nca0_label_hash(void) {
} }
const nca_keyset_t nca_keys_retail = { static const nca_keyset_t nca_keys_retail = {
ZEROES_KEY, /* Secure Boot Key (CONSOLE UNIQUE) */ ZEROES_KEY, /* Secure Boot Key (CONSOLE UNIQUE) */
ZEROES_KEY, /* TSEC Key (CONSOLE UNIQUE) */ ZEROES_KEY, /* TSEC Key (CONSOLE UNIQUE) */
{ {
@ -486,7 +486,7 @@ const nca_keyset_t nca_keys_retail = {
} }
}; };
const nca_keyset_t nca_keys_dev = { static const nca_keyset_t nca_keys_dev = {
ZEROES_KEY, /* Secure Boot Key (CONSOLE UNIQUE) */ ZEROES_KEY, /* Secure Boot Key (CONSOLE UNIQUE) */
ZEROES_KEY, /* TSEC Key (CONSOLE UNIQUE) */ ZEROES_KEY, /* TSEC Key (CONSOLE UNIQUE) */
{ {
@ -907,7 +907,7 @@ const nca_keyset_t nca_keys_dev = {
}; };
void generate_kek(unsigned char *dst, const unsigned char *src, const unsigned char *master_key, const unsigned char *kek_seed, const unsigned char *key_seed) { static void generate_kek(unsigned char *dst, const unsigned char *src, const unsigned char *master_key, const unsigned char *kek_seed, const unsigned char *key_seed) {
unsigned char kek[0x10]; unsigned char kek[0x10];
unsigned char src_kek[0x10]; unsigned char src_kek[0x10];
aes_ctx_t *master_ctx = new_aes_ctx(master_key, 0x10, AES_MODE_ECB); aes_ctx_t *master_ctx = new_aes_ctx(master_key, 0x10, AES_MODE_ECB);

View file

@ -4,7 +4,7 @@
#include "ivfc.h" #include "ivfc.h"
/* RomFS functions... */ /* RomFS functions... */
void romfs_visit_file(romfs_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) { static void romfs_visit_file(romfs_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_path) {
romfs_fentry_t *entry = romfs_get_fentry(ctx->files, file_offset); romfs_fentry_t *entry = romfs_get_fentry(ctx->files, file_offset);
filepath_t *cur_path = calloc(1, sizeof(filepath_t)); filepath_t *cur_path = calloc(1, sizeof(filepath_t));
if (cur_path == NULL) { if (cur_path == NULL) {
@ -32,7 +32,7 @@ void romfs_visit_file(romfs_ctx_t *ctx, uint32_t file_offset, filepath_t *dir_pa
} }
} }
void romfs_visit_dir(romfs_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) { static void romfs_visit_dir(romfs_ctx_t *ctx, uint32_t dir_offset, filepath_t *parent_path) {
romfs_direntry_t *entry = romfs_get_direntry(ctx->directories, dir_offset); romfs_direntry_t *entry = romfs_get_direntry(ctx->directories, dir_offset);
filepath_t *cur_path = calloc(1, sizeof(filepath_t)); filepath_t *cur_path = calloc(1, sizeof(filepath_t));
if (cur_path == NULL) { if (cur_path == NULL) {

6
xci.c
View file

@ -5,7 +5,7 @@
/* This RSA-PKCS1 public key is only accessible to the gamecard controller. */ /* This RSA-PKCS1 public key is only accessible to the gamecard controller. */
/* However, it (and other XCI keys) can be dumped with a GCD attack on two signatures. */ /* However, it (and other XCI keys) can be dumped with a GCD attack on two signatures. */
/* Contact SciresM for details, if curious. */ /* Contact SciresM for details, if curious. */
const unsigned char xci_header_pubk[0x100] = { static const unsigned char xci_header_pubk[0x100] = {
0x98, 0xC7, 0x26, 0xB6, 0x0D, 0x0A, 0x50, 0xA7, 0x39, 0x21, 0x0A, 0xE3, 0x2F, 0xE4, 0x3E, 0x2E, 0x98, 0xC7, 0x26, 0xB6, 0x0D, 0x0A, 0x50, 0xA7, 0x39, 0x21, 0x0A, 0xE3, 0x2F, 0xE4, 0x3E, 0x2E,
0x5B, 0xA2, 0x86, 0x75, 0xAA, 0x5C, 0xEE, 0x34, 0xF1, 0xA3, 0x3A, 0x7E, 0xBD, 0x90, 0x4E, 0xF7, 0x5B, 0xA2, 0x86, 0x75, 0xAA, 0x5C, 0xEE, 0x34, 0xF1, 0xA3, 0x3A, 0x7E, 0xBD, 0x90, 0x4E, 0xF7,
0x8D, 0xFA, 0x17, 0xAA, 0x6B, 0xC6, 0x36, 0x6D, 0x4C, 0x9A, 0x6D, 0x57, 0x2F, 0x80, 0xA2, 0xBC, 0x8D, 0xFA, 0x17, 0xAA, 0x6B, 0xC6, 0x36, 0x6D, 0x4C, 0x9A, 0x6D, 0x57, 0x2F, 0x80, 0xA2, 0xBC,
@ -186,7 +186,7 @@ void xci_save(xci_ctx_t *ctx) {
} }
} }
char *xci_get_cartridge_type(xci_ctx_t *ctx) { static const char *xci_get_cartridge_type(xci_ctx_t *ctx) {
cartridge_type_t cart_type = (cartridge_type_t)ctx->header.cart_type; cartridge_type_t cart_type = (cartridge_type_t)ctx->header.cart_type;
switch (cart_type) { switch (cart_type) {
case CARTSIZE_2GB: return "2GB"; case CARTSIZE_2GB: return "2GB";
@ -198,7 +198,7 @@ char *xci_get_cartridge_type(xci_ctx_t *ctx) {
} }
} }
void xci_print_hfs0(hfs0_ctx_t *ctx) { static void xci_print_hfs0(hfs0_ctx_t *ctx) {
print_magic(" Magic: ", ctx->header->magic); print_magic(" Magic: ", ctx->header->magic);
printf(" Offset: %012"PRIx64"\n", ctx->offset); printf(" Offset: %012"PRIx64"\n", ctx->offset);
printf(" Number of files: %"PRId32"\n", ctx->header->num_files); printf(" Number of files: %"PRId32"\n", ctx->header->num_files);