diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-08-16 23:08:13 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-08-23 17:53:30 +0200 |
commit | ab44192ab01a27115e14a52d4823722cbd357c0d (patch) | |
tree | b61ce1e6b007d8497c17066ab4c44e2f658d5af0 /src/core/file_sys/xts_archive.h | |
parent | registration: Add GetEntryUnparsed methods (diff) | |
download | yuzu-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.h | 68 |
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 |