public void ServiceChannel070Test() { 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.CipherLib["rsa-public"] = RsaCipher.LoadFromPEM($"{location}\\data\\server\\server.pem"); clientChannel.Encrypt(); var data = Security.Random.Get(128 * 1024 + 1); clientChannel.Encrypt(); clientChannel.Write(data); clientChannel.Flush(); Console.WriteLine(stream2.Length); TransferData(stream2, stream1); var data1 = serviceChannel.Read(); Assert.AreEqual(Hash.MD5(data), Hash.MD5(data1)); } }
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 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 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")); } }