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