Ejemplo n.º 1
0
        private void OpenKeyFile(string path)
        {
            var identity = MessageClientIdentity.ImportFromFile(path, () =>
            {
                //TODO: Need to popup up a password input box
                return("a");
            });

            propertyGrid.SelectedObject = identity;
        }
        public void CreateAllEncryptedServerKeyFormats()
        {
            string path = Path.Combine(Path.GetTempPath(), "keyUtilTest");

            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }

            Directory.CreateDirectory(path);

            string systemName      = "aSystem";
            string baseKeyFilePath = Path.Combine(path, $"{systemName}-server");

            var proc = StartKeyUtil($"generate-server -s {systemName} --256 -j -l -u -d \"{path}\"", "pass1", "pass1");

            proc.StandardInput.WriteLine("pass1");
            proc.StandardInput.WriteLine("pass1");

            proc.WaitForExit();

            Assert.IsTrue(proc.ExitCode >= 0);

            Assert.IsTrue(File.Exists(baseKeyFilePath + ".priv"));
            Assert.IsTrue(File.Exists(baseKeyFilePath + ".privu"));
            Assert.IsTrue(File.Exists(baseKeyFilePath + ".privl"));
            Assert.IsTrue(File.Exists(baseKeyFilePath + ".pub"));

            var priv  = MessageClientIdentity.ImportFromFile(baseKeyFilePath + ".priv", "pass1");
            var privu = MessageClientIdentity.ImportFromFile(baseKeyFilePath + ".privu");
            var privl = MessageClientIdentity.ImportFromFile(baseKeyFilePath + ".privl");
            var pub   = MessageClientIdentity.ImportFromFile(baseKeyFilePath + ".pub");

            Assert.AreEqual(priv.IdentityHash, privu.IdentityHash);
            Assert.AreEqual(priv.IdentityHash, privl.IdentityHash);
            Assert.AreEqual(priv.IdentityHash, pub.IdentityHash);

            Directory.Delete(path, true);

            proc.Dispose();
        }
Ejemplo n.º 3
0
        private static void Main(string[] args)
        {
            // Get secrets
            var devEnvironmentVariable = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT");
            var isDevelopment          = string.IsNullOrEmpty(devEnvironmentVariable) || devEnvironmentVariable.ToLower() == "development";

            string secretsPath = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                @"Microsoft\UserSecrets\9a735c2c-ec7a-4c5a-936e-7210fc978f5d",
                "secrets.json");

            var secrets = JsonConvert.DeserializeObject <UserSecrets>(File.ReadAllText(secretsPath));

            // Do everything else

            int val = 0;

            string systemName         = "aSystem";
            string rabbitMQServerName = "garage";
            string userName           = "******";
            string password           = "******";

            var duhh1 = AesCng.Create();


            CngProvider provider = new CngProvider("dumdum");


            var random = new Random();

            UInt32 key = random.NextUInt32();
            UInt32 iv  = random.NextUInt32();

            (var cipherText, var signature) = SimpleCBC.Encode("Hi", key, iv, 2);

            var sig = BitConverter.GetBytes(signature);

            var duhh    = System.Text.Encoding.UTF8.GetString(cipherText);
            var message = SimpleCBC.Decode(cipherText, key, iv, 2);


            var errorTag = new MessageTagValue("Severity", "Error");
            var infoTag  = new MessageTagValue("Severity", "Info");
            var debugTag = new MessageTagValue("Severity", "Debug");

            using var serverPublicInfo  = MessageClientIdentity.ImportFromFile(@"Keys\system-server.pub");
            using var serverPrivateInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-server.priv", "abc");

            using var coordinatorPublicInfo  = MessageClientIdentity.ImportFromFile(@"Keys\system-coordinator.pub");
            using var coordinatorPrivateInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-coordinator.priv", "monkey123");

            using var client1PublicInfo  = MessageClientIdentity.ImportFromFile(@"Keys\system-client1.pub");
            using var client1PrivateInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-client1.priv", "abc");

            using var client2PublicInfo  = MessageClientIdentity.ImportFromFile(@"Keys\system-client2.pub");
            using var client2PrivateInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-client2.priv", "abc");

            using var client3PublicInfo  = MessageClientIdentity.ImportFromFile(@"Keys\system-client3.pub");
            using var client3PrivateInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-client3.priv", "abc");

            //using var pushoverPublicInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-pushoverClient.pub");
            //using var pushoverPrivateInfo = MessageClientIdentity.ImportFromFile(@"Keys\system-pushoverClient.priv", "abc");


            Console.WriteLine(serverPublicInfo.IdentityHash);
            Console.WriteLine(client1PublicInfo.IdentityHash);
            Console.WriteLine(client2PublicInfo.IdentityHash);
            Console.WriteLine(client3PublicInfo.IdentityHash);



            var xbeeModule        = new XBeeNetworkGatewayModule("COM8", new SerialPortParameters(115200, 8, StopBits.One, Parity.None, Handshake.None));
            var coordinatorModule = new TrustCoordinatorModule(TimeSpan.FromMinutes(1));

            var server = new MessageClientConfigurationBuilder()
                         .RabbitMQCredentials(userName, password)
                         .RabbitMQServerHostName(rabbitMQServerName)
                         .Identity(coordinatorPrivateInfo)
                         .AddClientIdentity(client1PublicInfo)
                         .AddClientIdentity(client2PublicInfo)
                         .AddClientIdentity(client3PublicInfo)
                         //.AddClientIdentity(pushoverPublicInfo)
                         .AutoDeleteQueuesOnClose(true)
                         .QueuesAreDurable(false)
                         .AddModule(coordinatorModule)
                         .AddModule(xbeeModule)
                         .CreateMessageClient();


