diff options
| author | 2018-09-23 20:37:27 -0400 | |
|---|---|---|
| committer | 2018-10-07 13:15:11 -0400 | |
| commit | ce05df0a6dea513cf3f32a582535ccff61f6bcee (patch) | |
| tree | df8fd7b173545be91bae576ca32f6ef9ca0f717e /src/core/crypto/key_manager.cpp | |
| parent | key_manager: Rename KEK to Kek (diff) | |
| download | yuzu-ce05df0a6dea513cf3f32a582535ccff61f6bcee.tar.gz yuzu-ce05df0a6dea513cf3f32a582535ccff61f6bcee.tar.xz yuzu-ce05df0a6dea513cf3f32a582535ccff61f6bcee.zip | |
key_manager: Add support for console-specific keyfile
Diffstat (limited to 'src/core/crypto/key_manager.cpp')
| -rw-r--r-- | src/core/crypto/key_manager.cpp | 10 |
1 files changed, 7 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 | ||