Exemplo n.º 1
0
        protected SecureMessageContainer Encrypt(Message msg)
        {
            SecureMessageContainer container = new SecureMessageContainer();
            RijndaelManaged        rmCrypto  = new RijndaelManaged();

            RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();

            rsaProvider.FromXmlString(RemotePublicKey);

            container.EncryptedKey = Convert.ToBase64String(rsaProvider.Encrypt(rmCrypto.Key, false));
            container.EncryptedIV  = Convert.ToBase64String(rsaProvider.Encrypt(rmCrypto.IV, false));

            using (MemoryStream enc = new MemoryStream())
                using (CryptoStream cs = new CryptoStream(enc, rmCrypto.CreateEncryptor(), CryptoStreamMode.Write))
                    using (MemoryStream ser = new MemoryStream())
                    {
                        DataContractSerializer serializer = new DataContractSerializer(typeof(Message));
                        serializer.WriteObject(ser, msg);
                        ser.Position = 0;

                        ser.WriteTo(cs);

                        cs.FlushFinalBlock();

                        container.EncryptedData = Convert.ToBase64String(enc.ToArray());
                    }

            return(container);
        }
Exemplo n.º 2
0
        private Message Decrypt(SecureMessageContainer container)
        {
            Message msg = null;

            RijndaelManaged rmCrypto = new RijndaelManaged();

            byte[] key = KeyProvider.Decrypt(Convert.FromBase64String(container.EncryptedKey));
            byte[] iv  = KeyProvider.Decrypt(Convert.FromBase64String(container.EncryptedIV));

            using (MemoryStream encrypted = new MemoryStream(Convert.FromBase64String(container.EncryptedData)))
                using (CryptoStream cs = new CryptoStream(encrypted, rmCrypto.CreateDecryptor(key, iv), CryptoStreamMode.Read))
                {
                    byte[] buffer = new byte[encrypted.Length];

                    int bytesRead = cs.Read(buffer, 0, (int)encrypted.Length);

                    using (MemoryStream decrypted = new MemoryStream(bytesRead))
                    {
                        decrypted.Write(buffer, 0, bytesRead);
                        decrypted.Position = 0;

                        DataContractSerializer serializer = new DataContractSerializer(typeof(Message));
                        msg = (Message)serializer.ReadObject(decrypted);
                    }
                }

            return(msg);
        }
Exemplo n.º 3
0
        public void SendSecure(Guid senderId, SecureMessageContainer secureMessage)
        {
            var clients = _clients.All();

            byte[] clearKey = KeyProvider.Decrypt(Convert.FromBase64String(secureMessage.EncryptedKey));
            byte[] clearIV  = KeyProvider.Decrypt(Convert.FromBase64String(secureMessage.EncryptedIV));

            RSACryptoServiceProvider clientRsaProvider = new RSACryptoServiceProvider();

            foreach (MsmqConnectedClient client in clients)
            {
                if (client.Id == senderId)
                {
                    continue;
                }

                clientRsaProvider.FromXmlString(client.PublicKey);

                SecureMessageContainer clientMessage = new SecureMessageContainer();
                clientMessage.EncryptedData = secureMessage.EncryptedData;
                clientMessage.EncryptedKey  = Convert.ToBase64String(clientRsaProvider.Encrypt(clearKey, false));
                clientMessage.EncryptedIV   = Convert.ToBase64String(clientRsaProvider.Encrypt(clearIV, false));

                client.Receive(senderId, clientMessage);
            }
        }
        public void SendSecure(Guid senderId, SecureMessageContainer secureMessage)
        {
            byte[] clearKey = KeyProvider.Decrypt(Convert.FromBase64String(secureMessage.EncryptedKey));
            byte[] clearIV  = KeyProvider.Decrypt(Convert.FromBase64String(secureMessage.EncryptedIV));

            RSACryptoServiceProvider clientRsaProvider = new RSACryptoServiceProvider();

            IList <WcfConnectedClient> receivers = _clients.All();

            foreach (WcfConnectedClient client in receivers)
            {
                try
                {
                    if (client.Id == senderId)
                    {
                        continue;
                    }

                    clientRsaProvider.FromXmlString(client.PublicKey);

                    SecureMessageContainer clientMessage = new SecureMessageContainer();
                    clientMessage.EncryptedData = secureMessage.EncryptedData;
                    clientMessage.EncryptedKey  = Convert.ToBase64String(clientRsaProvider.Encrypt(clearKey, false));
                    clientMessage.EncryptedIV   = Convert.ToBase64String(clientRsaProvider.Encrypt(clearIV, false));

                    client.ClientCallback.Receive(senderId, clientMessage);
                }
                catch
                {
                    RemoveReceiver(client.Id);
                }
            }
        }
        public void SendSecure(Guid senderId, SecureMessageContainer secureMessage)
        {
            IList <HubConnectedClient> allClients = _clients.All();

            byte[] clearKey = KeyProvider.Decrypt(Convert.FromBase64String(secureMessage.EncryptedKey));
            byte[] clearIV  = KeyProvider.Decrypt(Convert.FromBase64String(secureMessage.EncryptedIV));

            RSACryptoServiceProvider clientRsaProvider = new RSACryptoServiceProvider();

            foreach (HubConnectedClient client in allClients)
            {
                if (client.Id == senderId)
                {
                    continue;
                }

                var signalrClient = Clients.Client(client.ConnectionId);

                if (signalrClient != null)
                {
                    clientRsaProvider.FromXmlString(client.PublicKey);

                    SecureMessageContainer clientMessage = new SecureMessageContainer();
                    clientMessage.EncryptedData = secureMessage.EncryptedData;
                    clientMessage.EncryptedKey  = Convert.ToBase64String(clientRsaProvider.Encrypt(clearKey, false));
                    clientMessage.EncryptedIV   = Convert.ToBase64String(clientRsaProvider.Encrypt(clearIV, false));

                    signalrClient.ReceiveSecure(senderId, clientMessage);
                }
            }
        }
