public void ServiceChannel060Test() { var location = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) using (var clientChannel = new ServiceChannel()) using (var serviceChannel = new ServiceChannel()) { serviceChannel.SetReadStream(stream1, false); //serviceChannel.CipherLib["rsa-private"] = RsaCipher.LoadFromPEM($"{location}\\data\\server\\server.pem", $"{location}\\data\\server\\server.pem.key"); clientChannel.SetWriteStream(stream2, false); clientChannel.Encrypt(); clientChannel.WriteObject("HELO"); clientChannel.CipherLib["rsa-public"] = RsaCipher.LoadFromPEM($"{location}\\data\\server\\server.pem"); clientChannel.Encrypt(); clientChannel.WriteObject("HELO2"); clientChannel.Flush(); Console.WriteLine(stream2.Length); TransferData(stream2, stream1); var msg = serviceChannel.ReadObject <string>(); Assert.AreEqual("HELO", msg); Assert.Catch <SecureChannelException>(() => { var msg2 = serviceChannel.ReadObject <string>(); }); } }
public void DbxGetKeyCommandTest020() { using (var stream1 = new MemoryStream()) using (var channel1 = new ServiceChannel()) using (var channel2 = new ServiceChannel()) { channel1.SetWriteStream(stream1, canDispose: false); Context ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel1; ctx.Query = new QueryMessage { Command = "dbx-GetKey" }; ctx.Query.Params["username"] = "******"; ctx.Query.Params["uuid"] = "safevault"; ctx.Query.Params["password"] = OneTimePassword.Get(Base32.Decode("12345678"), 0); Command.Process(ctx); stream1.Position = 0; channel2.SetReadStream(stream1, canDispose: false); Assert.Catch <SecureChannelException>(() => channel2.ReadObject <ResponseMessage>()); } }
public void DbxGetKeyCommandTest010() { using (var stream1 = new MemoryStream()) using (var channel1 = new ServiceChannel()) using (var channel2 = new ServiceChannel()) { channel1.SetWriteStream(stream1, canDispose: false); Context ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel1; ctx.Query = new QueryMessage { Command = "dbx-GetKey" }; ctx.Query.Params["username"] = "******"; ctx.Query.Params["uuid"] = "safevault"; ctx.Query.Params["password"] = OneTimePassword.Get(Base32.Decode("12345678"), 0); Command.Process(ctx); stream1.Position = 0; channel2.SetReadStream(stream1, canDispose: false); channel2.CipherLib["rsa-private"] = RsaCipher .LoadFromPEM($"{_location}/data/client/test-user/cer.pem", $"{_location}/data/client/test-user/cer.pem.key"); var response = channel2.ReadObject <ResponseMessage>(); Assert.AreEqual(200, response.StatusCode); var data = response.Header["data"]; Assert.AreEqual("1234567801234567890abcdefghiklmnopqvwxyz12345678012345678901234567890=", data); } }
public void DbxUploadCommandTest010() { if (Directory.Exists($"{_location}/data/client/test-user/dbx")) { Directory.Delete($"{_location}/data/client/test-user/dbx", true); } using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) using (var channel1 = new ServiceChannel()) using (var channel2 = new ServiceChannel()) { byte[] dbxData = Random.Get(256); channel2.SetReadStream(stream1, canDispose: false); channel2.SetWriteStream(stream2, canDispose: false); channel2.Write(dbxData); stream2.Position = 0; channel1.SetReadStream(stream2, canDispose: false); channel1.SetWriteStream(stream1, canDispose: false); Context ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel1; ctx.Query = new QueryMessage { Command = "dbx-Upload" }; ctx.Query.Params["username"] = "******"; ctx.Query.Params["uuid"] = "safevault"; ctx.Query.Params["password"] = "******"; ctx.Query.Params["md5"] = Hash.MD5(dbxData); ctx.Query.Params["last-modified"] = "2017-01-01 12:00:00Z"; Command.Process(ctx); stream1.Position = 0; channel2.CipherLib["rsa-private"] = RsaCipher .LoadFromPEM($"{_location}/data/client/test-user/cer.pem", $"{_location}/data/client/test-user/cer.pem.key"); var response = channel2.ReadObject <ResponseMessage>(); Assert.AreEqual(200, response.StatusCode); Assert.AreEqual("OK", response.Header["data"]); var data = File.ReadAllBytes($"{_location}/data/client/test-user/dbx/safevault.dbx"); Assert.AreEqual(dbxData, data); var fileInfo = new FileInfo($"{_location}/data/client/test-user/dbx/safevault.dbx"); Assert.AreEqual(fileInfo.CreationTime, DateTime.Parse(ctx.Query.Params["last-modified"])); } }
public void ServiceChannel010Test() { var location = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) using (var stream11 = new MemoryStream()) using (var stream21 = new MemoryStream()) using (var clientChannel = new ServiceChannel()) using (var serviceChannel = new ServiceChannel()) { serviceChannel.SetReadStream(stream1, false); serviceChannel.CipherLib["rsa-private"] = RsaCipher.LoadFromPEM($"{location}\\data\\server\\server.pem", $"{location}\\data\\server\\server.pem.key"); clientChannel.SetWriteStream(stream2, false); clientChannel.CipherLib["rsa-public"] = RsaCipher.LoadFromPEM($"{location}\\data\\server\\server.pem"); //clientChannel.CipherLib["rsa-private"] = RsaCipher.LoadFromPEM($"{location}\\data\\client\\test-user\\cer.pem", $"{location}\\data\\client\\test-user\\cer.pem.key"); clientChannel.Encrypt(); clientChannel.WriteObject("HELO"); clientChannel.Flush(); clientChannel.SetReadStream(stream21, false); Console.WriteLine(stream2.Length); TransferData(stream2, stream1); var value = serviceChannel.ReadObject <string>(); Console.WriteLine(value); Assert.AreEqual("HELO", value); //clientChannel.CipherLib["rsa-public"] = RsaCipher.LoadFromPEM($"{location}\\data\\client\\test-user\\cer.pem"); serviceChannel.SetWriteStream(stream11, false); serviceChannel.Encrypt(); serviceChannel.WriteObject("EHLO"); serviceChannel.Flush(); Console.WriteLine(stream11.Length); TransferData(stream11, stream21); Console.WriteLine(string.Join(" ", stream21.ToArray().Select(m => $"{m:X2}").ToArray())); var value1 = clientChannel.ReadObject <string>(); Console.WriteLine(value1); Assert.AreEqual("EHLO", value1); } }
public void ServiceChannel020Test() { var location = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) using (var stream11 = new MemoryStream()) using (var stream21 = new MemoryStream()) using (var clientChannel = new ServiceChannel()) using (var serviceChannel = new ServiceChannel()) { serviceChannel.SetReadStream(stream1, false); clientChannel.SetWriteStream(stream2, false); clientChannel.Encrypt(); clientChannel.WriteObject("HELO"); clientChannel.Flush(); clientChannel.SetReadStream(stream21, false); Console.WriteLine(stream2.Length); TransferData(stream2, stream1); var value = serviceChannel.ReadObject <string>(); Console.WriteLine(value); Assert.AreEqual("HELO", value); serviceChannel.SetWriteStream(stream11, false); serviceChannel.Encrypt(); serviceChannel.WriteObject("EHLO"); serviceChannel.Flush(); Console.WriteLine(stream11.Length); TransferData(stream11, stream21); Console.WriteLine(string.Join(" ", stream21.ToArray().Select(m => $"{m:X2}").ToArray())); var value1 = clientChannel.ReadObject <string>(); Console.WriteLine(value1); Assert.AreEqual("EHLO", value1); } }
public void PingCommandTest() { var qm = new QueryMessage { Command = "ping" }; using (var stream1 = new MemoryStream()) using (var channel1 = new ServiceChannel()) using (var channel2 = new ServiceChannel()) { channel1.SetWriteStream(stream1, canDispose: false); var ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel1; ctx.Query = qm; Command.Process(ctx); stream1.Position = 0; channel2.SetReadStream(stream1, canDispose: false); var response = channel2.ReadObject <ResponseMessage>(); Assert.AreEqual(200, response.StatusCode); var data = DateTime.Parse(response.Header["data"]); Assert.AreEqual(0, (int)(DateTime.Now - data).TotalMinutes); } using (var stream1 = new MemoryStream()) using (var channel = new ServiceChannel()) { channel.SetWriteStream(stream1, canDispose: false); var ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel; ctx.Query = qm; Assert.Catch <ArgumentException>(() => Command.Process(ctx)); } }
public async Task <IActionResult> Get() { if (Request.HttpContext.Request.ContentType != "application/encrypted-data") { return(BadRequest()); } var context = new Context(); using (var channel = new ServiceChannel()) { context.ClientIP = IPAddress.None; context.Channel = channel; var responseStream = new MemoryStream(); try { context.ClientIP = GetClientIP(); channel.SetWriteStream(responseStream, false); channel.SetReadStream(Request.HttpContext.Request.Body, canDispose: false); channel.CipherLib["rsa-private"] = X509Store.GetCertificate(Conf.Certificate).Clone(); context.Query = channel.ReadObject <QueryMessage>(); channel.Encrypt(); Command.Process(context); } catch (Exception e) { responseStream?.Dispose(); responseStream = ExceptionHandle(e, context); } responseStream.Position = 0; return(File(responseStream, "application/encrypted-data")); } }
public void DbxSetKeyCommandTest010() { string newValue = Guid.NewGuid().ToString(); if (File.Exists($"{_location}/data/client/test-user/vault.conf.bak")) { File.Delete($"{_location}/data/client/test-user/vault.conf.bak"); } File.Copy($"{_location}/data/client/test-user/vault.conf", $"{_location}/data/client/test-user/vault.conf.bak"); try { using (var stream1 = new MemoryStream()) using (var channel1 = new ServiceChannel()) using (var channel2 = new ServiceChannel()) { channel1.SetWriteStream(stream1, canDispose: false); Context ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel1; ctx.Query = new QueryMessage { Command = "dbx-SetKey" }; ctx.Query.Params["username"] = "******"; ctx.Query.Params["uuid"] = "safevault"; ctx.Query.Params["password"] = OneTimePassword.Get(Base32.Decode("12345678"), 0); ctx.Query.Params["value"] = newValue; Command.Process(ctx); stream1.Position = 0; channel2.SetReadStream(stream1, canDispose: false); channel2.CipherLib["rsa-private"] = RsaCipher .LoadFromPEM($"{_location}/data/client/test-user/cer.pem", $"{_location}/data/client/test-user/cer.pem.key"); var response = channel2.ReadObject <ResponseMessage>(); Assert.AreEqual(200, response.StatusCode); var data = response.Header["data"]; Assert.AreEqual("OK", data); } Unity.Resolve <TokenList>().Reset(); using (var stream1 = new MemoryStream()) using (var channel1 = new ServiceChannel()) using (var channel2 = new ServiceChannel()) { channel1.SetWriteStream(stream1, canDispose: false); Context ctx = new Context(); ctx.ClientIP = IPAddress.None; ctx.Channel = channel1; ctx.Query = new QueryMessage { Command = "dbx-GetKey" }; ctx.Query.Params["username"] = "******"; ctx.Query.Params["uuid"] = "safevault"; ctx.Query.Params["password"] = OneTimePassword.Get(Base32.Decode("12345678"), 0); Command.Process(ctx); stream1.Position = 0; channel2.SetReadStream(stream1, canDispose: false); channel2.CipherLib["rsa-private"] = RsaCipher .LoadFromPEM($"{_location}/data/client/test-user/cer.pem", $"{_location}/data/client/test-user/cer.pem.key"); var response = channel2.ReadObject <ResponseMessage>(); Assert.AreEqual(200, response.StatusCode); var data = response.Header["data"]; Assert.AreEqual(newValue, data); } } finally { File.Copy($"{_location}/data/client/test-user/vault.conf.bak", $"{_location}/data/client/test-user/vault.conf", true); File.Delete($"{_location}/data/client/test-user/vault.conf.bak"); } }