예제 #1
0
        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();
                }
            }
        }
예제 #2
0
파일: TaskLogic.cs 프로젝트: gabest11/nsZip
        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");
        }
예제 #3
0
파일: TaskLogic.cs 프로젝트: gabest11/nsZip
        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");
        }
예제 #4
0
파일: TaskLogic.cs 프로젝트: gabest11/nsZip
        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");
        }
예제 #5
0
파일: TaskLogic.cs 프로젝트: gabest11/nsZip
        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");
        }
예제 #6
0
        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();
            }
        }