Пример #1
0
        public static void TryLoad(string path, DataManager manager)
        {
            if (File.Exists(path) == false)
            {
                return;
            }

            var initFileSystem = InitFileSystemFile.Read(path);
            var entry          = initFileSystem.FirstOrDefault(
                e => e.File.FileSystemName == null && e.File.Name == FilePath);

            if (entry == null)
            {
                return;
            }

            using (var temp = new MemoryStream(entry.File.Payload, false))
                using (var reader = new StreamReader(temp))
                {
                    var yaml = new YamlStream();
                    yaml.Load(reader);
                    var mapping = (YamlMappingNode)yaml.Documents[0].RootNode;
                    var start   = (YamlSequenceNode)mapping.Children[new YamlScalarNode("start")];
                    foreach (var child in start.Children.OfType <YamlMappingNode>())
                    {
                        var key   = ((YamlScalarNode)child.Children[new YamlScalarNode("key")]).Value;
                        var keyId = ((YamlScalarNode)child.Children[new YamlScalarNode("keyid")]).Value;
                        manager.AddCryptoKey(keyId, key);
                    }
                }
        }
Пример #2
0
        public static void Main(string[] args)
        {
            bool showHelp = false;

            var options = new OptionSet()
            {
                { "h|help", "show this message and exit", v => showHelp = v != null },
            };

            List <string> extras;

            try
            {
                extras = options.Parse(args);
            }
            catch (OptionException e)
            {
                Console.Write("{0}: ", GetExecutableName());
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `{0} --help' for more information.", GetExecutableName());
                return;
            }

            if (extras.Count < 1 || extras.Count > 2 || showHelp == true)
            {
                Console.WriteLine("Usage: {0} [OPTIONS]+ input_initfs [output_dir]", GetExecutableName());
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return;
            }

            var inputPath      = extras[0];
            var outputBasePath = extras.Count > 1 ? extras[1] : Path.ChangeExtension(inputPath, null) + "_unpack";

            inputPath      = Path.GetFullPath(inputPath);
            outputBasePath = Path.GetFullPath(outputBasePath);

            var initFileSystem = InitFileSystemFile.Read(inputPath);

            foreach (var entry in initFileSystem.Select(e => e.File))
            {
                var fsName     = FilterName(entry.FileSystemName ?? "__INITFS");
                var outputName = FilterName(entry.Name);

                var outputPath       = Path.Combine(outputBasePath, fsName, outputName);
                var outputParentPath = Path.GetDirectoryName(outputPath);
                if (string.IsNullOrEmpty(outputParentPath) == false)
                {
                    Directory.CreateDirectory(outputParentPath);
                }
                File.WriteAllBytes(outputPath, entry.Payload);
            }
        }