diff options
| author | 2018-09-23 20:44:39 -0400 | |
|---|---|---|
| committer | 2018-10-07 13:15:11 -0400 | |
| commit | e4602748d6a7ba1a9bed95205e4f806cb2653af1 (patch) | |
| tree | 97c902a4df19b47f18aa8c43be4916a82b414587 /src/core/crypto/key_manager.cpp | |
| parent | key_manager: Add support for comments in keyfiles (diff) | |
| download | yuzu-e4602748d6a7ba1a9bed95205e4f806cb2653af1.tar.gz yuzu-e4602748d6a7ba1a9bed95205e4f806cb2653af1.tar.xz yuzu-e4602748d6a7ba1a9bed95205e4f806cb2653af1.zip | |
key_manager: Add support for crypto revisions past 04
Diffstat (limited to 'src/core/crypto/key_manager.cpp')
| -rw-r--r-- | src/core/crypto/key_manager.cpp | 106 |
1 files changed, 63 insertions, 43 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 6b93aee04..85776cdcb 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp | |||
| @@ -254,7 +254,30 @@ void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { | |||
| 254 | std::tie(id, field1, field2); | 254 | std::tie(id, field1, field2); |
| 255 | }); | 255 | }); |
| 256 | if (iter2 != s128_file_id.end()) | 256 | if (iter2 != s128_file_id.end()) |
| 257 | WriteKeyToFile(false, iter2->first, key); | 257 | WriteKeyToFile(category, iter2->first, key); |
| 258 | |||
| 259 | // Variable cases | ||
| 260 | if (id == S128KeyType::KeyArea) { | ||
| 261 | const static std::array<const char*, 3> kak_names = {"key_area_key_application_{:02X}", | ||
| 262 | "key_area_key_ocean_{:02X}", | ||
| 263 | "key_area_key_system_{:02X}"}; | ||
| 264 | WriteKeyToFile(category, fmt::format(kak_names.at(field2), field1), key); | ||
| 265 | } else if (id == S128KeyType::Master) { | ||
| 266 | WriteKeyToFile(category, fmt::format("master_key_{:02X}", field1), key); | ||
| 267 | } else if (id == S128KeyType::Package1) { | ||
| 268 | WriteKeyToFile(category, fmt::format("package1_key_{:02X}", field1), key); | ||
| 269 | } else if (id == S128KeyType::Package2) { | ||
| 270 | WriteKeyToFile(category, fmt::format("package2_key_{:02X}", field1), key); | ||
| 271 | } else if (id == S128KeyType::Titlekek) { | ||
| 272 | WriteKeyToFile(category, fmt::format("titlekek_{:02X}", field1), key); | ||
| 273 | } else if (id == S128KeyType::Keyblob) { | ||
| 274 | WriteKeyToFile(category, fmt::format("keyblob_key_{:02X}", field1), key); | ||
| 275 | } else if (id == S128KeyType::KeyblobMAC) { | ||
| 276 | WriteKeyToFile(category, fmt::format("keyblob_mac_key_{:02X}", field1), key); | ||
| 277 | } else if (id == S128KeyType::Source && field1 == static_cast<u64>(SourceKeyType::Keyblob)) { | ||
| 278 | WriteKeyToFile(category, fmt::format("keyblob_key_source_{:02X}", field2), key); | ||
| 279 | } | ||
| 280 | |||
| 258 | s128_keys[{id, field1, field2}] = key; | 281 | s128_keys[{id, field1, field2}] = key; |
| 259 | } | 282 | } |
| 260 | 283 | ||
| @@ -299,58 +322,55 @@ void KeyManager::DeriveSDSeedLazy() { | |||
| 299 | } | 322 | } |
| 300 | 323 | ||
| 301 | const boost::container::flat_map<std::string, KeyIndex<S128KeyType>> KeyManager::s128_file_id = { | 324 | const boost::container::flat_map<std::string, KeyIndex<S128KeyType>> KeyManager::s128_file_id = { |
| 302 | {"master_key_00", {S128KeyType::Master, 0, 0}}, | ||
| 303 | {"master_key_01", {S128KeyType::Master, 1, 0}}, | ||
| 304 | {"master_key_02", {S128KeyType::Master, 2, 0}}, | ||
| 305 | {"master_key_03", {S128KeyType::Master, 3, 0}}, | ||
| 306 | {"master_key_04", {S128KeyType::Master, 4, 0}}, | ||
| 307 | {"package1_key_00", {S128KeyType::Package1, 0, 0}}, | ||
| 308 | {"package1_key_01", {S128KeyType::Package1, 1, 0}}, | ||
| 309 | {"package1_key_02", {S128KeyType::Package1, 2, 0}}, | ||
| 310 | {"package1_key_03", {S128KeyType::Package1, 3, 0}}, | ||
| 311 | {"package1_key_04", {S128KeyType::Package1, 4, 0}}, | ||
| 312 | {"package2_key_00", {S128KeyType::Package2, 0, 0}}, | ||
| 313 | {"package2_key_01", {S128KeyType::Package2, 1, 0}}, | ||
| 314 | {"package2_key_02", {S128KeyType::Package2, 2, 0}}, | ||
| 315 | {"package2_key_03", {S128KeyType::Package2, 3, 0}}, | ||
| 316 | {"package2_key_04", {S128KeyType::Package2, 4, 0}}, | ||
| 317 | {"titlekek_00", {S128KeyType::Titlekek, 0, 0}}, | ||
| 318 | {"titlekek_01", {S128KeyType::Titlekek, 1, 0}}, | ||
| 319 | {"titlekek_02", {S128KeyType::Titlekek, 2, 0}}, | ||
| 320 | {"titlekek_03", {S128KeyType::Titlekek, 3, 0}}, | ||
| 321 | {"titlekek_04", {S128KeyType::Titlekek, 4, 0}}, | ||
| 322 | {"eticket_rsa_kek", {S128KeyType::ETicketRSAKek, 0, 0}}, | 325 | {"eticket_rsa_kek", {S128KeyType::ETicketRSAKek, 0, 0}}, |
| 323 | {"key_area_key_application_00", | 326 | {"eticket_rsa_kek_source", |
| 324 | {S128KeyType::KeyArea, 0, static_cast<u64>(KeyAreaKeyType::Application)}}, | 327 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::ETicketKek), 0}}, |
| 325 | {"key_area_key_application_01", | 328 | {"eticket_rsa_kekek_source", |
| 326 | {S128KeyType::KeyArea, 1, static_cast<u64>(KeyAreaKeyType::Application)}}, | 329 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::ETicketKekek), 0}}, |
| 327 | {"key_area_key_application_02", | 330 | {"rsa_kek_mask_0", {S128KeyType::RSAKek, static_cast<u64>(RSAKekType::Mask0), 0}}, |
| 328 | {S128KeyType::KeyArea, 2, static_cast<u64>(KeyAreaKeyType::Application)}}, | 331 | {"rsa_kek_seed_3", {S128KeyType::RSAKek, static_cast<u64>(RSAKekType::Seed3), 0}}, |
| 329 | {"key_area_key_application_03", | 332 | {"rsa_oaep_kek_generation_source", |
| 330 | {S128KeyType::KeyArea, 3, static_cast<u64>(KeyAreaKeyType::Application)}}, | 333 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::RSAOaepKekGeneration), 0}}, |
| 331 | {"key_area_key_application_04", | 334 | {"sd_card_kek_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::SDKek), 0}}, |
| 332 | {S128KeyType::KeyArea, 4, static_cast<u64>(KeyAreaKeyType::Application)}}, | ||
| 333 | {"key_area_key_ocean_00", {S128KeyType::KeyArea, 0, static_cast<u64>(KeyAreaKeyType::Ocean)}}, | ||
| 334 | {"key_area_key_ocean_01", {S128KeyType::KeyArea, 1, static_cast<u64>(KeyAreaKeyType::Ocean)}}, | ||
| 335 | {"key_area_key_ocean_02", {S128KeyType::KeyArea, 2, static_cast<u64>(KeyAreaKeyType::Ocean)}}, | ||
| 336 | {"key_area_key_ocean_03", {S128KeyType::KeyArea, 3, static_cast<u64>(KeyAreaKeyType::Ocean)}}, | ||
| 337 | {"key_area_key_ocean_04", {S128KeyType::KeyArea, 4, static_cast<u64>(KeyAreaKeyType::Ocean)}}, | ||
| 338 | {"key_area_key_system_00", {S128KeyType::KeyArea, 0, static_cast<u64>(KeyAreaKeyType::System)}}, | ||
| 339 | {"key_area_key_system_01", {S128KeyType::KeyArea, 1, static_cast<u64>(KeyAreaKeyType::System)}}, | ||
| 340 | {"key_area_key_system_02", {S128KeyType::KeyArea, 2, static_cast<u64>(KeyAreaKeyType::System)}}, | ||
| 341 | {"key_area_key_system_03", {S128KeyType::KeyArea, 3, static_cast<u64>(KeyAreaKeyType::System)}}, | ||
| 342 | {"key_area_key_system_04", {S128KeyType::KeyArea, 4, static_cast<u64>(KeyAreaKeyType::System)}}, | ||
| 343 | {"sd_card_kek_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::SDKEK), 0}}, | ||
| 344 | {"aes_kek_generation_source", | 335 | {"aes_kek_generation_source", |
| 345 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::AESKEKGeneration), 0}}, | 336 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::AESKekGeneration), 0}}, |
| 346 | {"aes_key_generation_source", | 337 | {"aes_key_generation_source", |
| 347 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::AESKeyGeneration), 0}}, | 338 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::AESKeyGeneration), 0}}, |
| 339 | {"package2_key_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::Package2), 0}}, | ||
| 340 | {"master_key_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::Master), 0}}, | ||
| 341 | {"header_kek_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::HeaderKek), 0}}, | ||
| 342 | {"key_area_key_application_source", | ||
| 343 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::KeyAreaKey), | ||
| 344 | static_cast<u64>(KeyAreaKeyType::Application)}}, | ||
| 345 | {"key_area_key_ocean_source", | ||
| 346 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::KeyAreaKey), | ||
| 347 | static_cast<u64>(KeyAreaKeyType::Ocean)}}, | ||
| 348 | {"key_area_key_system_source", | ||
| 349 | {S128KeyType::Source, static_cast<u64>(SourceKeyType::KeyAreaKey), | ||
| 350 | static_cast<u64>(KeyAreaKeyType::System)}}, | ||
| 351 | {"titlekek_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::Titlekek), 0}}, | ||
| 352 | {"keyblob_mac_key_source", {S128KeyType::Source, static_cast<u64>(SourceKeyType::KeyblobMAC)}}, | ||
| 353 | {"tsec_key", {S128KeyType::TSEC, 0, 0}}, | ||
| 354 | {"secure_boot_key", {S128KeyType::SecureBoot, 0, 0}}, | ||
| 348 | {"sd_seed", {S128KeyType::SDSeed, 0, 0}}, | 355 | {"sd_seed", {S128KeyType::SDSeed, 0, 0}}, |
| 356 | {"bis_key_0_crypt", {S128KeyType::BIS, 0, static_cast<u64>(BISKeyType::Crypto)}}, | ||
| 357 | {"bis_key_0_tweak", {S128KeyType::BIS, 0, static_cast<u64>(BISKeyType::Tweak)}}, | ||
| 358 | {"bis_key_1_crypt", {S128KeyType::BIS, 1, static_cast<u64>(BISKeyType::Crypto)}}, | ||
| 359 | {"bis_key_1_tweak", {S128KeyType::BIS, 1, static_cast<u64>(BISKeyType::Tweak)}}, | ||
| 360 | {"bis_key_2_crypt", {S128KeyType::BIS, 2, static_cast<u64>(BISKeyType::Crypto)}}, | ||
| 361 | {"bis_key_2_tweak", {S128KeyType::BIS, 2, static_cast<u64>(BISKeyType::Tweak)}}, | ||
| 362 | {"bis_key_3_crypt", {S128KeyType::BIS, 3, static_cast<u64>(BISKeyType::Crypto)}}, | ||
| 363 | {"bis_key_3_tweak", {S128KeyType::BIS, 3, static_cast<u64>(BISKeyType::Tweak)}}, | ||
| 364 | {"header_kek", {S128KeyType::HeaderKek, 0, 0}}, | ||
| 365 | {"sd_card_kek", {S128KeyType::SDKek, 0, 0}}, | ||
| 349 | }; | 366 | }; |
| 350 | 367 | ||
| 351 | const boost::container::flat_map<std::string, KeyIndex<S256KeyType>> KeyManager::s256_file_id = { | 368 | const boost::container::flat_map<std::string, KeyIndex<S256KeyType>> KeyManager::s256_file_id = { |
| 352 | {"header_key", {S256KeyType::Header, 0, 0}}, | 369 | {"header_key", {S256KeyType::Header, 0, 0}}, |
| 353 | {"sd_card_save_key_source", {S256KeyType::SDKeySource, static_cast<u64>(SDKeyType::Save), 0}}, | 370 | {"sd_card_save_key_source", {S256KeyType::SDKeySource, static_cast<u64>(SDKeyType::Save), 0}}, |
| 354 | {"sd_card_nca_key_source", {S256KeyType::SDKeySource, static_cast<u64>(SDKeyType::NCA), 0}}, | 371 | {"sd_card_nca_key_source", {S256KeyType::SDKeySource, static_cast<u64>(SDKeyType::NCA), 0}}, |
| 372 | {"header_key_source", {S256KeyType::HeaderSource, 0, 0}}, | ||
| 373 | {"sd_card_save_key", {S256KeyType::SDKey, static_cast<u64>(SDKeyType::Save), 0}}, | ||
| 374 | {"sd_card_nca_key", {S256KeyType::SDKey, static_cast<u64>(SDKeyType::NCA), 0}}, | ||
| 355 | }; | 375 | }; |
| 356 | } // namespace Core::Crypto | 376 | } // namespace Core::Crypto |