public static void Main(string[] args) { #if DEBUG args = new string[] { "SafeBox", "Repo", "watchTest", "Bob" }; #else if (args.Length != 4) { Console.WriteLine("Usage: Watcher.exe <directory path> <repo> <prefix> <recipient key>"); return; } #endif string path = args [0]; Repo repo = Repo.Create(args [1]); string prefix = args [2]; string recipientName = args [3]; Directory.CreateDirectory(path); KeyStorage keyStorage = KeyStorage.Default; PublicKey recipientKey = null; if (recipientName != null) { recipientKey = keyStorage.GetPublic(recipientName); EncryptedRepo er = new EncryptedRepo(repo, keyStorage); er.AddKey(recipientKey); repo = er; } DirectoryWatcher dw = new DirectoryWatcher(path, repo, prefix); dw.Run(); }
public static void Main(string[] args, KeyStorage keyStorage) { //Usage if (args.Length != 4) { throw new HelpException("Missing arguments"); } string sourcePath = args [1]; string repoPath = args [2]; string receipientName = args [3]; //Source if (Directory.Exists(sourcePath) == false) { throw new HelpException("Source directory not found: " + sourcePath); } //Repo Repo repo = Repo.Create(repoPath); //Sender and Recipient keys PrivateKey senderKey = keyStorage.DefaultKey; PublicKey recipientKey = keyStorage.GetPublic(receipientName); //Prepare Route message recording of ChunkID RouteRepo rr = new RouteRepo(repo); //Prepare Encryption EncryptedRepo er = new EncryptedRepo(rr, null); er.AddKey(recipientKey); Console.Write("Generating Tree..."); //Send Tree ChunkHash tree = TreeChunk.GenerateChunk(sourcePath, er); //TreeMessage TreeMessage tm = new TreeMessage(tree, Path.GetDirectoryName(sourcePath)); Chunk tmc = Message.ToChunk(tm, senderKey); ChunkHash tmch = er.WriteChunk(tmc); er.StoreMessage("file", tmch); //RouteMessage RouteMessage rm = rr.RouteMessage; rm.MessageChunkHash = tmch.bytes; rm.To = receipientName; //Store unencrypted RouteMessage Chunk rmChunk = Message.ToChunk(rm); repo.WriteChunk(rmChunk); repo.StoreMessage("route", rmChunk.ChunkHash); Console.WriteLine("RouteMessage Stored"); }
public static void Main(string[] args, KeyStorage keyStorage) { if (args.Length != 4) { throw new HelpException("Missing arguments"); } //Storage Repo repo = Repo.Create(args [1]); repo = new EncryptedRepo(repo, keyStorage); //Find message Chunk chunk = null; if (args [2].Length == 64) { ChunkHash id = ChunkHash.FromHashBytes(Hash.FromString(args [2]).bytes); chunk = repo.ReadChunk(id); } else { ICollection <ChunkHash> messages = repo.GetMessageList("file"); foreach (ChunkHash bh in messages) { if (bh.ToString().StartsWith(args [2])) { chunk = repo.ReadChunk(bh); } } } Message message = Message.FromChunk(chunk, keyStorage); if (message == null) { Console.Error.WriteLine("Message not found"); return; } TreeMessage tm = message as TreeMessage; if (tm == null) { Console.Error.WriteLine("Not a TreeMessage: " + message.GetType().Name); return; } Console.WriteLine("Found TreeMessage " + tm.Name); string targetPath = Path.Combine(args [3], tm.Name); TreeChunk.Extract(repo, ChunkHash.FromHashBytes(tm.TreeChunkHash), targetPath); }
/// <summary> /// Test reading and writing to repo /// </summary> public static void Main(string[] args, KeyStorage keyStorage) { //Test buffer to transmit byte[] buffer = new byte[4096]; Random r = new Random(); r.NextBytes(buffer); string recipientName = null; if (args.Length == 3) { recipientName = args [2]; } if (args.Length > 3 || args.Length < 2) { throw new HelpException("Missing arguments"); } string repoPath = args [1]; //Repository Repo repo = Repo.Create(repoPath); //Sender and Recipient keys PublicKey recipientKey = null; if (recipientName != null) { recipientKey = keyStorage.GetPublic(recipientName); EncryptedRepo er = new EncryptedRepo(repo, keyStorage); er.AddKey(recipientKey); repo = er; } Chunk c = new Chunk(buffer); var ch = repo.WriteChunk(c); Chunk c2 = repo.ReadChunk(ch); for (int n = 0; n < buffer.Length; n++) { if (buffer [n] != c2.Data [n]) { throw new InvalidDataException("Failed at byte " + n); } } Console.WriteLine("Test succeded"); }
public static void Main(string[] args, KeyStorage keyStorage) { if (args.Length != 2) { throw new HelpException("Missing arguments"); } //Repo Repo repo = Repo.Create(args [1]); //Find message ICollection <ChunkHash> messages = repo.GetMessageList("file"); EncryptedRepo es = new EncryptedRepo(repo, keyStorage); //Iterate over all messages foreach (ChunkHash mid in messages) { Console.Write(mid.ToString().Substring(0, 10) + "... "); Message message = Message.FromChunk(es.ReadChunk(mid), keyStorage); //No key found if (message == null) { Console.WriteLine("no key"); continue; } if (message.Signature != null) { Console.Write("(signed by " + message.Signature.Name + ") "); } TreeMessage tm = message as TreeMessage; if (tm != null) { Console.WriteLine("TreeMessage " + tm.Name); continue; } RouteMessage rm = message as RouteMessage; if (rm != null) { Console.WriteLine("RouteMessage to " + rm.To); continue; } Console.WriteLine("unknown message type: " + message.GetType().Name); } }