public static void File2Tickets(string inFile, string outDirPath, Keyset keyset, Output Out) { var inFileExtension = Path.GetExtension(inFile).ToLower(); using (var inputFile = new FileStream(inFile, FileMode.Open, FileAccess.Read)) { switch (inFileExtension) { case ".nsp": var pfs = new PartitionFileSystem(inputFile.AsStorage()); ProcessNsp.ExtractTickets(pfs, outDirPath, keyset, Out); break; case ".xci": var xci = new Xci(keyset, inputFile.AsStorage()); ProcessXci.ExtractTickets(xci, outDirPath, keyset, Out); break; case ".nspz": case ".xciz": var pfsz = new PartitionFileSystem(inputFile.AsStorage()); DecompressFs.ExtractTickets(pfsz, outDirPath, keyset, Out); break; default: throw new NotImplementedException(); } } }
public void VerifyCompressedFolder(string nspFile) { var nspFileNoExtension = Path.GetFileNameWithoutExtension(nspFile); Out.Event($"Task VerifyCompressedFolder \"{nspFileNoExtension}\" started\r\n"); var keyset = ProcessKeyset.OpenKeyset(); using (var inputFile = new FileStream(nspFile, FileMode.Open, FileAccess.Read)) using (var inputFileStorage = inputFile.AsStorage()) { var pfs = new PartitionFileSystem(inputFileStorage); ProcessNsp.GetTitlekey(pfs, keyset, Out); var dirDecryptedReal = new DirectoryInfo(decryptedDir); var dirDecryptedRealCount = dirDecryptedReal.GetFiles().Length; cleanFolder(decryptedDir); var compressedFs = new LocalFileSystem(compressedDir); var decryptedFs = new LocalFileSystem(decryptedDir); DecompressFs.ProcessFs(compressedFs, decryptedFs, Out); UntrimDeltaNCA.Process(decryptedDir, pfs, keyset, Out); EncryptNCA.Encrypt(decryptedFs, null, true, keyset, Out); } Out.Event($"Task VerifyCompressedFolder \"{nspFileNoExtension}\" 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"); }
public void CompressNSP(string nspFile) { var nspFileNoExtension = Path.GetFileNameWithoutExtension(nspFile); Out.Event($"Task CompressNSP \"{nspFileNoExtension}\" started\r\n"); var keyset = ProcessKeyset.OpenKeyset(); using (var inputFile = new FileStream(nspFile, FileMode.Open, FileAccess.Read)) using (var inputFileStorage = inputFile.AsStorage()) { var pfs = new PartitionFileSystem(inputFileStorage); ProcessNsp.Decrypt(pfs, decryptedDir, VerifyHashes, keyset, Out); TrimDeltaNCA.Process(decryptedDir, keyset, Out); CompressFolder.Compress(Out, decryptedDir, compressedDir, BlockSize, ZstdLevel, MaxDegreeOfParallelism); if (VerifyHashes) { var dirDecryptedReal = new DirectoryInfo(decryptedDir); var dirDecryptedRealCount = dirDecryptedReal.GetFiles().Length; cleanFolder(decryptedDir); var compressedFs = new LocalFileSystem(compressedDir); var decryptedFs = new LocalFileSystem(decryptedDir); DecompressFs.ProcessFs(compressedFs, decryptedFs, Out); UntrimDeltaNCA.Process(decryptedDir, pfs, keyset, Out); var dirDecrypted = new DirectoryInfo(decryptedDir); var dirDecryptedCount = dirDecrypted.GetFiles().Length; if (dirDecryptedRealCount != dirDecryptedCount) { throw new FileNotFoundException(); } EncryptNCA.Encrypt(compressedFs, null, true, keyset, Out); } } var compressedDirFs = new LocalFileSystem(compressedDir); var OutputFolderPathFs = new LocalFileSystem(OutputFolderPath); using (var outFile = FolderTools.CreateOrOverwriteFileOpen(OutputFolderPathFs, $"{nspFileNoExtension}.nspz")) { FolderTools.FolderToNSP(compressedDirFs, outFile); } Out.Event($"Task CompressNSP \"{nspFileNoExtension}\" completed!\r\n"); }
public void DecompressNSPZ(string nspzFile) { var nspzFileNoExtension = Path.GetFileNameWithoutExtension(nspzFile); Out.Event($"Task DecompressNSPZ \"{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); var OutputFolderPathFs = new LocalFileSystem(OutputFolderPath); using (var outFile = FolderTools.CreateOrOverwriteFileOpen(OutputFolderPathFs, $"{nspzFileNoExtension}.nsp")) { FolderTools.FolderToNSP(encryptedDirFs, outFile); } Out.Event($"Task DecompressNSPZ \"{nspzFileNoExtension}\" completed!\r\n"); }
public static void ExtractPfsHfs(string inFile, string outDirPath, Keyset keyset, Output Out) { var inFileExtension = Path.GetExtension(inFile).ToLower(); switch (inFileExtension) { case ".nsp": ProcessNsp.Extract(inFile, outDirPath, Out); break; case ".xci": ProcessXci.Extract(inFile, outDirPath, keyset, Out); break; case ".nspz": case ".xciz": ProcessNsp.Decompress(inFile, outDirPath, Out); break; default: throw new NotImplementedException(); } }