private void OnInternalOperationResponse(RtsMessageHeader header, byte[] data) { OperationResponse response; if (!(header.IsEncrypted ? protocol.TryParseOperationResponseEncrypted(data, this.CryptoProvider, out response) : protocol.TryParseOperationResponse(data, out response))) { if (log.IsDebugEnabled) { log.DebugFormat("Failed to parse internal operation response for peer with connection id {0}.", new object[] { this.ConnectionId }); } } else if (response.OperationCode != 0) { if (log.IsWarnEnabled) { log.WarnFormat("Received unknown internal operation code {0}", new object[] { response.OperationCode }); } } else { if (response.ReturnCode == 0) { object obj2; byte[] buffer2; if (!response.Parameters.TryGetValue(1, out obj2)) { log.Error("Parameter server key missing in initialize encryption response;"); return; } if (obj2 == null) { log.ErrorFormat("Parameter server key was not set in initialize encryption response;", new object[0]); return; } byte[] otherPartyPublicKey = obj2 as byte[]; if (otherPartyPublicKey == null) { log.ErrorFormat("Parameter server key has wrong type {0} in initialize encryption response;", new object[] { obj2.GetType() }); } this.keyExchange.DeriveSharedKey(otherPartyPublicKey); using (SHA256 sha = SHA256.Create()) { buffer2 = sha.ComputeHash(this.keyExchange.SharedKey); } this.CryptoProvider = new RijndaelCryptoProvider(buffer2, PaddingMode.PKCS7); } this.OnInitializeEcryptionCompleted(response.ReturnCode, response.DebugMessage); } }
/// <summary> /// Tries to parse the message header. /// </summary> /// <param name="data"> The data.</param> /// <param name="header"> The header.</param> /// <returns>True on success.</returns> public bool TryParseMessageHeader(byte[] data, out RtsMessageHeader header) { if ((data.Length < 2) | (data[0] != 0xf3)) { header = new RtsMessageHeader(); return(false); } RtsMessageHeader header2 = new RtsMessageHeader { MagicByte = RtsMagicByte.GpBinaryV2, MessageType = (RtsMessageType)((byte)(data[1] & 0x7f)), IsEncrypted = (data[1] & 0x80) == 0x80 }; header = header2; return(true); }
private void OnOperationResponseInternal(RtsMessageHeader header, byte[] data) { OperationResponse response; if (!(header.IsEncrypted ? protocol.TryParseOperationResponseEncrypted(data, this.CryptoProvider, out response) : protocol.TryParseOperationResponse(data, out response))) { if (log.IsDebugEnabled) { log.DebugFormat("Failed to parse operation response for peer with connection id {0}.", new object[] { this.ConnectionId }); } } else { SendParameters sendParameters = new SendParameters { Encrypted = header.IsEncrypted }; this.OnOperationResponse(response, sendParameters); } }
private void OnEventInternal(RtsMessageHeader header, byte[] data) { EventData data2; if (!(header.IsEncrypted ? protocol.TryParseEventDataEncrypted(data, this.CryptoProvider, out data2) : protocol.TryParseEventData(data, out data2))) { if (log.IsDebugEnabled) { log.DebugFormat("Failed to parse event for peer with connection id {0}.", new object[] { this.ConnectionId }); } } else { SendParameters sendParameters = new SendParameters { Encrypted = header.IsEncrypted }; this.OnEvent(data2, sendParameters); } }
/// <summary> /// Tries to parse the message header. /// </summary> /// <param name="data">The data.</param> /// <param name="header">The header.</param> /// <returns>True on success.</returns> public bool TryParseMessageHeader(byte[] data, out RtsMessageHeader header) { return(this.headerWriter.TryParseHeader(data, out header)); }