Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 public void OnMessage(NetworkIncomingMessage message)
 {
     if (predicate.Invoke(message) == false)
     {
         message.Continue(this);
     }
     else
     {
         callback.Invoke(message);
     }
 }
Пример #6
0
 public void OnMessage(NetworkIncomingMessage message)
 {
     if (message.Length < bytes)
     {
         message.Continue(this);
     }
     else
     {
         callback.Invoke(message);
     }
 }
Пример #7
0
        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);
        }