summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2020-10-12 17:58:36 -0700
committerGravatar GitHub2020-10-12 17:58:36 -0700
commitd291fc1a517d0db07e4b32f5b4ad294c5e93e984 (patch)
tree5f5b71a00d40fdf7d0daa2478e7410922d7da56a /src
parentMerge pull request #4766 from ReinUsesLisp/tmml-cube (diff)
parentfile_sys/nsp: Make SetTicketKeys actually do something (diff)
downloadyuzu-d291fc1a517d0db07e4b32f5b4ad294c5e93e984.tar.gz
yuzu-d291fc1a517d0db07e4b32f5b4ad294c5e93e984.tar.xz
yuzu-d291fc1a517d0db07e4b32f5b4ad294c5e93e984.zip
Merge pull request #3929 from FearlessTobi/ticket-keys
file_sys/nsp: Make SetTicketKeys actually do something
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/submission_package.cpp61
-rw-r--r--src/core/file_sys/submission_package.h1
2 files changed, 30 insertions, 32 deletions
diff --git a/src/core/file_sys/submission_package.cpp b/src/core/file_sys/submission_package.cpp
index 07ae90819..90641d23b 100644
--- a/src/core/file_sys/submission_package.cpp
+++ b/src/core/file_sys/submission_package.cpp
@@ -19,38 +19,6 @@
19#include "core/loader/loader.h" 19#include "core/loader/loader.h"
20 20
21namespace FileSys { 21namespace FileSys {
22namespace {
23void SetTicketKeys(const std::vector<VirtualFile>& files) {
24 auto& keys = Core::Crypto::KeyManager::Instance();
25
26 for (const auto& ticket_file : files) {
27 if (ticket_file == nullptr) {
28 continue;
29 }
30
31 if (ticket_file->GetExtension() != "tik") {
32 continue;
33 }
34
35 if (ticket_file->GetSize() <
36 Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET + sizeof(Core::Crypto::Key128)) {
37 continue;
38 }
39
40 Core::Crypto::Key128 key{};
41 ticket_file->Read(key.data(), key.size(), Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET);
42
43 // We get the name without the extension in order to create the rights ID.
44 std::string name_only(ticket_file->GetName());
45 name_only.erase(name_only.size() - 4);
46
47 const auto rights_id_raw = Common::HexStringToArray<16>(name_only);
48 u128 rights_id;
49 std::memcpy(rights_id.data(), rights_id_raw.data(), sizeof(u128));
50 keys.SetKey(Core::Crypto::S128KeyType::Titlekey, key, rights_id[1], rights_id[0]);
51 }
52}
53} // Anonymous namespace
54 22
55NSP::NSP(VirtualFile file_) 23NSP::NSP(VirtualFile file_)
56 : file(std::move(file_)), status{Loader::ResultStatus::Success}, 24 : file(std::move(file_)), status{Loader::ResultStatus::Success},
@@ -232,6 +200,35 @@ VirtualDir NSP::GetParentDirectory() const {
232 return file->GetContainingDirectory(); 200 return file->GetContainingDirectory();
233} 201}
234 202
203void NSP::SetTicketKeys(const std::vector<VirtualFile>& files) {
204 for (const auto& ticket_file : files) {
205 if (ticket_file == nullptr) {
206 continue;
207 }
208
209 if (ticket_file->GetExtension() != "tik") {
210 continue;
211 }
212
213 if (ticket_file->GetSize() <
214 Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET + sizeof(Core::Crypto::Key128)) {
215 continue;
216 }
217
218 Core::Crypto::Key128 key{};
219 ticket_file->Read(key.data(), key.size(), Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET);
220
221 // We get the name without the extension in order to create the rights ID.
222 std::string name_only(ticket_file->GetName());
223 name_only.erase(name_only.size() - 4);
224
225 const auto rights_id_raw = Common::HexStringToArray<16>(name_only);
226 u128 rights_id;
227 std::memcpy(rights_id.data(), rights_id_raw.data(), sizeof(u128));
228 keys.SetKey(Core::Crypto::S128KeyType::Titlekey, key, rights_id[1], rights_id[0]);
229 }
230}
231
235void NSP::InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files) { 232void NSP::InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files) {
236 exefs = pfs; 233 exefs = pfs;
237 234
diff --git a/src/core/file_sys/submission_package.h b/src/core/file_sys/submission_package.h
index 2db5e46b8..c70a11b5b 100644
--- a/src/core/file_sys/submission_package.h
+++ b/src/core/file_sys/submission_package.h
@@ -63,6 +63,7 @@ public:
63 VirtualDir GetParentDirectory() const override; 63 VirtualDir GetParentDirectory() const override;
64 64
65private: 65private:
66 void SetTicketKeys(const std::vector<VirtualFile>& files);
66 void InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files); 67 void InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files);
67 void ReadNCAs(const std::vector<VirtualFile>& files); 68 void ReadNCAs(const std::vector<VirtualFile>& files);
68 69