private Task <object> Auth_Requested(Models.SnooperMessage Request) { if (IsServer) { return(Task.FromResult((object)new MutualKeyProtocalAuthResponse() { Validated = ValidateConnection() })); } else { return(Task.FromResult((object)new MutualKeyProtocalAuthResponse() { Validated = true })); } }
private Task <object> Validate_Message(Models.SnooperMessage Request) { if (IsServer) { return(null); } MutualKeyProtocalValidationRequest RQ = Request.ReadObject <MutualKeyProtocalValidationRequest>(); MemoryStream Output; MemoryStream Input = new MemoryStream(Encoding.UTF8.GetBytes(RQ.RawToken)); string SaltString = RQ.Salt; byte[] SaltBytes = Encoding.UTF8.GetBytes(SaltString); byte[] BKey = new byte[32]; byte[] IV = Convert.FromBase64String(RQ.IV); using (SHA256CryptoServiceProvider SHA = new SHA256CryptoServiceProvider()) { byte[] tmp = SHA.ComputeHash(KeyBytes.Concat(SaltBytes).ToArray()); Array.Copy(tmp, 0, BKey, 0, 16); Array.Copy(tmp, 0, BKey, 15, 16); } using (AesCryptoServiceProvider AES = new AesCryptoServiceProvider()) { AES.Mode = CipherMode.ECB; AES.KeySize = 128; using (ICryptoTransform Encryptor = AES.CreateEncryptor(BKey, IV)) { Output = new MemoryStream(); CryptoStream Crypto = new CryptoStream(Output, Encryptor, CryptoStreamMode.Write); Input.Position = 0; Input.CopyTo(Crypto); Crypto.FlushFinalBlock(); } } string Token = Convert.ToBase64String(Output.ToArray()); return(Task.FromResult((object)new MutualKeyProtocalValidationResponse() { Token = Token })); }