[makerom] Cleaned up "desc" presets

This commit is contained in:
jakcron
2015-12-23 14:49:19 +08:00
parent 59c5df9d8c
commit 103fc09d72
11 changed files with 272 additions and 815 deletions
+44 -270
View File
@@ -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;
}