public void CompressXCI(string xciFile) { var xciFileNoExtension = Path.GetFileNameWithoutExtension(xciFile); Out.Event($"Task CompressXCI \"{xciFileNoExtension}\" started\r\n"); var keyset = ProcessKeyset.OpenKeyset(); ProcessXci.Decrypt(xciFile, decryptedDir, VerifyHashes, keyset, Out); CompressFolder.Compress(Out, decryptedDir, compressedDir, BlockSize, ZstdLevel, MaxDegreeOfParallelism); if (VerifyHashes) { var decryptedFs = new LocalFileSystem(decryptedDir); var dirDecryptedRealCount = decryptedFs.GetEntryCount(OpenDirectoryMode.Files); cleanFolder(decryptedDir); var compressedFs = new LocalFileSystem(compressedDir); DecompressFs.ProcessFs(compressedFs, decryptedFs, Out); var dirDecryptedCount = decryptedFs.GetEntryCount(OpenDirectoryMode.Files); if (dirDecryptedRealCount != dirDecryptedCount) { throw new FileNotFoundException(); } EncryptNCA.Encrypt(decryptedFs, null, true, keyset, Out); } var compressedDirFs = new LocalFileSystem(compressedDir); var xciOutPath = Path.Combine(OutputFolderPath, xciFileNoExtension); FolderTools.FolderToXCI(compressedDirFs, $"{xciOutPath}.xciz", keyset); Out.Event($"Task CompressXCI \"{xciFileNoExtension}\" completed!\r\n"); }
public void DecompressXCIZ(string nspzFile) { var nspzFileNoExtension = Path.GetFileNameWithoutExtension(nspzFile); Out.Event($"Task DecompressXCIZ \"{nspzFileNoExtension}\" started\r\n"); var keyset = ProcessKeyset.OpenKeyset(); ProcessNsp.Decompress(nspzFile, decryptedDir, Out); UntrimAndEncrypt(keyset); var nspOutPath = Path.Combine(OutputFolderPath, nspzFileNoExtension); var encryptedDirFs = new LocalFileSystem(encryptedDir); FolderTools.FolderToXCI(encryptedDirFs, $"{nspOutPath}.xci", keyset); Out.Event($"Task DecompressXCIZ \"{nspzFileNoExtension}\" completed!\r\n"); }