diff options
author | Zach Hilman <zachhilman@gmail.com> | 2019-04-17 17:29:21 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2019-07-08 03:38:33 +0200 |
commit | d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64 (patch) | |
tree | 25854c9201231a9b94cd884ea288f0ed84a6f790 | |
parent | key_manager: Add structure for Ticket parsing (diff) | |
download | yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.tar yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.tar.gz yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.tar.bz2 yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.tar.lz yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.tar.xz yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.tar.zst yuzu-d9ef20e5a53166fe3ecdca5ed225232eb7ad2f64.zip |
-rw-r--r-- | src/core/crypto/key_manager.cpp | 26 | ||||
-rw-r--r-- | src/core/crypto/key_manager.h | 1 | ||||
-rw-r--r-- | src/core/hle/service/es/es.cpp | 5 |
3 files changed, 17 insertions, 15 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 558790a49..3c51e3dc2 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -406,9 +406,7 @@ std::optional<std::pair<Key128, Key128>> ParseTicket(const Ticket& ticket, if (issuer == std::array<u8, 0x40>{}) return {}; if (issuer[0] != 'R' || issuer[1] != 'o' || issuer[2] != 'o' || issuer[3] != 't') { - LOG_INFO(Crypto, - "Attempting to parse ticket with non-standard certificate authority {:08X}.", - issuer); + LOG_INFO(Crypto, "Attempting to parse ticket with non-standard certificate authority."); } Key128 rights_id = ticket.GetData().rights_id; @@ -481,16 +479,6 @@ KeyManager::KeyManager() { AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, "title.keys_autogenerated", true); AttemptLoadKeyFile(yuzu_keys_dir, hactool_keys_dir, "console.keys", false); AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, "console.keys_autogenerated", false); - - for (const auto& key : s128_keys) { - if (key.first.type == S128KeyType::Titlekey) { - u128 rights_id{key.first.field1, key.first.field2}; - Key128 rights_id_2; - std::memcpy(rights_id_2.data(), rights_id.data(), rights_id_2.size()); - const auto ticket = Ticket::SynthesizeCommon(key.second, rights_id_2); - common_tickets.insert_or_assign(rights_id, ticket); - } - } } static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_t length) { @@ -1011,6 +999,18 @@ void KeyManager::PopulateTickets() { } } +void KeyManager::SynthesizeTickets() { + for (const auto& key : s128_keys) { + if (key.first.type == S128KeyType::Titlekey) { + u128 rights_id{key.first.field1, key.first.field2}; + Key128 rights_id_2; + std::memcpy(rights_id_2.data(), rights_id.data(), rights_id_2.size()); + const auto ticket = Ticket::SynthesizeCommon(key.second, rights_id_2); + common_tickets.insert_or_assign(rights_id, ticket); + } + } +} + void KeyManager::SetKeyWrapped(S128KeyType id, Key128 key, u64 field1, u64 field2) { if (key == Key128{}) return; diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index ff6bd08e1..d4e89d35c 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -236,6 +236,7 @@ public: void DeriveBase(); void DeriveETicket(PartitionDataManager& data); void PopulateTickets(); + void SynthesizeTickets(); void PopulateFromPartitionData(PartitionDataManager& data); diff --git a/src/core/hle/service/es/es.cpp b/src/core/hle/service/es/es.cpp index 7e01f88b9..92fa2bef8 100644 --- a/src/core/hle/service/es/es.cpp +++ b/src/core/hle/service/es/es.cpp @@ -56,6 +56,9 @@ public: }; // clang-format on RegisterHandlers(functions); + + keys.PopulateTickets(); + keys.SynthesizeTickets(); } private: @@ -125,7 +128,6 @@ private: void CountCommonTicket(Kernel::HLERequestContext& ctx) { LOG_DEBUG(Service_ETicket, "called"); - keys.PopulateTickets(); const auto count = keys.GetCommonTickets().size(); IPC::ResponseBuilder rb{ctx, 3}; @@ -136,7 +138,6 @@ private: void CountPersonalizedTicket(Kernel::HLERequestContext& ctx) { LOG_DEBUG(Service_ETicket, "called"); - keys.PopulateTickets(); const auto count = keys.GetPersonalizedTickets().size(); IPC::ResponseBuilder rb{ctx, 3}; |