private void HandshakeWorker_DoWork(object sender, DoWorkEventArgs e) { IPEndPoint a = new IPEndPoint(IPAddress.Any, 1); localPair = PublicKeyBox.GenerateKeyPair(); var message = Encoding.ASCII.GetBytes("Key"); message = message.Concat(randomID) .Concat(localPair.PublicKey) .Concat(Encoding.ASCII.GetBytes(name)) .ToArray(); socket.Send(message, message.Length); var response = socket.Receive(ref a); if (Encoding.ASCII.GetString(response.Take(3).ToArray()) != "Key" || response.Length != 35) { HandshakeWorker.ReportProgress(2); return; } remotePublicKey = response.Skip(3).Take(32).ToArray(); message = Encoding.ASCII.GetBytes("Ses").Concat(randomID).ToArray(); socket.Send(message, message.Length); response = socket.Receive(ref a); if (Encoding.ASCII.GetString(response.Take(3).ToArray()) != "AOk" || response.Length != 7) { HandshakeWorker.ReportProgress(2); return; } sessionID = response.Skip(3).Take(4).ToArray(); HandshakeWorker.ReportProgress(1); }
public HandshakeDialog(UdpClient socket, IPEndPoint endpoint, string name) { InitializeComponent(); this.socket = socket; this.socket.Connect(endpoint); randomID = new byte[8]; (new RNGCryptoServiceProvider()).GetBytes(randomID); this.name = name; this.endpoint = endpoint; HandshakeWorker.RunWorkerAsync(); }