Exemplo n.º 6
0
        public void Receive(Guid hubId, SecureMessageContainer secureMessage)
        {
            MessageEnvelope env = new MessageEnvelope
            {
                SenderId = hubId,
                Contents = secureMessage,
                IsSecure = true
            };

            Receive(env);
        }
Exemplo n.º 7
0
 private void OnInnerHubBroadcast(object sender, MessageEventArgs msgArgs)
 {
     if (UseEncryption)
     {
         SecureMessageContainer container = Encrypt(msgArgs.Message);
         Broadcast(container);
     }
     else
     {
         Broadcast(msgArgs.Message);
     }
 }
Exemplo n.º 8
0
        public override Task Broadcast(SecureMessageContainer secureMessage)
        {
            MessageEnvelope env = new MessageEnvelope();

            env.SenderId  = Id;
            env.ServiceOp = HubServiceOperation.Send;
            env.Contents  = secureMessage;
            env.IsSecure  = true;

            Message msg = new Message();

            msg.Body      = env;
            msg.Formatter = new XmlMessageFormatter(new Type[1] {
                typeof(MessageEnvelope)
            });

            _remoteQueue.Send(msg);
            return(Task.CompletedTask);
        }
Exemplo n.º 9
0
        private void OnReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
        {
            MessageQueue mq  = (MessageQueue)sender;
            Message      msg = mq.EndReceive(e.AsyncResult);

            try
            {
                MessageEnvelope env = (MessageEnvelope)msg.Body;

                switch (env.ServiceOp)
                {
                case HubServiceOperation.Send:
                    if (env.IsSecure)
                    {
                        SecureMessageContainer container = (SecureMessageContainer)env.Contents;
                        SendSecure(env.SenderId, container);
                    }
                    else
                    {
                        MessageHub.Message hubMsg = (MessageHub.Message)env.Contents;
                        Send(env.SenderId, hubMsg);
                    }
                    break;

                case HubServiceOperation.AddReceiver:
                    MsmqConnectedClient client = (MsmqConnectedClient)env.Contents;
                    AddReceiver(client);
                    break;

                case HubServiceOperation.RemoveReceiver:
                    Guid clientId = (Guid)env.Contents;
                    RemoveReceiver(clientId);
                    break;
                }
            }
            finally
            {
                msg.Dispose();
                mq.BeginReceive();
            }
        }
Exemplo n.º 10
0
 public void Receive(Guid hubId, SecureMessageContainer secureMessage)
 {
     base.Receive(secureMessage);
 }
Exemplo n.º 11
0
 public override Task Broadcast(SecureMessageContainer secureMessage)
 {
     return(_proxy.Invoke("SendSecure", Id, secureMessage));
 }
Exemplo n.º 12
0
        public virtual Task Receive(SecureMessageContainer secureMessage)
        {
            Message message = Decrypt(secureMessage);

            return(Receive(message));
        }
Exemplo n.º 13
0
 public abstract Task Broadcast(SecureMessageContainer secureMessage);
Exemplo n.º 14
0
 public override Task Broadcast(SecureMessageContainer secureMessage)
 {
     _proxy.SendSecure(Id, secureMessage);
     return(Task.CompletedTask);
 }
 public override void Receive(Guid senderId, SecureMessageContainer secureMessage)
 {
     throw new NotImplementedException();
 }