Example #1
0
        public async Task <byte[]> HandleEncryption(CipherAction cipherAction, SymmetricCipherMode cipherMode, CipherBlockSize cipherBlockSize,
                                                    Stream data, Stream keyStream, Stream initilizationVectorStream)
        {
            var dataToProcess = await ReadAllBytesFromStream(data);

            var key = await ReadAllBytesFromStream(keyStream);

            _symmetricCipherManager.Key             = key;
            _symmetricCipherManager.CipherMode      = cipherMode;
            _symmetricCipherManager.CipherBlockSize = cipherBlockSize;

            if (cipherMode is not SymmetricCipherMode.ElectronicCodeBook)
            {
                var initializationVector = await ReadAllBytesFromStream(initilizationVectorStream);

                _symmetricCipherManager.InitializationVector = initializationVector;
            }

            var processedData = new byte[] {};

            switch (cipherAction)
            {
            case CipherAction.Encrypt:
                processedData = _symmetricCipherManager.Encrypt(dataToProcess);
                break;

            case CipherAction.Decrypt:
                processedData = _symmetricCipherManager.Decrypt(dataToProcess);
                break;
            }

            return(processedData);
        }
Example #2
0
        public void GenerateAndSaveRandomKeyToFile(string fileName, CipherBlockSize cipherBlockSize)
        {
            var randomKey = GenerateRandomKey((int)cipherBlockSize / 8);

            WriteAllBytesToFile(fileName, randomKey);
        }
Example #3
0
        public void ShouldResultAfterEncryptionThenDecryptionBeSameAsOriginaldata(int blockSize, CipherBlockSize cipherBlockSize)
        {
            //arrange
            var openText = new byte[blockSize];
            var key      = new byte[blockSize];

            var random = new Random();

            random.NextBytes(openText);
            random.NextBytes(key);

            var rijandelUnderTest = new RijandelCipher();

            rijandelUnderTest.CipherBlockSize = cipherBlockSize;

            rijandelUnderTest.CreateRoundKeys(key);

            //act
            var cipherText             = rijandelUnderTest.Encrypt(openText);
            var actualdecryptionResult = rijandelUnderTest.Decrypt(cipherText);

            //assert
            Assert.Equal(openText, actualdecryptionResult);
        }