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); }
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); }
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); } } }
public void Receive(Guid hubId, SecureMessageContainer secureMessage) { MessageEnvelope env = new MessageEnvelope { SenderId = hubId, Contents = secureMessage, IsSecure = true }; Receive(env); }
private void OnInnerHubBroadcast(object sender, MessageEventArgs msgArgs) { if (UseEncryption) { SecureMessageContainer container = Encrypt(msgArgs.Message); Broadcast(container); } else { Broadcast(msgArgs.Message); } }
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); }
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(); } }
public void Receive(Guid hubId, SecureMessageContainer secureMessage) { base.Receive(secureMessage); }
public override Task Broadcast(SecureMessageContainer secureMessage) { return(_proxy.Invoke("SendSecure", Id, secureMessage)); }
public virtual Task Receive(SecureMessageContainer secureMessage) { Message message = Decrypt(secureMessage); return(Receive(message)); }
public abstract Task Broadcast(SecureMessageContainer secureMessage);
public override Task Broadcast(SecureMessageContainer secureMessage) { _proxy.SendSecure(Id, secureMessage); return(Task.CompletedTask); }
public override void Receive(Guid senderId, SecureMessageContainer secureMessage) { throw new NotImplementedException(); }