public NetworkLogin() { client = new NetworkClient(); //this.recvState = Erecv.RECVCHANLLENGECOUNT; this.recvState = Erecv.RECVCHALLENGE; this.sendstate = Esend.SENDCLIENTDH; buffer = new byte[BUFFERSIZE]; }
private void recvChallenge(NetworkIOArgs args) { this.challenge = Convert.FromBase64String(Encoding.UTF8.GetString(args.Data, 0, args.Count)); Array.Clear(args.Data, 0, args.Count); this.recvState = Erecv.RECVSERVERDH; byte[] clientkey = kcrypt.randomkey(); this.clientkey = BitConverter.ToUInt64(clientkey, 0); client.SendPackage(kcrypt.encode64str(kcrypt.dhexchange(this.clientkey))); }
private void recvServerDH(NetworkIOArgs args) { Debug.Log(string.Format("serverDH is {0}", Encoding.UTF8.GetString(args.Data, 0, args.Count))); this.serverDH = BitConverter.ToUInt64(Convert.FromBase64String(Encoding.UTF8.GetString(args.Data, 0, args.Count)), 0); Array.Clear(args.Data, 0, args.Count); this.recvState = Erecv.RECVSERVERSCOUNT; this.secret = kcrypt.dhsecret(this.serverDH, this.clientkey); Debug.Log(string.Format("serverDH is {0}", Convert.ToBase64String(BitConverter.GetBytes(this.secret)))); kcrypt.SetDesKey(secret); ulong sChall = kcrypt.hmac64(BitConverter.ToUInt64(this.challenge, 0), this.secret); client.SendPackage(Convert.ToBase64String(BitConverter.GetBytes(sChall))); }