diff options
| -rw-r--r-- | src/core/hle/service/es/es.cpp | 22 |
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 | ||
| 246 | void InstallInterfaces(SM::ServiceManager& service_manager) { | 266 | void InstallInterfaces(SM::ServiceManager& service_manager) { |