public void AlteredKeyCheckValueIsNotValid()
        {
            byte[] key = CryptoRandom.NextBytesStatic(32);
            byte[] kcv = KeyCheckValueValidator.GenerateKeyCheckValue(key);
            if (key[0] > 120)
            {
                key[0]--;
            }
            else
            {
                key[0]++;
            }

            bool exceptionWasThrown = false;

            try
            {
                KeyCheckValueValidator.ValidateKeyCheckValue(key, kcv);
            }
            catch (KeyCheckValueValidationException)
            {
                exceptionWasThrown = true;
            }

            Assert.True(exceptionWasThrown, "Validation of KCV should have failed, but it didn't");
        }
예제 #2
0
        private async Task AssertFileEncryption(int fileLength, bool async)
        {
            byte[] iv  = CryptoRandom.NextBytesStatic(16);
            byte[] key = CryptoRandom.NextBytesStatic(32);

            string plainTextFile = WriteToTempFile(fileLength);
            string encryptedFile = Path.GetRandomFileName();
            string decryptedFile = Path.GetRandomFileName();

            if (async)
            {
                await AesFileEncrytion.EncryptAsync(plainTextFile, encryptedFile, key, iv, true);

                await AesFileEncrytion.DecryptAsync(encryptedFile, decryptedFile, key, iv, true);
            }
            else
            {
                AesFileEncrytion.Encrypt(plainTextFile, encryptedFile, key, iv, true);
                AesFileEncrytion.Decrypt(encryptedFile, decryptedFile, key, iv, true);
            }

            try
            {
                AssertFileContent(plainTextFile, decryptedFile);
            }
            finally
            {
                File.Delete(plainTextFile);
                File.Delete(encryptedFile);
                File.Delete(decryptedFile);
            }
        }
예제 #3
0
 public void MacIs48BytesLong()
 {
     byte[] data = CryptoRandom.NextBytesStatic(1227);
     byte[] key  = CryptoRandom.NextBytesStatic(32);
     using (Stream tempStream = new MemoryStream())
     {
         tempStream.Write(data, 0, data.Length);
         byte[] mac = MessageAuthenticationCodeValidator.CalculateMessageAuthenticationCode(key, tempStream);
         Assert.Equal(48, mac.Length);
     }
 }
        public void UnalteredKeyCheckValueIsValid()
        {
            byte[] key = CryptoRandom.NextBytesStatic(32);
            byte[] kcv = KeyCheckValueValidator.GenerateKeyCheckValue(key);

            bool exceptionWasThrown = false;

            try
            {
                KeyCheckValueValidator.ValidateKeyCheckValue(key, kcv);
            }
            catch (KeyCheckValueValidationException)
            {
                exceptionWasThrown = true;
            }

            Assert.False(exceptionWasThrown, "Validation of KCV has failed");
        }
예제 #5
0
 public void MacCanBeValidated()
 {
     byte[] data = CryptoRandom.NextBytesStatic(1227);
     byte[] key  = CryptoRandom.NextBytesStatic(32);
     using (Stream tempStream = new MemoryStream())
     {
         tempStream.Write(data, 0, data.Length);
         bool   error = false;
         byte[] mac   = MessageAuthenticationCodeValidator.CalculateMessageAuthenticationCode(key, tempStream);
         try
         {
             MessageAuthenticationCodeValidator.ValidateMessageAuthenticationCode(key, mac, tempStream);
         }
         catch (DataIntegrityValidationException)
         {
             error = true;
         }
         Assert.False(error);
     }
 }
 /// <summary>
 /// Generates the key check value.
 /// </summary>
 /// <param name="key">The key.</param>
 /// <returns>Byte array, the KCV</returns>
 public static byte[] GenerateKeyCheckValue(byte[] key)
 => GenerateKeyCheckValue(key, CryptoRandom.NextBytesStatic(16));
 public void KeyCheckValidIs19BytesLong()
 {
     byte[] key = CryptoRandom.NextBytesStatic(32);
     byte[] kcv = KeyCheckValueValidator.GenerateKeyCheckValue(key);
     Assert.True(kcv.Length == 19, "KCV is not 19 bytes long");
 }