summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/es/es.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/core/hle/service/es/es.cpp b/src/core/hle/service/es/es.cpp
index 8a29453d7..d17fb778c 100644
--- a/src/core/hle/service/es/es.cpp
+++ b/src/core/hle/service/es/es.cpp
@@ -32,7 +32,7 @@ public:
32 {14, &ETicket::GetCommonTicketSize, "GetCommonTicketSize"}, 32 {14, &ETicket::GetCommonTicketSize, "GetCommonTicketSize"},
33 {15, &ETicket::GetPersonalizedTicketSize, "GetPersonalizedTicketSize"}, 33 {15, &ETicket::GetPersonalizedTicketSize, "GetPersonalizedTicketSize"},
34 {16, &ETicket::GetCommonTicketData, "GetCommonTicketData"}, 34 {16, &ETicket::GetCommonTicketData, "GetCommonTicketData"},
35 {17, nullptr, "GetPersonalizedTicketData"}, 35 {17, &ETicket::GetPersonalizedTicketData, "GetPersonalizedTicketData"},
36 {18, nullptr, "OwnTicket"}, 36 {18, nullptr, "OwnTicket"},
37 {19, nullptr, "GetTicketInfo"}, 37 {19, nullptr, "GetTicketInfo"},
38 {20, nullptr, "ListLightTicketInfo"}, 38 {20, nullptr, "ListLightTicketInfo"},
@@ -241,6 +241,26 @@ private:
241 rb.Push<u64>(write_size); 241 rb.Push<u64>(write_size);
242 } 242 }
243 243
244 void GetPersonalizedTicketData(Kernel::HLERequestContext& ctx) {
245 IPC::RequestParser rp{ctx};
246 const auto rights_id = rp.PopRaw<u128>();
247
248 LOG_DEBUG(Service_ETicket, "called, rights_id={:016X}{:016X}", rights_id[1], rights_id[0]);
249
250 if (!CheckRightsId(ctx, rights_id))
251 return;
252
253 const auto ticket = keys.GetPersonalizedTickets().at(rights_id);
254
255 const auto write_size = std::min(ticket.size(), ctx.GetWriteBufferSize());
256 ctx.WriteBuffer(ticket.data(), write_size);
257
258 IPC::ResponseBuilder rb{ctx, 4};
259 rb.Push(RESULT_SUCCESS);
260 rb.Push<u64>(write_size);
261 }
262
263 Core::Crypto::KeyManager keys;
244}; 264};
245 265
246void InstallInterfaces(SM::ServiceManager& service_manager) { 266void InstallInterfaces(SM::ServiceManager& service_manager) {