示例#1
0
        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));
                        }
        }
示例#2
0
        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>();
                            });
                        }
        }
示例#3
0
        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);
                                }
        }
示例#4
0
        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);
                                }
        }
示例#5
0
        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"));
            }
        }