private void SynchronizeCryptoHashMessage(NetworkIncomingMessage message) { byte[] synchronize = HandshakeCryptoHashMessage.GetHash(keys.Secret); int offset = Bytes.Find(message.ToBytes(), synchronize); byte[] bytes = message.ToBytes(offset + 20, 20); HandshakeMatch match = new HandshakeMatch(keys.Secret, bytes); found = context.Hashes.Find(match); if (found == null) { context.OnRejected(new HandshakeRejection(match)); connection.CallHandshakeRejected(); connection.Terminate(); return; } keys.Local = new HandshakeKey(HandshakeKeyOwnership.Receiver, keys.Secret, found); keys.Remote = new HandshakeKey(HandshakeKeyOwnership.Initiator, keys.Secret, found); message.Acknowledge(offset + 40); connection.Receive(MeasureCryptoPayloadMessage, HandshakeCryptoPayload.MinimumSize); }
private bool VerifyCryptoHashMessage(NetworkIncomingMessage message) { byte[] synchronize = HandshakeCryptoHashMessage.GetHash(keys.Secret); int offset = Bytes.Find(message.ToBytes(), synchronize); return(offset >= 0 && message.Length >= offset + 40); }
private void HandleCryptoMessage(NetworkIncomingMessage message, int method) { message.Acknowledge(2); keys.Remote.Acknowledge(2); connection.Send(new HandshakeCryptoPayloadMessage(2), keys.Local); connection.Receive(MeasureHandshakeMessage, HandshakeMessage.MinSize); }
private void HandleKeyExchangeMessage(NetworkIncomingMessage message) { HandshakeKeyExchange exchange = new HandshakeKeyExchange(message); keys.Secret = HandshakeCryptography.Secret(credentials, exchange.Key); message.Acknowledge(96); connection.Send(new HandshakeKeyExchangeMessage(credentials)); connection.Receive(SynchronizeCryptoHashMessage, VerifyCryptoHashMessage); }
public void OnMessage(NetworkIncomingMessage message) { if (predicate.Invoke(message) == false) { message.Continue(this); } else { callback.Invoke(message); } }
public void OnMessage(NetworkIncomingMessage message) { if (message.Length < bytes) { message.Continue(this); } else { callback.Invoke(message); } }
private void HandleCryptoPayloadMessage(NetworkIncomingMessage message) { HandshakeKey decryptor = keys.Remote.Clone(); NetworkIncomingMessage decrypted = decryptor.Decrypt(message); int size = HandshakeCryptoPayload.GetSize(decrypted); int method = HandshakeCryptoPayload.GetMethod(decrypted); message.Acknowledge(size); keys.Remote.Acknowledge(size); connection.Receive(MeasureCryptoMessage, HandshakeCryptoMessage.MinimumSize, method); }