示例#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
        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");
        }
示例#3
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();
            }
        }