Exemplo n.º 1
0
        private bool ValidateAsServer()
        {
            byte[] Data = new byte[16];
            using (RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider())
                provider.GetBytes(Data);
            string       q = string.Join("", Data);
            MemoryStream Output;
            MemoryStream Input      = new MemoryStream(Encoding.UTF8.GetBytes(q));
            string       SaltString = CryptographicProvider.GetCryptographicallySecureString(32);

            byte[] SaltBytes = Encoding.UTF8.GetBytes(SaltString);
            byte[] BKey      = new byte[32];
            byte[] IV        = new byte[16];
            using (RNGCryptoServiceProvider Provider = new RNGCryptoServiceProvider())
            {
                Provider.GetBytes(IV);
            }
            string IVStr = Convert.ToBase64String(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 MyToken = Convert.ToBase64String(Output.ToArray());
            MutualKeyProtocalValidationRequest MSG = new MutualKeyProtocalValidationRequest()
            {
                IV       = IVStr,
                Salt     = SaltString,
                RawToken = q
            };
            MutualKeyProtocalValidationResponse resp = Channels["$SnooperSec.MutualKeyProtocal.SignToken"].Query <MutualKeyProtocalValidationResponse>(MSG);

            return(resp.Token == MyToken);
        }
Exemplo n.º 2
0
        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
            }));
        }