Exemplo n.º 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);
        }
Exemplo n.º 2
0
        public static FileHash Find(this FileHashCollection hashes, HandshakeMatch match)
        {
            foreach (FileHash hash in hashes)
            {
                if (match.Matches(hash))
                {
                    return(hash);
                }
            }

            return(null);
        }