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); } } }
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); } }