public void Encrypt_Should_Throw_Crypto_Exception_If_RSA_Public_Key_Is_Invalid() { byte[] fileBytes = Random.GetNumbers(2048); asymmetricPublicKey.Modulus = new byte[1]; Assert.That(() => { HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); }, Throws.InstanceOf(typeof(CryptoException))); }
public void Hashing_Can_Generate_Same_Hash_For_Same_Data() { byte[] data = Random.GetNumbers(256); byte[] hash1 = Hashing.HmacSha(data, key); byte[] hash2 = Hashing.HmacSha(data, key); CollectionAssert.AreEqual(hash1, hash2); }
public void Hashing_Can_Generate_Hash_Of_Data() { byte[] data = Random.GetNumbers(256); byte[] hash = Hashing.HmacSha(data, key); Assert.NotNull(hash); CollectionAssert.IsNotEmpty(hash); }
public void Can_Recover_Encrypted_File() { byte[] fileBytes = Random.GetNumbers(2048); EncryptedPacket encryptedPacket = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); byte[] decryptedBytes = HybridEncryption.Decrypt(encryptedPacket, asymmetricPublicKey); CollectionAssert.AreEqual(fileBytes, decryptedBytes); }
public void Encryption_Generates_Different_Hmac_Each_Time() { byte[] fileBytes = Random.GetNumbers(2048); EncryptedPacket encryptedPacket1 = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); EncryptedPacket encryptedPacket2 = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); CollectionAssert.AreNotEqual(encryptedPacket1.Hmac, encryptedPacket2.Hmac); }
public void Encryption_Generates_New_Aes_Key_Each_Time() { byte[] fileBytes = Random.GetNumbers(2048); EncryptedPacket encryptedPacket1 = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); EncryptedPacket encryptedPacket2 = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); CollectionAssert.AreNotEqual(encryptedPacket1.EncryptedSessionKey, encryptedPacket2.EncryptedSessionKey); }
public void Hashing_Generates_Different_Hash_For_Different_Data() { byte[] data1 = Random.GetNumbers(256); byte[] data2 = Random.GetNumbers(256); byte[] hash1 = Hashing.HmacSha(data1, key); byte[] hash2 = Hashing.HmacSha(data2, key); CollectionAssert.AreNotEqual(hash1, hash2); }
public void Hash_Compare_Can_Compare_Hashes_Of_Equal_Length_Correctly() { int hashLength = 128; byte[] hash1 = Random.GetNumbers(hashLength); byte[] hash2 = new byte[hashLength]; Buffer.BlockCopy(hash1, 0, hash2, 0, hash1.Length); Assert.True(Hashing.CompareHashes(hash1, hash2)); }
public void Can_Encrypt_Stream_Of_Data() { byte[] fileBytes = Random.GetNumbers(2048); MemoryStream inputStream = new MemoryStream(fileBytes); EncryptedPacket encryptedPacket = HybridEncryption.EncryptFile(inputStream, asymmetricPublicKey); Assert.NotNull(encryptedPacket); CollectionAssert.AreNotEqual(fileBytes, encryptedPacket.EncryptedData); }
public void Hash_Compare_Can_Compare_Hashes_Of_Unequal_Length_Correctly() { int hashLength = 256; byte[] hash1 = Random.GetNumbers(hashLength); byte[] hash2 = new byte[hashLength - 1]; Buffer.BlockCopy(hash1, 0, hash2, 0, hashLength - 1); Assert.False(Hashing.CompareHashes(hash1, hash2)); }
public void Decryption_Throws_CryptoException_When_Hmac_Differs() { byte[] fileBytes = Random.GetNumbers(2048); EncryptedPacket encryptedPacket = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); encryptedPacket.Hmac[25] = (byte)((encryptedPacket.Hmac[25] + 1) % 255); Assert.Throws(typeof(CryptoException), () => { HybridEncryption.Decrypt(encryptedPacket, asymmetricPublicKey); }); }
public void Can_Encrypt_Small_File() { byte[] fileBytes = Random.GetNumbers(256); EncryptedPacket encryptedPacket = null; Assert.DoesNotThrow(() => { encryptedPacket = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); }); Assert.NotNull(encryptedPacket); Assert.That(encryptedPacket.DataType, Is.EqualTo(DataType.File), "EncryptedPacket DataType property not set correctly"); }
public void Encryption_Populates_All_Packet_Fields() { byte[] fileBytes = Random.GetNumbers(2048); EncryptedPacket encryptedPacket = HybridEncryption.Encrypt(DataType.File, fileBytes, asymmetricPublicKey); Assert.NotNull(encryptedPacket.EncryptedSessionKey, "AES key not set"); CollectionAssert.IsNotEmpty(encryptedPacket.EncryptedSessionKey, "AES key not set"); Assert.NotNull(encryptedPacket.Iv, "AES IV not set"); CollectionAssert.IsNotEmpty(encryptedPacket.Iv, "AES IV not set"); Assert.NotNull(encryptedPacket.Hmac, "HMAC not set"); CollectionAssert.IsNotEmpty(encryptedPacket.Hmac, "HMAC not set"); Assert.NotNull(encryptedPacket.EncryptedData, "Encrypted data not set"); CollectionAssert.IsNotEmpty(encryptedPacket.EncryptedData, "Encrypted data not set"); }
public void Can_Decrypt_Stream() { // raw data byte[] rawData = Random.GetNumbers(4096); // encrypt with known good encryptor byte[] encryptedBytes = SymmetricEncryption.Encrypt(rawData, key, iv); MemoryStream encryptedMemoryStream = new MemoryStream(encryptedBytes); // attempt to decrypt, then put decrypted stream into a memory stream and put that stream into an array CryptoStream decryptedStream = streamer.DecryptStream(encryptedMemoryStream, CryptoStreamMode.Read); MemoryStream decryptedMemoryStream = new MemoryStream(); decryptedStream.CopyTo(decryptedMemoryStream); byte[] decryptedBytes = decryptedMemoryStream.ToArray(); CollectionAssert.AreEqual(rawData, decryptedBytes); }
public async Task Can_Decrypt_Stream_Of_Data() { byte[] fileBytes = Random.GetNumbers(2048); MemoryStream rawStream = new MemoryStream(fileBytes); MemoryStream encryptedBytes = new MemoryStream(); await HybridEncryption.EncryptFile(rawStream, encryptedBytes, asymmetricPublicKey); encryptedBytes.Position = 0; MemoryStream decryptedStream = new MemoryStream(); bool hashOk = await HybridEncryption.DecryptFile(encryptedBytes, decryptedStream, asymmetricPublicKey); decryptedStream.Position = 0; byte[] decryptedBytes = decryptedStream.ToArray(); Assert.True(hashOk); CollectionAssert.IsNotEmpty(decryptedBytes); CollectionAssert.AreEqual(fileBytes, decryptedBytes); }
public void SetUp() { key = Random.GetNumbers(32); iv = Random.GetNumbers(16); streamer = new SymmetricStreamer(key, iv); }
public void Setup() { key = Random.GetNumbers(32); }