Store hashes for title.tmd with and without certs

This commit is contained in:
Maschell 2020-12-04 10:45:13 +01:00
parent 163135dd21
commit 674f831ac9
5 changed files with 19 additions and 11 deletions

View File

@ -268,12 +268,12 @@ ApplicationState::ApplicationState() {
void ApplicationState::checkPatchPossible() { void ApplicationState::checkPatchPossible() {
DEBUG_FUNCTION_LINE("Check patch possible"); DEBUG_FUNCTION_LINE("Check patch possible");
InstallerService::eResults result; this->fstAlreadyPatched = (InstallerService::checkFSTAlreadyValid(this->appInfo->path, this->appInfo->fstHash) == InstallerService::SUCCESS);
this->rpxAlreadyPatched = (InstallerService::checkRPXAlreadyValid(this->appInfo->path, RPX_HASH) == InstallerService::SUCCESS);
this->cosAlreadyPatched = (InstallerService::checkCOSAlreadyValid(this->appInfo->path, this->appInfo->cosHash) == InstallerService::SUCCESS);
this->tmdValid = (InstallerService::checkTMDValid(this->appInfo->path, this->appInfo->tmdHash, this->appInfo->tmdWithCertHash) == InstallerService::SUCCESS);
this->fstAlreadyPatched = ((result = InstallerService::checkFSTAlreadyValid(this->appInfo->path, this->appInfo->fstHash)) == InstallerService::SUCCESS); InstallerService::eResults result;
this->rpxAlreadyPatched = ((result = InstallerService::checkRPXAlreadyValid(this->appInfo->path, RPX_HASH)) == InstallerService::SUCCESS);
this->cosAlreadyPatched = ((result = InstallerService::checkCOSAlreadyValid(this->appInfo->path, this->appInfo->cosHash)) == InstallerService::SUCCESS);
this->tmdValid = ((result = InstallerService::checkTMDValid(this->appInfo->path, this->appInfo->tmdHash)) == InstallerService::SUCCESS);
this->fstPatchPossible = ((result = InstallerService::checkFST(this->appInfo->path, this->appInfo->fstHash)) == InstallerService::SUCCESS); this->fstPatchPossible = ((result = InstallerService::checkFST(this->appInfo->path, this->appInfo->fstHash)) == InstallerService::SUCCESS);
if (result != InstallerService::SUCCESS) { if (result != InstallerService::SUCCESS) {

View File

@ -721,9 +721,16 @@ InstallerService::eResults InstallerService::checkFSTAlreadyValid(const std::str
return checkFileHash(filePath, hash); return checkFileHash(filePath, hash);
} }
InstallerService::eResults InstallerService::checkTMDValid(const std::string &path, const std::string &hash) { InstallerService::eResults InstallerService::checkTMDValid(const std::string &path, const std::string &hash, const std::string &tmdWithCertHash) {
std::string filePath = path + "/code/title.tmd"; std::string filePath = path + "/code/title.tmd";
return checkFileHash(filePath, hash);
InstallerService::eResults result = checkFileHash(filePath, hash);
if(result != SUCCESS){
// In some cases the tmd seems to have cert appended
return checkFileHash(filePath, tmdWithCertHash);
}
return result;
} }
InstallerService::eResults InstallerService::checkCOSAlreadyValid(const std::string &path, const std::string &hash) { InstallerService::eResults InstallerService::checkCOSAlreadyValid(const std::string &path, const std::string &hash) {

View File

@ -75,7 +75,7 @@ public:
static eResults checkFSTAlreadyValid(const std::string &path, const std::string &hash); static eResults checkFSTAlreadyValid(const std::string &path, const std::string &hash);
static eResults checkTMDValid(const std::string &path, const std::string &hash); static eResults checkTMDValid(const std::string &path, const std::string &hash, const std::string &tmdWithCertHash);
static eResults checkCOSAlreadyValid(const std::string &path, const std::string &hash); static eResults checkCOSAlreadyValid(const std::string &path, const std::string &hash);

View File

@ -11,9 +11,9 @@ systemXMLInformation systemXMLHashInformation[] = {
}; };
appInformation supportedApps[] = { appInformation supportedApps[] = {
{0x000500101004E000L, "Health and Safety Information [JPN]", false, {'\0'}, "9D34DDD91604D781FDB0727AC75021833304964C", "F6EBF7BC8AE3AF3BB8A42E0CF3FDA051278AEB03", "2CF358E1F51932D305911A6836ED37DB0F94ABE4"}, {0x000500101004E000L, "Health and Safety Information [JPN]", false, {'\0'}, "9D34DDD91604D781FDB0727AC75021833304964C", "F6EBF7BC8AE3AF3BB8A42E0CF3FDA051278AEB03", "D5BABA20526524977009F7EDE25182D8E41CEFD8", "2CF358E1F51932D305911A6836ED37DB0F94ABE4"}, //v129
{0x000500101004E100L, "Health and Safety Information [USA]", false, {'\0'}, "045734666A36C7EF0258A740855886EBDB20D59B", "F6EBF7BC8AE3AF3BB8A42E0CF3FDA051278AEB03", "C53C219FB8F777F9AB8F430D6BE4BC034D5638BA"}, {0x000500101004E100L, "Health and Safety Information [USA]", false, {'\0'}, "045734666A36C7EF0258A740855886EBDB20D59B", "F6EBF7BC8AE3AF3BB8A42E0CF3FDA051278AEB03", "5249DA6B75FEFADEBFBB18ECC93CC109FA8AA630", "C53C219FB8F777F9AB8F430D6BE4BC034D5638BA"}, //v129
{0x000500101004E200L, "Health and Safety Information [PAL]", false, {'\0'}, "130A76F8B36B36D43B88BBC74393D9AFD9CFD2A4", "F6EBF7BC8AE3AF3BB8A42E0CF3FDA051278AEB03", "4A29A60E5FBDAF410B7C22ECAEBDDBF29D1A874E"}, {0x000500101004E200L, "Health and Safety Information [PAL]", false, {'\0'}, "130A76F8B36B36D43B88BBC74393D9AFD9CFD2A4", "F6EBF7BC8AE3AF3BB8A42E0CF3FDA051278AEB03", "87749A8D3EE8694225423953DCF04B01F8DA2F15", "4A29A60E5FBDAF410B7C22ECAEBDDBF29D1A874E"}, //v129
{0, nullptr, false, {'\0'}, {'\0'}, {'\0'}}, {0, nullptr, false, {'\0'}, {'\0'}, {'\0'}},
}; };

View File

@ -34,6 +34,7 @@ typedef struct compatApps {
char fstHash[41]; char fstHash[41];
char cosHash[41]; char cosHash[41];
char tmdHash[41]; char tmdHash[41];
char tmdWithCertHash[41];
} appInformation; } appInformation;
typedef struct _gList_t { typedef struct _gList_t {