public void Hash_ValidParams_Success([Values("", " ", "data")]
                                             string dataAsString,

                                             [Values(0, 1, 10)]
                                             int workFactor,

                                             [Values("", " ", "salt")]
                                             string saltAsString)
        {
            byte[] data = dataAsString == null ? null : Encoding.UTF8.GetBytes(dataAsString);
            byte[] salt = saltAsString == null ? null : Encoding.UTF8.GetBytes(saltAsString);

            byte[] key1 = Encoding.UTF8.GetBytes("key1");
            byte[] key2 = Encoding.UTF8.GetBytes("key2");
            var    hs1  = new Sha512HashingService(key1);
            var    hs2  = new Sha512HashingService(key2);
            byte[] hash1 = hs1.Hash(data, workFactor, salt);
            byte[] hash2 = hs2.Hash(data, workFactor, salt);

            Assert.IsNotNull(hash1);
            Assert.IsNotNull(hash2);
            Assert.AreNotEqual(hash1, data);
            Assert.AreNotEqual(hash2, data);
            Assert.AreNotEqual(hash1, hash2);
        }
        public void Hash_ValidParams_Success([Values("", " ", "data")]
                                             string dataAsString,

                                             [Values(0, 1, 10)]
                                             int workFactor,

                                             [Values("", " ", "salt")]
                                             string saltAsString)
        {
            byte[] data = dataAsString == null ? null : Encoding.UTF8.GetBytes(dataAsString);
            byte[] salt = saltAsString == null ? null : Encoding.UTF8.GetBytes(saltAsString);

            byte[] key1 = Encoding.UTF8.GetBytes("key1");
            byte[] key2 = Encoding.UTF8.GetBytes("key2");
            var    hs1  = new Sha512HashingService(key1);
            var    hs2  = new Sha512HashingService(key2);

            byte[] hash1 = hs1.Hash(data, workFactor, salt);
            byte[] hash2 = hs2.Hash(data, workFactor, salt);

            Assert.IsNotNull(hash1);
            Assert.IsNotNull(hash2);
            Assert.AreNotEqual(hash1, data);
            Assert.AreNotEqual(hash2, data);
            Assert.AreNotEqual(hash1, hash2);
        }
        public void Hash_InvalidParams_ArgumentOutOfRangeExceptionThrown(string dataAsString,
                                                                         int workFactor,
                                                                         string saltAsString)
        {
            byte[] data = dataAsString == null ? null : Encoding.UTF8.GetBytes(dataAsString);
            byte[] salt = saltAsString == null ? null : Encoding.UTF8.GetBytes(saltAsString);

            byte[] key = Encoding.UTF8.GetBytes("key");
            var    hs  = new Sha512HashingService(key);

            Assert.Throws <ArgumentOutOfRangeException>(() => hs.Hash(data, workFactor, salt));
        }
        public void Hash_InvalidParams_ArgumentOutOfRangeExceptionThrown(string dataAsString,
                                                                         int    workFactor,
                                                                         string saltAsString)
        {
            byte[] data = dataAsString == null ? null : Encoding.UTF8.GetBytes(dataAsString);
            byte[] salt = saltAsString == null ? null : Encoding.UTF8.GetBytes(saltAsString);

            byte[] key = Encoding.UTF8.GetBytes("key");
            var    hs  = new Sha512HashingService(key);

            Assert.Throws<ArgumentOutOfRangeException>(() => hs.Hash(data, workFactor, salt));
        }