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)));
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #10
0
        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);
 }
Example #17
0
 public void Setup()
 {
     key = Random.GetNumbers(32);
 }