mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Merge pull request #1361 from lioncash/nax
xts_archive/nax: Minor interface changes
This commit is contained in:
		
						commit
						b02a1e38fa
					
				@ -30,9 +30,6 @@ static bool CalculateHMAC256(Destination* out, const SourceKey* key, std::size_t
 | 
			
		||||
    mbedtls_md_context_t context;
 | 
			
		||||
    mbedtls_md_init(&context);
 | 
			
		||||
 | 
			
		||||
    const auto key_f = reinterpret_cast<const u8*>(key);
 | 
			
		||||
    const std::vector<u8> key_v(key_f, key_f + key_length);
 | 
			
		||||
 | 
			
		||||
    if (mbedtls_md_setup(&context, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1) ||
 | 
			
		||||
        mbedtls_md_hmac_starts(&context, reinterpret_cast<const u8*>(key), key_length) ||
 | 
			
		||||
        mbedtls_md_hmac_update(&context, reinterpret_cast<const u8*>(data), data_length) ||
 | 
			
		||||
@ -45,7 +42,7 @@ static bool CalculateHMAC256(Destination* out, const SourceKey* key, std::size_t
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NAX::NAX(VirtualFile file_) : file(std::move(file_)), header(std::make_unique<NAXHeader>()) {
 | 
			
		||||
NAX::NAX(VirtualFile file_) : header(std::make_unique<NAXHeader>()), file(std::move(file_)) {
 | 
			
		||||
    std::string path = FileUtil::SanitizePath(file->GetFullPath());
 | 
			
		||||
    static const std::regex nax_path_regex("/registered/(000000[0-9A-F]{2})/([0-9A-F]{32})\\.nca",
 | 
			
		||||
                                           std::regex_constants::ECMAScript |
 | 
			
		||||
@ -65,7 +62,7 @@ NAX::NAX(VirtualFile file_) : file(std::move(file_)), header(std::make_unique<NA
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NAX::NAX(VirtualFile file_, std::array<u8, 0x10> nca_id)
 | 
			
		||||
    : file(std::move(file_)), header(std::make_unique<NAXHeader>()) {
 | 
			
		||||
    : header(std::make_unique<NAXHeader>()), file(std::move(file_)) {
 | 
			
		||||
    Core::Crypto::SHA256Hash hash{};
 | 
			
		||||
    mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0);
 | 
			
		||||
    status = Parse(fmt::format("/registered/000000{:02X}/{}.nca", hash[0],
 | 
			
		||||
@ -138,9 +135,9 @@ VirtualFile NAX::GetDecrypted() const {
 | 
			
		||||
    return dec_file;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::shared_ptr<NCA> NAX::AsNCA() const {
 | 
			
		||||
std::unique_ptr<NCA> NAX::AsNCA() const {
 | 
			
		||||
    if (type == NAXContentType::NCA)
 | 
			
		||||
        return std::make_shared<NCA>(GetDecrypted());
 | 
			
		||||
        return std::make_unique<NCA>(GetDecrypted());
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ public:
 | 
			
		||||
 | 
			
		||||
    VirtualFile GetDecrypted() const;
 | 
			
		||||
 | 
			
		||||
    std::shared_ptr<NCA> AsNCA() const;
 | 
			
		||||
    std::unique_ptr<NCA> AsNCA() const;
 | 
			
		||||
 | 
			
		||||
    NAXContentType GetContentType() const;
 | 
			
		||||
 | 
			
		||||
@ -60,7 +60,7 @@ private:
 | 
			
		||||
 | 
			
		||||
    VirtualFile file;
 | 
			
		||||
    Loader::ResultStatus status;
 | 
			
		||||
    NAXContentType type;
 | 
			
		||||
    NAXContentType type{};
 | 
			
		||||
 | 
			
		||||
    VirtualFile dec_file;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,20 @@
 | 
			
		||||
#include "core/loader/nca.h"
 | 
			
		||||
 | 
			
		||||
namespace Loader {
 | 
			
		||||
namespace {
 | 
			
		||||
FileType IdentifyTypeImpl(const FileSys::NAX& nax) {
 | 
			
		||||
    if (nax.GetStatus() != ResultStatus::Success) {
 | 
			
		||||
        return FileType::Error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto nca = nax.AsNCA();
 | 
			
		||||
    if (nca == nullptr || nca->GetStatus() != ResultStatus::Success) {
 | 
			
		||||
        return FileType::Error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FileType::NAX;
 | 
			
		||||
}
 | 
			
		||||
} // Anonymous namespace
 | 
			
		||||
 | 
			
		||||
AppLoader_NAX::AppLoader_NAX(FileSys::VirtualFile file)
 | 
			
		||||
    : AppLoader(file), nax(std::make_unique<FileSys::NAX>(file)),
 | 
			
		||||
@ -19,14 +33,12 @@ AppLoader_NAX::AppLoader_NAX(FileSys::VirtualFile file)
 | 
			
		||||
AppLoader_NAX::~AppLoader_NAX() = default;
 | 
			
		||||
 | 
			
		||||
FileType AppLoader_NAX::IdentifyType(const FileSys::VirtualFile& file) {
 | 
			
		||||
    FileSys::NAX nax(file);
 | 
			
		||||
    const FileSys::NAX nax(file);
 | 
			
		||||
    return IdentifyTypeImpl(nax);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    if (nax.GetStatus() == ResultStatus::Success && nax.AsNCA() != nullptr &&
 | 
			
		||||
        nax.AsNCA()->GetStatus() == ResultStatus::Success) {
 | 
			
		||||
        return FileType::NAX;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FileType::Error;
 | 
			
		||||
FileType AppLoader_NAX::GetFileType() {
 | 
			
		||||
    return IdentifyTypeImpl(*nax);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ResultStatus AppLoader_NAX::Load(Kernel::SharedPtr<Kernel::Process>& process) {
 | 
			
		||||
 | 
			
		||||
@ -31,9 +31,7 @@ public:
 | 
			
		||||
     */
 | 
			
		||||
    static FileType IdentifyType(const FileSys::VirtualFile& file);
 | 
			
		||||
 | 
			
		||||
    FileType GetFileType() override {
 | 
			
		||||
        return IdentifyType(file);
 | 
			
		||||
    }
 | 
			
		||||
    FileType GetFileType() override;
 | 
			
		||||
 | 
			
		||||
    ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user