summaryrefslogtreecommitdiff
path: root/src/core/crypto/key_manager.cpp
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-09-23 20:37:27 -0400
committerGravatar Zach Hilman2018-10-07 13:15:11 -0400
commitce05df0a6dea513cf3f32a582535ccff61f6bcee (patch)
treedf8fd7b173545be91bae576ca32f6ef9ca0f717e /src/core/crypto/key_manager.cpp
parentkey_manager: Rename KEK to Kek (diff)
downloadyuzu-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.cpp10
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
143void KeyManager::LoadFromFile(const std::string& filename, bool is_title_keys) { 145void 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
234void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { 238void 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