summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2019-04-17 17:29:21 +0200
committerZach Hilman <zachhilman@gmail.com>2019-07-08 03:38:33 +0200
commitd9ef20e5a53166fe3ecdca5ed225232eb7ad2f64 (patch)
tree25854c9201231a9b94cd884ea288f0ed84a6f790
parentkey_manager: Add structure for Ticket parsing (diff)
downloadyuzu-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.cpp26
-rw-r--r--src/core/crypto/key_manager.h1
-rw-r--r--src/core/hle/service/es/es.cpp5
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};