summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys/xts_archive.h
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2018-08-16 23:08:13 +0200
committerZach Hilman <zachhilman@gmail.com>2018-08-23 17:53:30 +0200
commitab44192ab01a27115e14a52d4823722cbd357c0d (patch)
treeb61ce1e6b007d8497c17066ab4c44e2f658d5af0 /src/core/file_sys/xts_archive.h
parentregistration: Add GetEntryUnparsed methods (diff)
downloadyuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.tar
yuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.tar.gz
yuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.tar.bz2
yuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.tar.lz
yuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.tar.xz
yuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.tar.zst
yuzu-ab44192ab01a27115e14a52d4823722cbd357c0d.zip
Diffstat (limited to 'src/core/file_sys/xts_archive.h')
-rw-r--r--src/core/file_sys/xts_archive.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/core/file_sys/xts_archive.h b/src/core/file_sys/xts_archive.h
new file mode 100644
index 000000000..4e44f634a
--- /dev/null
+++ b/src/core/file_sys/xts_archive.h
@@ -0,0 +1,68 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <array>
+#include <vector>
+#include "common/common_types.h"
+#include "common/swap.h"
+#include "core/file_sys/content_archive.h"
+#include "core/file_sys/vfs.h"
+#include "core/loader/loader.h"
+
+namespace FileSys {
+
+struct NAXHeader {
+ std::array<u8, 0x20> hmac;
+ u64_le magic;
+ std::array<Core::Crypto::Key128, 2> key_area;
+ u64_le file_size;
+ INSERT_PADDING_BYTES(0x30);
+};
+static_assert(sizeof(NAXHeader) == 0x80, "NAXHeader has incorrect size.");
+
+enum class NAXContentType : u8 {
+ Save = 0,
+ NCA = 1,
+};
+
+class NAX : public ReadOnlyVfsDirectory {
+public:
+ explicit NAX(VirtualFile file);
+ explicit NAX(VirtualFile file, std::array<u8, 0x10> nca_id);
+
+ Loader::ResultStatus GetStatus();
+
+ VirtualFile GetDecrypted();
+
+ std::shared_ptr<NCA> AsNCA();
+
+ NAXContentType GetContentType();
+
+ std::vector<std::shared_ptr<VfsFile>> GetFiles() const override;
+
+ std::vector<std::shared_ptr<VfsDirectory>> GetSubdirectories() const override;
+
+ std::string GetName() const override;
+
+ std::shared_ptr<VfsDirectory> GetParentDirectory() const override;
+
+protected:
+ bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
+
+private:
+ Loader::ResultStatus Parse(std::string path);
+
+ std::unique_ptr<NAXHeader> header;
+
+ VirtualFile file;
+ Loader::ResultStatus status;
+ NAXContentType type;
+
+ VirtualFile dec_file;
+
+ Core::Crypto::KeyManager keys;
+};
+} // namespace FileSys