mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-03 00:39:14 +00:00
[makerom] Cleaned up "desc" presets
This commit is contained in:
+44
-270
@@ -5,7 +5,6 @@
|
||||
|
||||
#include "desc/presets.h"
|
||||
#include "desc/dev_sigdata.h"
|
||||
#include "desc/prod_sigdata.h"
|
||||
|
||||
const int RSF_RSA_DATA_LEN = 344;
|
||||
const int RSF_DESC_DATA_LEN = 684;
|
||||
@@ -14,8 +13,9 @@ const int RSF_DESC_DATA_LEN = 684;
|
||||
int accessdesc_SignWithKey(exheader_settings *exhdrset);
|
||||
int accessdesc_GetSignFromRsf(exheader_settings *exhdrset);
|
||||
int accessdesc_GetSignFromPreset(exheader_settings *exhdrset);
|
||||
void accessdesc_GetPresetData(u8 **desc, u8 **accessDesc, u8 **depList, keys_struct *keys);
|
||||
void accessdesc_GetPresetSigData(u8 **accessDescSig, u8 **cxiPubk, u8 **cxiPvtk, keys_struct *keys);
|
||||
const CtrSdkDesc* accessdesc_GetPresetData(keys_struct *keys);
|
||||
const CtrSdkDescSignData* accessdesc_GetPresetSignData(keys_struct *keys);
|
||||
const CtrSdkDepList* accessdesc_GetPresetDependencyList(keys_struct *keys);
|
||||
|
||||
int set_AccessDesc(exheader_settings *exhdrset)
|
||||
{
|
||||
@@ -121,48 +121,41 @@ int accessdesc_GetSignFromRsf(exheader_settings *exhdrset)
|
||||
|
||||
int accessdesc_GetSignFromPreset(exheader_settings *exhdrset)
|
||||
{
|
||||
u8 *desc = NULL;
|
||||
u8 *accessDesc = NULL;
|
||||
u8 *depList = NULL;
|
||||
const CtrSdkDesc *desc = accessdesc_GetPresetData(exhdrset->keys);
|
||||
const CtrSdkDescSignData *pre_sign = accessdesc_GetPresetSignData(exhdrset->keys);
|
||||
const CtrSdkDepList *dependency_list = accessdesc_GetPresetDependencyList(exhdrset->keys);
|
||||
|
||||
u8 *accessDescSig = NULL;
|
||||
u8 *cxiPubk = NULL;
|
||||
u8 *cxiPvtk = NULL;
|
||||
|
||||
accessdesc_GetPresetData(&desc,&accessDesc,&depList,exhdrset->keys);
|
||||
accessdesc_GetPresetSigData(&accessDescSig,&cxiPubk,&cxiPvtk,exhdrset->keys);
|
||||
|
||||
// Error Checking
|
||||
if(!desc || !depList){
|
||||
if(!desc || !dependency_list){
|
||||
fprintf(stderr,"[ACEXDESC ERROR] AccessDesc template is unavailable, please configure RSF file\n");
|
||||
return CANNOT_SIGN_ACCESSDESC;
|
||||
}
|
||||
|
||||
if((!cxiPubk || !cxiPvtk || !accessDesc || !accessDescSig) && exhdrset->keys->rsa.requiresPresignedDesc){
|
||||
if(!pre_sign->modulus && exhdrset->keys->rsa.requiresPresignedDesc){
|
||||
fprintf(stderr,"[ACEXDESC ERROR] This AccessDesc template needs to be signed, the current keyset is incapable of doing so. Please configure RSF file with the appropriate signature data.\n");
|
||||
return CANNOT_SIGN_ACCESSDESC;
|
||||
}
|
||||
|
||||
|
||||
// Setting data in Exheader
|
||||
// Dependency List
|
||||
memcpy(exhdrset->exHdr->dependencyList,depList,0x180);
|
||||
memcpy(exhdrset->exHdr->dependencyList, dependency_list->dependency, 0x180);
|
||||
|
||||
// Backing Up Non Preset Data
|
||||
u8 ProgramID[8];
|
||||
exhdr_StorageInfo StorageInfoBackup;
|
||||
exhdr_ARM9AccessControlInfo Arm9Desc;
|
||||
memcpy(ProgramID,exhdrset->exHdr->arm11SystemLocalCapabilities.programId,8);
|
||||
memcpy(&StorageInfoBackup,&exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo,sizeof(exhdr_StorageInfo));
|
||||
memcpy(&Arm9Desc,&exhdrset->exHdr->arm9AccessControlInfo,sizeof(exhdr_ARM9AccessControlInfo));
|
||||
memcpy(ProgramID, exhdrset->exHdr->arm11SystemLocalCapabilities.programId, 8);
|
||||
memcpy(&StorageInfoBackup, &exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo, sizeof(exhdr_StorageInfo));
|
||||
memcpy(&Arm9Desc, &exhdrset->exHdr->arm9AccessControlInfo, sizeof(exhdr_ARM9AccessControlInfo));
|
||||
|
||||
// Setting Preset Data
|
||||
memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities,desc,0x200);
|
||||
memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities, desc->exheader_desc, 0x200);
|
||||
|
||||
// Restoring Non Preset Data
|
||||
memcpy(exhdrset->exHdr->arm11SystemLocalCapabilities.programId,ProgramID,8);
|
||||
memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo,&StorageInfoBackup,sizeof(exhdr_StorageInfo));
|
||||
memcpy(&exhdrset->exHdr->arm9AccessControlInfo,&Arm9Desc,sizeof(exhdr_ARM9AccessControlInfo));
|
||||
memcpy(exhdrset->exHdr->arm11SystemLocalCapabilities.programId, ProgramID, 8);
|
||||
memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo, &StorageInfoBackup, sizeof(exhdr_StorageInfo));
|
||||
memcpy(&exhdrset->exHdr->arm9AccessControlInfo, &Arm9Desc, sizeof(exhdr_ARM9AccessControlInfo));
|
||||
|
||||
|
||||
// Setting AccessDesc Area
|
||||
@@ -171,265 +164,46 @@ int accessdesc_GetSignFromPreset(exheader_settings *exhdrset)
|
||||
return accessdesc_SignWithKey(exhdrset);
|
||||
|
||||
// Otherwise set static data & ncch hdr sig info
|
||||
memcpy(exhdrset->keys->rsa.cxiHdrPub,cxiPubk,0x100);
|
||||
memcpy(exhdrset->keys->rsa.cxiHdrPvt,cxiPvtk,0x100);
|
||||
memcpy(&exhdrset->acexDesc->signature,accessDescSig,0x100);
|
||||
memcpy(&exhdrset->acexDesc->ncchRsaPubKey,cxiPubk,0x100);
|
||||
memcpy(&exhdrset->acexDesc->arm11SystemLocalCapabilities,accessDesc,0x200);
|
||||
memcpy(exhdrset->keys->rsa.cxiHdrPub, pre_sign->modulus, 0x100);
|
||||
memcpy(exhdrset->keys->rsa.cxiHdrPvt, pre_sign->priv_exponent, 0x100);
|
||||
memcpy(&exhdrset->acexDesc->signature, pre_sign->access_desc_signature, 0x100);
|
||||
memcpy(&exhdrset->acexDesc->ncchRsaPubKey, pre_sign->modulus, 0x100);
|
||||
memcpy(&exhdrset->acexDesc->arm11SystemLocalCapabilities, desc->signed_desc, 0x200);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void accessdesc_GetPresetData(u8 **desc, u8 **accessDesc, u8 **depList, keys_struct *keys)
|
||||
const CtrSdkDesc* accessdesc_GetPresetData(keys_struct *keys)
|
||||
{
|
||||
if(keys->accessDescSign.presetType == desc_preset_APP){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x1B:
|
||||
case 0x1C:
|
||||
*desc = (u8*)app_fw1B_desc_data;
|
||||
*accessDesc = (u8*)app_fw1B_acex_data;
|
||||
*depList = (u8*)fw1B_dep_list;
|
||||
break;
|
||||
case 0x1D:
|
||||
*desc = (u8*)app_fw1D_desc_data;
|
||||
*accessDesc = (u8*)app_fw1D_acex_data;
|
||||
*depList = (u8*)fw1D_dep_list;
|
||||
break;
|
||||
case 0x1E:
|
||||
*desc = (u8*)app_fw1E_desc_data;
|
||||
*accessDesc = (u8*)app_fw1E_acex_data;
|
||||
*depList = (u8*)fw1D_dep_list;
|
||||
break;
|
||||
case 0x20:
|
||||
*desc = (u8*)app_fw20_desc_data;
|
||||
*accessDesc = (u8*)app_fw20_acex_data;
|
||||
*depList = (u8*)fw20_dep_list;
|
||||
break;
|
||||
case 0x21:
|
||||
*desc = (u8*)app_fw21_desc_data;
|
||||
*accessDesc = (u8*)app_fw21_acex_data;
|
||||
*depList = (u8*)fw21_dep_list;
|
||||
break;
|
||||
case 0x23:
|
||||
*desc = (u8*)app_fw23_desc_data;
|
||||
*accessDesc = (u8*)app_fw23_acex_data;
|
||||
*depList = (u8*)fw23_dep_list;
|
||||
break;
|
||||
case 0x27:
|
||||
*desc = (u8*)app_fw27_desc_data;
|
||||
*accessDesc = (u8*)app_fw27_acex_data;
|
||||
*depList = (u8*)fw27_dep_list;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_EC_APP){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x20:
|
||||
*desc = (u8*)ecapp_fw20_desc_data;
|
||||
*accessDesc = (u8*)ecapp_fw20_acex_data;
|
||||
*depList = (u8*)fw20_dep_list;
|
||||
break;
|
||||
case 0x23:
|
||||
*desc = (u8*)ecapp_fw23_desc_data;
|
||||
*accessDesc = (u8*)ecapp_fw23_acex_data;
|
||||
*depList = (u8*)fw23_dep_list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_DLP){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x1B:
|
||||
case 0x1C:
|
||||
*desc = (u8*)dlp_fw1B_desc_data;
|
||||
*accessDesc = (u8*)dlp_fw1B_acex_data;
|
||||
*depList = (u8*)fw1B_dep_list;
|
||||
break;
|
||||
case 0x1D:
|
||||
*desc = (u8*)dlp_fw1D_desc_data;
|
||||
*accessDesc = (u8*)dlp_fw1D_acex_data;
|
||||
*depList = (u8*)fw1D_dep_list;
|
||||
break;
|
||||
case 0x21:
|
||||
*desc = (u8*)dlp_fw21_desc_data;
|
||||
*accessDesc = (u8*)dlp_fw21_acex_data;
|
||||
*depList = (u8*)fw21_dep_list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_DEMO){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x1E:
|
||||
*desc = (u8*)demo_fw1E_desc_data;
|
||||
*accessDesc = (u8*)demo_fw1E_acex_data;
|
||||
*depList = (u8*)fw1D_dep_list;
|
||||
break;
|
||||
case 0x21:
|
||||
*desc = (u8*)demo_fw21_desc_data;
|
||||
*accessDesc = (u8*)demo_fw21_acex_data;
|
||||
*depList = (u8*)fw21_dep_list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_FIRM){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
default:
|
||||
*desc = (u8*)firm_fw26_desc_data;
|
||||
*accessDesc = (u8*)firm_fw26_acex_data;
|
||||
*depList = (u8*)firm_fwXX_dep_list;
|
||||
break;
|
||||
for (int i = 0; i < sizeof(kDescPresets) / sizeof(CtrSdkDesc); i++) {
|
||||
if (kDescPresets[i].type == keys->accessDescSign.presetType && kDescPresets[i].fw_minor == keys->accessDescSign.targetFirmware) {
|
||||
return &kDescPresets[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void accessdesc_GetPresetSigData(u8 **accessDescSig, u8 **cxiPubk, u8 **cxiPvtk, keys_struct *keys)
|
||||
const CtrSdkDescSignData* accessdesc_GetPresetSignData(keys_struct *keys)
|
||||
{
|
||||
if(keys->accessDescSign.presetType == desc_preset_APP){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x1B:
|
||||
case 0x1C:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)app_fw1B_dev_acexsig;
|
||||
*cxiPubk = (u8*)app_fw1B_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)app_fw1B_dev_hdrpvt;
|
||||
}
|
||||
break;
|
||||
case 0x1D:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)app_fw1D_dev_acexsig;
|
||||
*cxiPubk = (u8*)app_fw1D_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)app_fw1D_dev_hdrpvt;
|
||||
}
|
||||
if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)app_fw1D_prod_acexsig;
|
||||
*cxiPubk = (u8*)app_fw1D_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x1E:
|
||||
if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)app_fw1E_prod_acexsig;
|
||||
*cxiPubk = (u8*)app_fw1E_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x20:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)app_fw20_dev_acexsig;
|
||||
*cxiPubk = (u8*)app_fw20_dev_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)app_fw20_prod_acexsig;
|
||||
*cxiPubk = (u8*)app_fw20_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x21:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)app_fw21_dev_acexsig;
|
||||
*cxiPubk = (u8*)app_fw21_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)app_fw21_dev_hdrpvt;
|
||||
}
|
||||
else if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)app_fw21_prod_acexsig;
|
||||
*cxiPubk = (u8*)app_fw21_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x23:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)app_fw23_dev_acexsig;
|
||||
*cxiPubk = (u8*)app_fw23_dev_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
else if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)app_fw23_prod_acexsig;
|
||||
*cxiPubk = (u8*)app_fw23_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x27:
|
||||
if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)app_fw27_prod_acexsig;
|
||||
*cxiPubk = (u8*)app_fw27_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
if (keys->keyset != pki_DEVELOPMENT) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sizeof(kDevDescSignData) / sizeof(CtrSdkDescSignData); i++) {
|
||||
if (kDevDescSignData[i].type == keys->accessDescSign.presetType && kDevDescSignData[i].fw_minor == keys->accessDescSign.targetFirmware) {
|
||||
return &kDevDescSignData[i];
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_EC_APP){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x20:
|
||||
if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)ecapp_fw20_prod_acexsig;
|
||||
*cxiPubk = (u8*)ecapp_fw20_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x23:
|
||||
if(keys->keyset == pki_PRODUCTION){
|
||||
*accessDescSig = (u8*)ecapp_fw23_prod_acexsig;
|
||||
*cxiPubk = (u8*)ecapp_fw23_prod_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_DLP){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x1B:
|
||||
case 0x1C:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)dlp_fw1B_dev_acexsig;
|
||||
*cxiPubk = (u8*)dlp_fw1B_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)dlp_fw1B_dev_hdrpvt;
|
||||
}
|
||||
break;
|
||||
case 0x1D:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)dlp_fw1D_dev_acexsig;
|
||||
*cxiPubk = (u8*)dlp_fw1D_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)dlp_fw1D_dev_hdrpvt;
|
||||
}
|
||||
break;
|
||||
case 0x21:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)dlp_fw21_dev_acexsig;
|
||||
*cxiPubk = (u8*)dlp_fw21_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)dlp_fw21_dev_hdrpvt;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_DEMO){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x1E:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)demo_fw1E_dev_acexsig;
|
||||
*cxiPubk = (u8*)demo_fw1E_dev_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
case 0x21:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)demo_fw21_dev_acexsig;
|
||||
*cxiPubk = (u8*)demo_fw21_dev_hdrpub;
|
||||
*cxiPvtk = (u8*)demo_fw21_dev_hdrpvt;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(keys->accessDescSign.presetType == desc_preset_FIRM){
|
||||
switch(keys->accessDescSign.targetFirmware){
|
||||
case 0x26:
|
||||
if(keys->keyset == pki_DEVELOPMENT){
|
||||
*accessDescSig = (u8*)firm_fw26_dev_acexsig;
|
||||
*cxiPubk = (u8*)firm_fw26_dev_hdrpub;
|
||||
*cxiPvtk = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const CtrSdkDepList* accessdesc_GetPresetDependencyList(keys_struct *keys)
|
||||
{
|
||||
for (int i = 0; i < sizeof(kExheaderDependencyLists) / sizeof(CtrSdkDepList); i++) {
|
||||
if (kExheaderDependencyLists[i].fw_minor == keys->accessDescSign.targetFirmware) {
|
||||
return &kExheaderDependencyLists[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
Reference in New Issue
Block a user