From d3f328ee45a991dd0708700fd492741447268b3f Mon Sep 17 00:00:00 2001 From: Levi Akatsuki Date: Mon, 18 Mar 2024 19:44:34 +0000 Subject: [PATCH] Revert "Removing Warning" This reverts merge request !185 --- .gitignore | 1 - src/core/crypto/key_manager.cpp | 33 +++++++++------------------------ src/core/crypto/key_manager.h | 2 +- src/core/loader/nax.cpp | 4 ++++ src/core/loader/nsp.cpp | 4 ++++ src/core/loader/xci.cpp | 4 ++++ src/suyu/main.cpp | 7 +++---- 7 files changed, 25 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index 2bf2c86d8c..0e06e5aa00 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ # Build directory [Bb]uild*/ doc-build/ -cmake-build*/ # Generated source files src/common/scm_rev.cpp diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 5a1943a5ce..e1b520333d 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -648,14 +648,14 @@ void KeyManager::ReloadKeys() { if (Settings::values.use_dev_keys) { dev_mode = true; - LoadFromFile(suyu_keys_dir / "dev.keys", 1); + LoadFromFile(suyu_keys_dir / "dev.keys", false); } else { dev_mode = false; - LoadFromFile(suyu_keys_dir / "prod.keys", 2); + LoadFromFile(suyu_keys_dir / "prod.keys", false); } - LoadFromFile(suyu_keys_dir / "title.keys", 3); - LoadFromFile(suyu_keys_dir / "console.keys", 4); + LoadFromFile(suyu_keys_dir / "title.keys", true); + LoadFromFile(suyu_keys_dir / "console.keys", false); } static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_t length) { @@ -666,26 +666,11 @@ static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_ [](u8 c) { return std::isxdigit(c); }); } -void KeyManager::LoadFromFile(const std::filesystem::path& file_path, int key_type) { +void KeyManager::LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys) { if (!Common::FS::Exists(file_path)) { - switch (key_type) { - case 1: - LOG_ERROR(Crypto, "Issue with Development key file at '{}': File not found", - file_path.generic_string()); - return; - case 2: - LOG_ERROR(Crypto, "Issue with Production key file at '{}': File not found", - file_path.generic_string()); - return; - case 3: - LOG_INFO(Crypto, "Issue with Title key file at '{}': File not found", - file_path.generic_string()); - case 4: - LOG_INFO(Crypto, "Issue with Console key file at '{}': File not found", - file_path.generic_string()); - default: - LOG_ERROR(Crypto, "Unknown Key Type"); - } + LOG_ERROR(Crypto, "Failed to load key file at '{}': File not found", + file_path.generic_string()); + return; } std::ifstream file; @@ -1322,4 +1307,4 @@ bool KeyManager::AddTicket(const Ticket& ticket) { SetKey(S128KeyType::Titlekey, key.value(), rights_id[1], rights_id[0]); return true; } -} // namespace Core::Crypto \ No newline at end of file +} // namespace Core::Crypto diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index 0d4cfe72af..005062345e 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -312,7 +312,7 @@ private: RSAKeyPair<2048> eticket_rsa_keypair{}; bool dev_mode; - void LoadFromFile(const std::filesystem::path& file_path, int key_type); + void LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys); void DeriveGeneralPurposeKeys(std::size_t crypto_revision); diff --git a/src/core/loader/nax.cpp b/src/core/loader/nax.cpp index 3b7b005ff4..725cb228d0 100644 --- a/src/core/loader/nax.cpp +++ b/src/core/loader/nax.cpp @@ -55,6 +55,10 @@ AppLoader_NAX::LoadResult AppLoader_NAX::Load(Kernel::KProcess& process, Core::S return {ResultStatus::ErrorMissingProductionKeyFile, {}}; } + if (!Core::Crypto::KeyManager::KeyFileExists(true)) { + return {ResultStatus::ErrorMissingProductionKeyFile, {}}; + } + return {ResultStatus::ErrorNAXInconvertibleToNCA, {}}; } diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp index 3016d5f25f..39198c9b66 100644 --- a/src/core/loader/nsp.cpp +++ b/src/core/loader/nsp.cpp @@ -102,6 +102,10 @@ AppLoader_NSP::LoadResult AppLoader_NSP::Load(Kernel::KProcess& process, Core::S return {ResultStatus::ErrorMissingProductionKeyFile, {}}; } + if (!Core::Crypto::KeyManager::KeyFileExists(true)) { + return {ResultStatus::ErrorMissingProductionKeyFile, {}}; + } + return {ResultStatus::ErrorNSPMissingProgramNCA, {}}; } diff --git a/src/core/loader/xci.cpp b/src/core/loader/xci.cpp index e9abb199a1..d4722ac4c0 100644 --- a/src/core/loader/xci.cpp +++ b/src/core/loader/xci.cpp @@ -71,6 +71,10 @@ AppLoader_XCI::LoadResult AppLoader_XCI::Load(Kernel::KProcess& process, Core::S return {ResultStatus::ErrorMissingProductionKeyFile, {}}; } + if (!xci->HasProgramNCA() && !Core::Crypto::KeyManager::KeyFileExists(true)) { + return {ResultStatus::ErrorMissingProductionKeyFile, {}}; + } + const auto result = nca_loader->Load(process, system); if (result.first != ResultStatus::Success) { return result; diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp index 92615564d9..4b9265febf 100644 --- a/src/suyu/main.cpp +++ b/src/suyu/main.cpp @@ -1755,10 +1755,9 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa if (!ContentManager::AreKeysPresent()) { QMessageBox::warning(this, tr("Derivation Components Missing"), tr("Encryption keys are missing. " - "In order to use this emulator" - "you need to provide your own prod.keys" - "Some games might also require your own title.keys as well" - "in order to play them.")); + "You need to provide both your own title.keys " + "and your own prod.keys " + "in order to play games")); return false; }