aboutsummaryrefslogtreecommitdiff
path: root/src/core/file_sys/submission_package.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-10-03 01:20:54 -0400
committerLioncash <mathew1800@gmail.com>2018-10-03 01:20:57 -0400
commit17fb526fd9435ef0870374d67197fa8a46d46c28 (patch)
tree35b42f61ece7db714f1804a3b3c732c301c3cf50 /src/core/file_sys/submission_package.cpp
parent0b2773e2c6f663d6d71447d989f84cf7df762bb0 (diff)
submission_package: Move ticket key setting to its own function
This behavior is entirely independent of the surrounding code, so it can be put in its own function to keep the behavior separate.
Diffstat (limited to 'src/core/file_sys/submission_package.cpp')
-rw-r--r--src/core/file_sys/submission_package.cpp49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/core/file_sys/submission_package.cpp b/src/core/file_sys/submission_package.cpp
index 6ff43fa773..b1ebab17ff 100644
--- a/src/core/file_sys/submission_package.cpp
+++ b/src/core/file_sys/submission_package.cpp
@@ -18,6 +18,33 @@
#include "core/loader/loader.h"
namespace FileSys {
+namespace {
+void SetTicketKeys(const std::vector<VirtualFile>& files) {
+ Core::Crypto::KeyManager keys;
+
+ for (const auto& ticket_file : files) {
+ if (ticket_file->GetExtension() != "tik") {
+ continue;
+ }
+
+ if (ticket_file == nullptr ||
+ ticket_file->GetSize() <
+ Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET + sizeof(Core::Crypto::Key128)) {
+ continue;
+ }
+
+ Core::Crypto::Key128 key{};
+ ticket_file->Read(key.data(), key.size(), Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET);
+ std::string_view name_only(ticket_file->GetName());
+ name_only.remove_suffix(4);
+ const auto rights_id_raw = Common::HexStringToArray<16>(name_only);
+ u128 rights_id;
+ std::memcpy(rights_id.data(), rights_id_raw.data(), sizeof(u128));
+ keys.SetKey(Core::Crypto::S128KeyType::Titlekey, key, rights_id[1], rights_id[0]);
+ }
+}
+} // Anonymous namespace
+
NSP::NSP(VirtualFile file_)
: file(std::move(file_)), status{Loader::ResultStatus::Success},
pfs(std::make_shared<PartitionFilesystem>(file)) {
@@ -43,27 +70,7 @@ NSP::NSP(VirtualFile file_)
extracted = false;
const auto files = pfs->GetFiles();
- Core::Crypto::KeyManager keys;
- for (const auto& ticket_file : files) {
- if (ticket_file->GetExtension() != "tik") {
- continue;
- }
-
- if (ticket_file == nullptr ||
- ticket_file->GetSize() <
- Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET + sizeof(Core::Crypto::Key128)) {
- continue;
- }
-
- Core::Crypto::Key128 key{};
- ticket_file->Read(key.data(), key.size(), Core::Crypto::TICKET_FILE_TITLEKEY_OFFSET);
- std::string_view name_only(ticket_file->GetName());
- name_only.remove_suffix(4);
- const auto rights_id_raw = Common::HexStringToArray<16>(name_only);
- u128 rights_id;
- std::memcpy(rights_id.data(), rights_id_raw.data(), sizeof(u128));
- keys.SetKey(Core::Crypto::S128KeyType::Titlekey, key, rights_id[1], rights_id[0]);
- }
+ SetTicketKeys(files);
for (const auto& outer_file : files) {
if (outer_file->GetName().substr(outer_file->GetName().size() - 9) != ".cnmt.nca") {