コード例 #1
0
ファイル: Program.cs プロジェクト: NinClub/AuthoringTool
        internal static void CreateNca(Option option)
        {
            AuthoringConfiguration config    = option.Config;
            CreateNcaOption        createNca = option.CreateNca;

            Directory.CreateDirectory(Path.GetDirectoryName(createNca.OutputFile));
            string str = createNca.InputAdfFile;

            if (createNca.ContentType != null)
            {
                List <Pair <FilterType, Regex> > fdf = FilterDescription.ParseFdf(createNca.InputFdfPath);
                str = Path.GetDirectoryName(createNca.OutputFile) + "\\" + Path.GetFileName(createNca.OutputFile) + ".adf";
                new NintendoContentAdfWriter(str, createNca.ContentType, createNca.MetaFilePath, createNca.DescFilePath, createNca.KeyAreaEncryptionKeyIndex).Write(createNca.InputDirs, fdf);
            }
            if (createNca.IsOnlyAdf)
            {
                return;
            }
            if (ContentArchiveLibraryInterface.GetArchiveType(str) != ArchiveFormatType.NintendoContent)
            {
                throw new FormatException("invalid formatType is indicated by .adf file.");
            }
            using (FileStream fileStream = Program.OpenNewFileStream(createNca.OutputFile, FileOptions.RandomAccess))
                ContentArchiveLibraryInterface.CreateArchiveFromAdf((Stream)fileStream, str, config);
            if (createNca.IsSaveAdf)
            {
                return;
            }
            File.Delete(str);
            File.Delete(Path.GetDirectoryName(str) + "\\" + Path.GetFileNameWithoutExtension(str) + ".code.adf");
            File.Delete(Path.GetDirectoryName(str) + "\\" + Path.GetFileNameWithoutExtension(str) + ".rom.adf");
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: NinClub/AuthoringTool
        internal static void ProdEncryption(Option option)
        {
            AuthoringConfiguration config = option.Config;

            if (Path.GetExtension(option.ProdEncryption.InputNspFile) != ".nsp")
            {
                throw new ArgumentException("input file must be .nsp file.");
            }
            if (option.ProdEncryption.CreateXci)
            {
                string path1 = Program.GetProdEncryptionOutputFileNameBase(option.ProdEncryption) + "_prod.xci";
                string path2 = Program.GetProdEncryptionOutputFileNameBase(option.ProdEncryption) + "_prod.xci.result.xml";
                string path3 = Program.GetProdEncryptionOutputFileNameBase(option.ProdEncryption) + "_prod.xcie";
                string path4 = Program.GetProdEncryptionOutputFileNameBase(option.ProdEncryption) + "_prod.xcie.result.xml";
                using (FileStream fileStream1 = Program.OpenReadOnlyFileStream(option.ProdEncryption.InputNspFile, FileOptions.SequentialScan))
                {
                    using (FileStream fileStream2 = option.ProdEncryption.InputUppNspFile != null ? Program.OpenReadOnlyFileStream(option.ProdEncryption.InputUppNspFile, FileOptions.SequentialScan) : (FileStream)null)
                    {
                        using (FileStream fileStream3 = Program.OpenNewFileStream(path1, FileOptions.RandomAccess))
                        {
                            using (FileStream fileStream4 = Program.OpenNewFileStream(path2, FileOptions.RandomAccess))
                                ContentArchiveLibraryInterface.ProdEncryptNintendoSubmissionPackageArchiveForXci((Stream)fileStream3, (Stream)fileStream4, (Stream)fileStream1, (Stream)fileStream2, (Stream)null, option.ProdEncryption.LaunchFlags, config);
                        }
                    }
                }
                if (!option.ProdEncryption.CreateXcie)
                {
                    return;
                }
                using (FileStream fileStream1 = Program.OpenReadOnlyFileStream(path1, FileOptions.SequentialScan))
                {
                    using (FileStream fileStream2 = Program.OpenNewFileStream(path3, FileOptions.SequentialScan))
                    {
                        using (FileStream fileStream3 = Program.OpenNewFileStream(path4, FileOptions.RandomAccess))
                            ContentArchiveLibraryInterface.EncryptXci((Stream)fileStream2, (Stream)fileStream3, (Stream)fileStream1, config);
                    }
                }
            }
            else
            {
                string path1 = Program.GetProdEncryptionOutputFileNameBase(option.ProdEncryption) + "_prod.nsp";
                string path2 = Program.GetProdEncryptionOutputFileNameBase(option.ProdEncryption) + "_prod.nsp.result.xml";
                using (FileStream fileStream1 = Program.OpenReadOnlyFileStream(option.ProdEncryption.InputNspFile, FileOptions.SequentialScan))
                {
                    using (FileStream fileStream2 = Program.OpenNewFileStream(path1, FileOptions.RandomAccess))
                    {
                        using (FileStream fileStream3 = Program.OpenNewFileStream(path2, FileOptions.RandomAccess))
                            ContentArchiveLibraryInterface.ProdEncryptNintendoSubmissionPackageArchive((Stream)fileStream2, (Stream)fileStream3, (Stream)fileStream1, config);
                    }
                }
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: NinClub/AuthoringTool
        internal static void CreateFs(Option option)
        {
            AuthoringConfiguration config   = option.Config;
            CreateFsOption         createFs = option.CreateFs;

            Directory.CreateDirectory(Path.GetDirectoryName(createFs.OutputFile));
            string str = createFs.InputAdfFile;

            if (createFs.Format != ArchiveFormatType.Invalid)
            {
                List <Pair <FilterType, Regex> > fdf = FilterDescription.ParseFdf(createFs.InputFdfPath);
                str = Path.GetDirectoryName(createFs.OutputFile) + "\\" + Path.GetFileName(createFs.OutputFile) + ".adf";
                switch (createFs.Format)
                {
                case ArchiveFormatType.PartitionFs:
                    new PartitionFsAdfWriter(str).Write(createFs.InputDir);
                    break;

                case ArchiveFormatType.RomFs:
                    new RomFsAdfWriter(str).Write(createFs.InputDir, fdf);
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            if (createFs.IsOnlyAdf)
            {
                return;
            }
            switch (ContentArchiveLibraryInterface.GetArchiveType(str))
            {
            case ArchiveFormatType.PartitionFs:
            case ArchiveFormatType.RomFs:
                using (FileStream fileStream = Program.OpenNewFileStream(createFs.OutputFile, FileOptions.RandomAccess))
                    ContentArchiveLibraryInterface.CreateArchiveFromAdf((Stream)fileStream, str, config);
                if (createFs.IsSaveAdf)
                {
                    break;
                }
                File.Delete(str);
                break;

            default:
                throw new FormatException("invalid formatType is indicated by .adf file.");
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: NinClub/AuthoringTool
        internal static void CreateNsp(Option option)
        {
            AuthoringConfiguration config    = option.Config;
            CreateNspOption        createNsp = option.CreateNsp;

            Directory.CreateDirectory(Path.GetDirectoryName(createNsp.OutputFile));
            if (createNsp.GeneratesApplicationControl)
            {
                ApplicationControl.Generate(createNsp.NspContentInfos[0].MetaFilePath, createNsp.NspContentInfos[0].IconList, createNsp.NspContentInfos[0].NxIconList, createNsp.NspContentInfos[0].NxIconMaxSize, createNsp.GetApplicationControlGeneratePath(), true);
            }
            string str = createNsp.InputAdfFile;

            if (str == null)
            {
                List <Pair <FilterType, Regex> > fdf = FilterDescription.ParseFdf(createNsp.InputFdfPath);
                str = Path.GetDirectoryName(createNsp.OutputFile) + "\\" + Path.GetFileName(createNsp.OutputFile) + ".adf";
                new NintendoSubmissionPackageAdfWriter(str).Write(createNsp.NspContentInfos, fdf);
            }
            if (createNsp.IsOnlyAdf)
            {
                return;
            }
            if (ContentArchiveLibraryInterface.GetArchiveType(str) != ArchiveFormatType.NintendoSubmissionPackage)
            {
                throw new FormatException("invalid formatType is indicated by .adf file.");
            }
            using (FileStream fileStream = Program.OpenNewFileStream(createNsp.OutputFile, FileOptions.RandomAccess))
                ContentArchiveLibraryInterface.CreateArchiveFromAdf((Stream)fileStream, str, config);
            if (!createNsp.IsSaveAdf)
            {
                File.Delete(str);
                foreach (string file in Directory.GetFiles(Path.GetDirectoryName(str), Path.GetFileNameWithoutExtension(str) + ".c?.*.nca.*adf"))
                {
                    File.Delete(file);
                }
            }
            if (!createNsp.GeneratesApplicationControl)
            {
                return;
            }
            Directory.Delete(createNsp.GetApplicationControlGeneratePath(), true);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: NinClub/AuthoringTool
        private static void Replace(Option option)
        {
            AuthoringConfiguration config = option.Config;
            string extension = Path.GetExtension(option.Replace.InputFile);

            if (extension != ".nsp" && extension != ".nca")
            {
                throw new ArgumentException("input file must be .nsp or .nca file.");
            }
            Directory.CreateDirectory(option.Replace.OutputDirectory);
            string path = option.Replace.OutputDirectory + "/" + Path.GetFileNameWithoutExtension(option.Replace.InputFile) + "_replaced" + extension;

            using (FileStream fileStream1 = Program.OpenReadOnlyFileStream(option.Replace.InputFile, FileOptions.SequentialScan))
            {
                using (FileStream fileStream2 = Program.OpenReadOnlyFileStream(option.Replace.InputEntryFilePath, FileOptions.SequentialScan))
                {
                    using (FileStream fileStream3 = Program.OpenNewFileStream(path, FileOptions.RandomAccess))
                    {
                        bool isNsp = extension == ".nsp";
                        ContentArchiveLibraryInterface.ModifyArchive((Stream)fileStream3, (Stream)fileStream1, (Stream)fileStream2, option.Replace.TargetEntryPath, option.Replace.DescFilePath, isNsp, config);
                    }
                }
            }
        }