#if false
            var server = new MessageServerConfigurationBuilder()
                         .RabbitMQCredentials(userName, password)
                         .RabbitMQServerHostName(rabbitMQServerName)
                         .Identity(serverPrivateInfo)
                         .AddClientIdentity(client1PublicInfo)
                         .AddClientIdentity(client2PublicInfo)
                         .AddClientIdentity(client3PublicInfo)
                         //.AddClientIdentity(pushoverPublicInfo)
                         .AutoDeleteQueuesOnClose(true)
                         .QueuesAreDurable(false)
                         .CreateMessageServer();
#endif

            server.MessageReceived += (sender, e) =>
            {
                e.Response = MessageResponse.Ack;

                if (e.MessageEnevelope.Message.GetType() == typeof(XBeeFromXBeeMessage))
                {
                    var tempMessage = (XBeeFromXBeeMessage)e.MessageEnevelope.Message;

                    Log.Verbose($"{tempMessage.XBeeSourceAddress}: {tempMessage.RawData}");
                }
            };

            server.AsynchronousException += Client_AsynchronousException;

            System.Timers.Timer sendTimer = new System.Timers.Timer(1000)
            {
                AutoReset = true
            };

            sendTimer.Elapsed += (sender, e) =>
            {
                IntMessage message = new IntMessage(val);

                string tag = val % 2 == 0 ? "even" : "odd";

                server.WriteToSubscriptionQueues(message, true, new MessageTagValue("duhh", tag), errorTag, infoTag);
                val++;

                //server.BroacastToAllClients(message);
            };

            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Verbose()
                         //.WriteTo.DistributedWorkersSink(server)
                         .WriteTo.Console()
                         .CreateLogger();

            //Log.Verbose($"Server public string: {serverInfo.PublicKey.PublicKeyToString()}");

            server.Connect(TimeSpan.FromSeconds(20));
            sendTimer.Start();

            //Thread.Sleep(30000);

            var odd   = new MessageTagValue("duhh", "odd");
            var even  = new MessageTagValue("duhh", "even");
            var never = new MessageTagValue("duhh", "never");

#if false
            var pushoverModule = new PushoverModule(secrets.PushoverAppApiKey, secrets.PushoverUserKey);
            pushoverModule.AddTransform <IntMessage>(t =>
            {
                if (t.Payload % 10 == 0)
                {
                    return(null); // (t.Payload.ToString());
                }

                return(null);
            });
#endif



            // TODO: Not all configuration options return the right configuration builder type
#if false
            var pushoverClient = new PushoverMessageClientConfigurationBuilder()
                                 .PushoverAppApiKey(secrets.PushoverAppApiKey)
                                 .PushoverUserKey(secrets.PushoverUserKey)
                                 .RabbitMQCredentials(userName, password)
                                 .RabbitMQServerHostName(rabbitMQServerName)
                                 .ServerIdentity(serverPublicInfo)
                                 .Identity(pushoverPrivateInfo)
                                 .AutoDeleteQueuesOnClose(true)
                                 .QueuesAreDurable(false)
                                 .CreateMessageClient();


            pushoverClient.AddTransform <IntMessage>(t =>
            {
                if (t.Payload % 10 == 0)
                {
                    return(null); // (t.Payload.ToString());
                }

                return(null);
            });

            pushoverClient.AsynchronousException += Client_AsynchronousException;
            pushoverClient.Connect(20000);
