mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-03 00:39:14 +00:00
got rid of magic numbers
This commit is contained in:
+15
-15
@@ -199,7 +199,7 @@ int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset)
|
|||||||
if(result) return result;
|
if(result) return result;
|
||||||
|
|
||||||
// Tmd Stuff
|
// Tmd Stuff
|
||||||
if(usrset->cia.contentId[0] > 0xffffffff)
|
if(usrset->cia.contentId[0] > MAX_U32)
|
||||||
ciaset->content.id[0] = u32GetRand();
|
ciaset->content.id[0] = u32GetRand();
|
||||||
else
|
else
|
||||||
ciaset->content.id[0] = usrset->cia.contentId[0];
|
ciaset->content.id[0] = usrset->cia.contentId[0];
|
||||||
@@ -282,10 +282,10 @@ finish:
|
|||||||
|
|
||||||
int GetCIADataFromNcch(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8 *key)
|
int GetCIADataFromNcch(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8 *key)
|
||||||
{
|
{
|
||||||
extended_hdr *exhdr = malloc(0x400);
|
extended_hdr *exhdr = malloc(sizeof(extended_hdr));
|
||||||
memcpy(exhdr,ncch+ncch_ctx->exhdrOffset,0x400);
|
memcpy(exhdr,ncch+ncch_ctx->exhdrOffset,sizeof(extended_hdr));
|
||||||
if(key != NULL)
|
if(key != NULL)
|
||||||
CryptNCCHSection((u8*)exhdr,0x400,0,ncch_ctx,key,ncch_exhdr);
|
CryptNCCHSection((u8*)exhdr,sizeof(extended_hdr),0,ncch_ctx,key,ncch_exhdr);
|
||||||
|
|
||||||
u16 Category = u8_to_u16((ciaset->common.titleId+2),BE);
|
u16 Category = u8_to_u16((ciaset->common.titleId+2),BE);
|
||||||
if(IsPatch(Category)||ciaset->content.IsCfa||ciaset->content.keyNotFound)
|
if(IsPatch(Category)||ciaset->content.IsCfa||ciaset->content.keyNotFound)
|
||||||
@@ -300,25 +300,25 @@ int GetCIADataFromNcch(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ciaset->content.IsCfa||ciaset->content.keyNotFound){
|
if(ciaset->content.IsCfa||ciaset->content.keyNotFound){
|
||||||
if(ciaset->common.titleVersion[0] == 0xffff){ // '-major' wasn't set
|
if(ciaset->common.titleVersion[VER_MAJOR] == MAX_U16){ // '-major' wasn't set
|
||||||
if(ciaset->content.IsCfa){ // Is a CFA and can be decrypted
|
if(ciaset->content.IsCfa){ // Is a CFA and can be decrypted
|
||||||
fprintf(stderr,"[CIA ERROR] Invalid major version. Use \"-major\" option.\n");
|
fprintf(stderr,"[CIA ERROR] Invalid major version. Use \"-major\" option.\n");
|
||||||
return CIA_BAD_VERSION;
|
return CIA_BAD_VERSION;
|
||||||
}
|
}
|
||||||
else // CXI which cannot be decrypted
|
else // CXI which cannot be decrypted
|
||||||
ciaset->common.titleVersion[0] = 0;
|
ciaset->common.titleVersion[VER_MAJOR] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{ // Is a CXI and can be decrypted
|
else{ // Is a CXI and can be decrypted
|
||||||
if(ciaset->common.titleVersion[0] != 0xffff){ // '-major' was set
|
if(ciaset->common.titleVersion[VER_MAJOR] != MAX_U16){ // '-major' was set
|
||||||
fprintf(stderr,"[CIA ERROR] Option \"-major\" cannot be applied for cxi.\n");
|
fprintf(stderr,"[CIA ERROR] Option \"-major\" cannot be applied for cxi.\n");
|
||||||
return CIA_BAD_VERSION;
|
return CIA_BAD_VERSION;
|
||||||
}
|
}
|
||||||
// Setting remaster ver
|
// Setting remaster ver
|
||||||
ciaset->common.titleVersion[0] = GetRemasterVersion_frm_exhdr(exhdr);
|
ciaset->common.titleVersion[VER_MAJOR] = GetRemasterVersion_frm_exhdr(exhdr);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 version = SetupVersion(ciaset->common.titleVersion[0],ciaset->common.titleVersion[1],ciaset->common.titleVersion[2]);
|
u16 version = SetupVersion(ciaset->common.titleVersion[VER_MAJOR],ciaset->common.titleVersion[VER_MINOR],ciaset->common.titleVersion[VER_MICRO]);
|
||||||
ciaset->tik.version = version;
|
ciaset->tik.version = version;
|
||||||
ciaset->tmd.version = version;
|
ciaset->tmd.version = version;
|
||||||
|
|
||||||
@@ -331,10 +331,10 @@ int GetMetaRegion(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8 *key
|
|||||||
if(ciaset->content.IsCfa || ciaset->content.keyNotFound)
|
if(ciaset->content.IsCfa || ciaset->content.keyNotFound)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
extended_hdr *exhdr = malloc(0x400);
|
extended_hdr *exhdr = malloc(sizeof(extended_hdr));
|
||||||
memcpy(exhdr,ncch+ncch_ctx->exhdrOffset,0x400);
|
memcpy(exhdr,ncch+ncch_ctx->exhdrOffset,sizeof(extended_hdr));
|
||||||
if(key != NULL)
|
if(key != NULL)
|
||||||
CryptNCCHSection((u8*)exhdr,0x400,0,ncch_ctx,key,ncch_exhdr);
|
CryptNCCHSection((u8*)exhdr,sizeof(extended_hdr),0,ncch_ctx,key,ncch_exhdr);
|
||||||
|
|
||||||
exefs_hdr *exefsHdr = malloc(sizeof(exefs_hdr));
|
exefs_hdr *exefsHdr = malloc(sizeof(exefs_hdr));
|
||||||
memcpy(exefsHdr,ncch+ncch_ctx->exefsOffset,sizeof(exefs_hdr));
|
memcpy(exefsHdr,ncch+ncch_ctx->exefsOffset,sizeof(exefs_hdr));
|
||||||
@@ -346,7 +346,7 @@ int GetMetaRegion(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8 *key
|
|||||||
for(int i = 0; i < MAX_EXEFS_SECTIONS; i++){
|
for(int i = 0; i < MAX_EXEFS_SECTIONS; i++){
|
||||||
if(strncmp(exefsHdr->fileHdr[i].name,"icon",8) == 0){
|
if(strncmp(exefsHdr->fileHdr[i].name,"icon",8) == 0){
|
||||||
icon_size = u8_to_u32(exefsHdr->fileHdr[i].size,LE);
|
icon_size = u8_to_u32(exefsHdr->fileHdr[i].size,LE);
|
||||||
icon_offset = u8_to_u32(exefsHdr->fileHdr[i].offset,LE) + 0x200;
|
icon_offset = u8_to_u32(exefsHdr->fileHdr[i].offset,LE) + sizeof(exefs_hdr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,7 +392,7 @@ int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset)
|
|||||||
ciaset->content.fileSize[j] = GetFileSize_u64(usrset->common.contentPath[i]);
|
ciaset->content.fileSize[j] = GetFileSize_u64(usrset->common.contentPath[i]);
|
||||||
ciaset->content.filePtrs[j] = fopen(usrset->common.contentPath[i],"rb");
|
ciaset->content.filePtrs[j] = fopen(usrset->common.contentPath[i],"rb");
|
||||||
|
|
||||||
if(usrset->cia.contentId[i] == 0x100000000)
|
if(usrset->cia.contentId[i] > MAX_U32)
|
||||||
ciaset->content.id[j] = u32GetRand();
|
ciaset->content.id[j] = u32GetRand();
|
||||||
else
|
else
|
||||||
ciaset->content.id[j] = (u32)usrset->cia.contentId[i];
|
ciaset->content.id[j] = (u32)usrset->cia.contentId[i];
|
||||||
@@ -409,7 +409,7 @@ int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset)
|
|||||||
return FAILED_TO_OPEN_FILE;
|
return FAILED_TO_OPEN_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ciaset->content.size[j] = align(calcSize,0x10);
|
ciaset->content.size[j] = align(calcSize,CIA_CONTENT_ALIGN);
|
||||||
ciaset->content.offset[j] = ciaset->content.totalSize;
|
ciaset->content.offset[j] = ciaset->content.totalSize;
|
||||||
|
|
||||||
ciaset->content.totalSize += ciaset->content.size[j];
|
ciaset->content.totalSize += ciaset->content.size[j];
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
static const int CIA_ALIGN_SIZE = 0x40;
|
static const int CIA_ALIGN_SIZE = 0x40;
|
||||||
|
static const int CIA_CONTENT_ALIGN = 0x10;
|
||||||
|
|
||||||
// Enums
|
// Enums
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|||||||
@@ -28,6 +28,14 @@ typedef enum
|
|||||||
GB = 1073741824
|
GB = 1073741824
|
||||||
} file_unit_size;
|
} file_unit_size;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MAX_U8 = 0xff,
|
||||||
|
MAX_U16 = 0xffff,
|
||||||
|
MAX_U32 = 0xffffffff,
|
||||||
|
MAX_U64 = 0xffffffffffffffff,
|
||||||
|
} data_type_max;
|
||||||
|
|
||||||
typedef unsigned char u8;
|
typedef unsigned char u8;
|
||||||
typedef unsigned short u16;
|
typedef unsigned short u16;
|
||||||
typedef unsigned int u32;
|
typedef unsigned int u32;
|
||||||
|
|||||||
+27
-24
@@ -76,9 +76,12 @@ int ParseArgs(int argc, char *argv[], user_settings *usr_settings)
|
|||||||
|
|
||||||
if(!usr_settings->common.outFileName){
|
if(!usr_settings->common.outFileName){
|
||||||
char *source_path = NULL;
|
char *source_path = NULL;
|
||||||
if(usr_settings->ncch.buildNcch0) source_path = usr_settings->common.rsfPath;
|
if(usr_settings->ncch.buildNcch0)
|
||||||
else if(usr_settings->common.workingFileType == infile_ncsd || usr_settings->common.workingFileType == infile_srl) source_path = usr_settings->common.workingFilePath;
|
source_path = usr_settings->common.rsfPath;
|
||||||
else source_path = usr_settings->common.contentPath[0];
|
else if(usr_settings->common.workingFileType == infile_ncsd || usr_settings->common.workingFileType == infile_srl)
|
||||||
|
source_path = usr_settings->common.workingFilePath;
|
||||||
|
else
|
||||||
|
source_path = usr_settings->common.contentPath[0];
|
||||||
u16 outfile_len = strlen(source_path) + 3;
|
u16 outfile_len = strlen(source_path) + 3;
|
||||||
usr_settings->common.outFileName = calloc(outfile_len,sizeof(char));
|
usr_settings->common.outFileName = calloc(outfile_len,sizeof(char));
|
||||||
if(!usr_settings->common.outFileName){
|
if(!usr_settings->common.outFileName){
|
||||||
@@ -117,11 +120,11 @@ void SetDefaults(user_settings *set)
|
|||||||
|
|
||||||
// CIA Info
|
// CIA Info
|
||||||
set->cia.useDataTitleVer = false;
|
set->cia.useDataTitleVer = false;
|
||||||
set->cia.titleVersion[0] = 0xffff; // invalid for detection
|
set->cia.titleVersion[VER_MAJOR] = MAX_U16 // invalid so changes can be detected
|
||||||
set->cia.randomTitleKey = false;
|
set->cia.randomTitleKey = false;
|
||||||
set->common.keys.aes.currentCommonKey = 0x100; // invalid for detection
|
set->common.keys.aes.currentCommonKey = MAX_U8 + 1; // invalid so changes can be detected
|
||||||
for(int i = 0; i < CIA_MAX_CONTENT; i++){
|
for(int i = 0; i < CIA_MAX_CONTENT; i++){
|
||||||
set->cia.contentId[i] = 0x100000000;
|
set->cia.contentId[i] = MAX_U32 + 1; // invalid so changes can be detected
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,7 +279,7 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
|||||||
else if(strcasecmp(app_type,"ECApp") == 0) set->common.keys.accessDescSign.presetType = desc_preset_EC_APP;
|
else if(strcasecmp(app_type,"ECApp") == 0) set->common.keys.accessDescSign.presetType = desc_preset_EC_APP;
|
||||||
else if(strcasecmp(app_type,"Demo") == 0) set->common.keys.accessDescSign.presetType = desc_preset_DEMO;
|
else if(strcasecmp(app_type,"Demo") == 0) set->common.keys.accessDescSign.presetType = desc_preset_DEMO;
|
||||||
else if(strcasecmp(app_type,"DlpChild") == 0 || strcasecmp(app_type,"Dlp") == 0) set->common.keys.accessDescSign.presetType = desc_preset_DLP;
|
else if(strcasecmp(app_type,"DlpChild") == 0 || strcasecmp(app_type,"Dlp") == 0) set->common.keys.accessDescSign.presetType = desc_preset_DLP;
|
||||||
else if(strcasecmp(app_type,"FIRM") == 0) set->common.keys.accessDescSign.presetType = desc_preset_FIRM;
|
//else if(strcasecmp(app_type,"FIRM") == 0) set->common.keys.accessDescSign.presetType = desc_preset_FIRM;
|
||||||
else{
|
else{
|
||||||
fprintf(stderr,"[SETTING ERROR] Accessdesc AppType preset '%s' not valid, please manually configure RSF\n",app_type);
|
fprintf(stderr,"[SETTING ERROR] Accessdesc AppType preset '%s' not valid, please manually configure RSF\n",app_type);
|
||||||
return USR_BAD_ARG;
|
return USR_BAD_ARG;
|
||||||
@@ -404,12 +407,12 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
|||||||
return USR_ARG_REQ_PARAM;
|
return USR_ARG_REQ_PARAM;
|
||||||
}
|
}
|
||||||
set->cia.useNormTitleVer = true;
|
set->cia.useNormTitleVer = true;
|
||||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
u32 ver = strtoul(argv[i+1],NULL,10);
|
||||||
if(tmp > 63){
|
if(ver > VER_MAJOR_MAX){
|
||||||
fprintf(stderr,"[SETTING ERROR] Major version: '%d' is too large, max: '63'\n",tmp);
|
fprintf(stderr,"[SETTING ERROR] Major version: '%d' is too large, max: '%d'\n",ver,VER_MAJOR_MAX);
|
||||||
return USR_BAD_ARG;
|
return USR_BAD_ARG;
|
||||||
}
|
}
|
||||||
set->cia.titleVersion[0] = tmp;
|
set->cia.titleVersion[VER_MAJOR] = ver;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[i],"-minor") == 0){
|
else if(strcmp(argv[i],"-minor") == 0){
|
||||||
@@ -418,12 +421,12 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
|||||||
return USR_ARG_REQ_PARAM;
|
return USR_ARG_REQ_PARAM;
|
||||||
}
|
}
|
||||||
set->cia.useNormTitleVer = true;
|
set->cia.useNormTitleVer = true;
|
||||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
u32 ver = strtoul(argv[i+1],NULL,10);
|
||||||
if(tmp > 63){
|
if(ver > VER_MINOR_MAX){
|
||||||
fprintf(stderr,"[SETTING ERROR] Minor version: '%d' is too large, max: '63'\n",tmp);
|
fprintf(stderr,"[SETTING ERROR] Minor version: '%d' is too large, max: '%d'\n",ver,VER_MINOR_MAX);
|
||||||
return USR_BAD_ARG;
|
return USR_BAD_ARG;
|
||||||
}
|
}
|
||||||
set->cia.titleVersion[1] = tmp;
|
set->cia.titleVersion[VER_MINOR] = ver;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[i],"-micro") == 0){
|
else if(strcmp(argv[i],"-micro") == 0){
|
||||||
@@ -431,12 +434,12 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
|||||||
PrintArgReqParam("-micro",1);
|
PrintArgReqParam("-micro",1);
|
||||||
return USR_ARG_REQ_PARAM;
|
return USR_ARG_REQ_PARAM;
|
||||||
}
|
}
|
||||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
u32 ver = strtoul(argv[i+1],NULL,10);
|
||||||
if(tmp > 15){
|
if(ver > VER_MICRO_MAX){
|
||||||
fprintf(stderr,"[SETTING ERROR] Micro version: '%d' is too large, max: '15'\n",tmp);
|
fprintf(stderr,"[SETTING ERROR] Micro version: '%d' is too large, max: '%d'\n",ver,VER_MICRO_MAX);
|
||||||
return USR_BAD_ARG;
|
return USR_BAD_ARG;
|
||||||
}
|
}
|
||||||
set->cia.titleVersion[2] = tmp;
|
set->cia.titleVersion[VER_MICRO] = ver;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[i],"-dver") == 0){
|
else if(strcmp(argv[i],"-dver") == 0){
|
||||||
@@ -445,13 +448,13 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
|||||||
return USR_ARG_REQ_PARAM;
|
return USR_ARG_REQ_PARAM;
|
||||||
}
|
}
|
||||||
set->cia.useDataTitleVer = true;
|
set->cia.useDataTitleVer = true;
|
||||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
u32 ver = strtoul(argv[i+1],NULL,10);
|
||||||
if(tmp > 4095){
|
if(ver > VER_DVER_MAX){
|
||||||
fprintf(stderr,"[SETTING ERROR] Data version: '%d' is too large, max: '4095'\n",tmp);
|
fprintf(stderr,"[SETTING ERROR] Data version: '%d' is too large, max: '%d'\n",ver,VER_DVER_MAX);
|
||||||
return USR_BAD_ARG;
|
return USR_BAD_ARG;
|
||||||
}
|
}
|
||||||
set->cia.titleVersion[0] = (tmp >> 6) & 63;
|
set->cia.titleVersion[VER_MAJOR] = (ver >> 6) & VER_MAJOR_MAX;
|
||||||
set->cia.titleVersion[1] = tmp & 63;
|
set->cia.titleVersion[VER_MINOR] = ver & VER_MAJOR_MAX;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[i],"-rand") == 0){
|
else if(strcmp(argv[i],"-rand") == 0){
|
||||||
|
|||||||
+19
-2
@@ -1,8 +1,25 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define CCI_MAX_CONTENT 8
|
typedef enum
|
||||||
#define CIA_MAX_CONTENT 65536
|
{
|
||||||
|
CCI_MAX_CONTENT = 8,
|
||||||
|
CIA_MAX_CONTENT = MAX_U16,
|
||||||
|
} content_limits;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
VER_MAJOR,
|
||||||
|
VER_MINOR,
|
||||||
|
VER_MICRO
|
||||||
|
} title_ver_index;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
VER_MAJOR_MAX = 63,
|
||||||
|
VER_MINOR_MAX = 63,
|
||||||
|
VER_MICRO_MAX = 15,
|
||||||
|
VER_DVER_MAX = 4095,
|
||||||
|
} title_ver_max;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user