diff options
| -rw-r--r-- | src/core/crypto/key_manager.cpp | 10 | ||||
| -rw-r--r-- | src/core/crypto/key_manager.h | 6 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 467eb423e..9f47536d1 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp | |||
| @@ -138,6 +138,8 @@ KeyManager::KeyManager() { | |||
| 138 | 138 | ||
| 139 | AttemptLoadKeyFile(yuzu_keys_dir, hactool_keys_dir, "title.keys", true); | 139 | AttemptLoadKeyFile(yuzu_keys_dir, hactool_keys_dir, "title.keys", true); |
| 140 | AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, "title.keys_autogenerated", true); | 140 | AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, "title.keys_autogenerated", true); |
| 141 | AttemptLoadKeyFile(yuzu_keys_dir, hactool_keys_dir, "console.keys", false); | ||
| 142 | AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, "console.keys_autogenerated", false); | ||
| 141 | } | 143 | } |
| 142 | 144 | ||
| 143 | void KeyManager::LoadFromFile(const std::string& filename, bool is_title_keys) { | 145 | void KeyManager::LoadFromFile(const std::string& filename, bool is_title_keys) { |
| @@ -213,8 +215,10 @@ void KeyManager::WriteKeyToFile(bool title_key, std::string_view keyname, | |||
| 213 | const std::array<u8, Size>& key) { | 215 | const std::array<u8, Size>& key) { |
| 214 | const std::string yuzu_keys_dir = FileUtil::GetUserPath(FileUtil::UserPath::KeysDir); | 216 | const std::string yuzu_keys_dir = FileUtil::GetUserPath(FileUtil::UserPath::KeysDir); |
| 215 | std::string filename = "title.keys_autogenerated"; | 217 | std::string filename = "title.keys_autogenerated"; |
| 216 | if (!title_key) | 218 | if (category == KeyCategory::Standard) |
| 217 | filename = dev_mode ? "dev.keys_autogenerated" : "prod.keys_autogenerated"; | 219 | filename = dev_mode ? "dev.keys_autogenerated" : "prod.keys_autogenerated"; |
| 220 | else if (category == KeyCategory::Console) | ||
| 221 | filename = "console.keys_autogenerated"; | ||
| 218 | const auto add_info_text = !FileUtil::Exists(yuzu_keys_dir + DIR_SEP + filename); | 222 | const auto add_info_text = !FileUtil::Exists(yuzu_keys_dir + DIR_SEP + filename); |
| 219 | FileUtil::CreateFullPath(yuzu_keys_dir + DIR_SEP + filename); | 223 | FileUtil::CreateFullPath(yuzu_keys_dir + DIR_SEP + filename); |
| 220 | std::ofstream file(yuzu_keys_dir + DIR_SEP + filename, std::ios::app); | 224 | std::ofstream file(yuzu_keys_dir + DIR_SEP + filename, std::ios::app); |
| @@ -228,7 +232,7 @@ void KeyManager::WriteKeyToFile(bool title_key, std::string_view keyname, | |||
| 228 | } | 232 | } |
| 229 | 233 | ||
| 230 | file << fmt::format("\n{} = {}", keyname, Common::HexArrayToString(key)); | 234 | file << fmt::format("\n{} = {}", keyname, Common::HexArrayToString(key)); |
| 231 | AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, filename, title_key); | 235 | AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, filename, category == KeyCategory::Title); |
| 232 | } | 236 | } |
| 233 | 237 | ||
| 234 | void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { | 238 | void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { |
| @@ -261,7 +265,7 @@ void KeyManager::SetKey(S256KeyType id, Key256 key, u64 field1, u64 field2) { | |||
| 261 | std::tie(id, field1, field2); | 265 | std::tie(id, field1, field2); |
| 262 | }); | 266 | }); |
| 263 | if (iter != s256_file_id.end()) | 267 | if (iter != s256_file_id.end()) |
| 264 | WriteKeyToFile(false, iter->first, key); | 268 | WriteKeyToFile(KeyCategory::Standard, iter->first, key); |
| 265 | s256_keys[{id, field1, field2}] = key; | 269 | s256_keys[{id, field1, field2}] = key; |
| 266 | } | 270 | } |
| 267 | 271 | ||
diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index 8bd33840d..ffc13fa8f 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h | |||
| @@ -26,6 +26,12 @@ using SHA256Hash = std::array<u8, 0x20>; | |||
| 26 | static_assert(sizeof(Key128) == 16, "Key128 must be 128 bytes big."); | 26 | static_assert(sizeof(Key128) == 16, "Key128 must be 128 bytes big."); |
| 27 | static_assert(sizeof(Key256) == 32, "Key128 must be 128 bytes big."); | 27 | static_assert(sizeof(Key256) == 32, "Key128 must be 128 bytes big."); |
| 28 | 28 | ||
| 29 | enum class KeyCategory : u8 { | ||
| 30 | Standard, | ||
| 31 | Title, | ||
| 32 | Console, | ||
| 33 | }; | ||
| 34 | |||
| 29 | enum class S256KeyType : u64 { | 35 | enum class S256KeyType : u64 { |
| 30 | Header, // | 36 | Header, // |
| 31 | SDKeySource, // f1=SDKeyType | 37 | SDKeySource, // f1=SDKeyType |