#endif

            AzureIoTModule iotModule = new AzureIoTModule(secrets.AzureIoTHubConnectionString);
            iotModule.ForwardMessageToIoTHubTransform = (me) =>
            {
                return(null);

                if (me.Message.GetType() == typeof(XBeeFromXBeeMessage))
                {
                    var xBeeMessage = (XBeeFromXBeeMessage)me.Message;

                    var iotMessage = new Microsoft.Azure.Devices.Client.Message();

                    var tempData = xBeeMessage.GetJObject()["Data"];

                    iotMessage.Properties.Add("Refrigerator Temperature", tempData[0]["Refrigerator"].ToString());
                    iotMessage.Properties.Add("Freezer Temperature", tempData[1]["Freezer"].ToString());

                    return(iotMessage);
                }

                return(null);
            };

            MessageClient client1 = new MessageClientConfigurationBuilder()
                                    .RabbitMQCredentials(userName, password)
                                    .RabbitMQServerHostName(rabbitMQServerName)
                                    .TrustCoordinatorIdentity(coordinatorPublicInfo)
                                    .Identity(client1PrivateInfo)
                                    .AutoDeleteQueuesOnClose(true)
                                    .QueuesAreDurable(false)
                                    //.AddModule(pushoverModule)
                                    .AddModule(iotModule)
                                    .CreateMessageClient();

            xbeeModule.OpenXBee();

            client1.AsynchronousException += Client_AsynchronousException;

            client1.MessageReceived += (sender, e) =>
            {
                e.Response = MessageResponse.Ack;

                if (e.MessageEnevelope.Message.GetType() == typeof(IntMessage))
                {
                    Console.WriteLine($"Client 1: Message Payload: {((IntMessage)e.MessageEnevelope.Message).Value}.");
                }
            };
            client1.Connect(TimeSpan.FromSeconds(10), odd, new XBeeReceivedDataTag());
            client1.BeginFullWorkConsume(true);

            MessageClient client2 = new MessageClientConfigurationBuilder()
                                    .RabbitMQCredentials(userName, password)
                                    .RabbitMQServerHostName(rabbitMQServerName)
                                    .TrustCoordinatorIdentity(coordinatorPublicInfo)
                                    .Identity(client2PrivateInfo)
                                    .AutoDeleteQueuesOnClose(true)
                                    .QueuesAreDurable(false)
                                    .CreateMessageClient();

            client2.AsynchronousException += Client_AsynchronousException;

            client2.MessageReceived += (sender, e) =>
            {
                e.Response = MessageResponse.Ack;
                if (e.MessageEnevelope.Message.GetType() == typeof(IntMessage))
                {
                    Console.WriteLine($"Client 2: Message Payload: {((IntMessage)e.MessageEnevelope.Message).Value}.");
                }
                else if (e.MessageEnevelope.Message.GetType() == typeof(XBeeFromXBeeMessage))
                {
                    var tempMessage = (XBeeFromXBeeMessage)e.MessageEnevelope.Message;

                    Console.WriteLine($"Client 2 XBee ({tempMessage.XBeeSourceAddress}): {tempMessage.RawData}");
                }
            };
            client2.Connect(TimeSpan.FromSeconds(10), even, new XBeeReceivedDataTag());
            //client2.BeginFullWorkConsume(true);

#if false
            MessageClient client3 = new MessageClientConfiguration()
                                    .RabbitMQCredentials(userName, password)
                                    .RabbitMQServer(rabbitMQServerName)
                                    .ServerInfo(serverInfo)
                                    .ClientInfo(client3Info)
                                    .AutoDeleteQueuesOnClose(true)
                                    .QueuesAreDurable(false)
                                    .CreateMessageClient();
            client3.MessageReceived += (sender, e) =>
            {
                e.Response = MessageResponse.Ack;
                Console.WriteLine($"Client 3: Message Payload: {((IntMessage)e.MessageEnevelope.Message).Payload}.");
            };

            client3.BeginFullWorkConsume(true);
#endif

            //
            //client3.Connect(TimeSpan.FromSeconds(10));


            var serialPort = new XBeeRemoteSerialPort(xbeeModule, new SerializableXBeeAddress(new XBee64BitAddress("0013A20041AE9E32")));

            Log.Information("Dumdum");

            Console.ReadKey();
        }