Exemplo n.º 1
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>();
                            });
                        }
        }
Exemplo n.º 2
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));
                        }
        }
Exemplo n.º 3
0
        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>());
                    }
        }
Exemplo n.º 4
0
        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);
                    }
        }
Exemplo n.º 5
0
        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"]));
                        }
        }
Exemplo n.º 6
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);
                                }
        }
Exemplo n.º 7
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);
                                }
        }
Exemplo n.º 8
0
        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));
                }
        }
Exemplo n.º 9
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"));
            }
        }
Exemplo n.º 10
0
        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");
            }
        }