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); }
public void GenerateAndSaveRandomKeyToFile(string fileName, CipherBlockSize cipherBlockSize) { var randomKey = GenerateRandomKey((int)cipherBlockSize / 8); WriteAllBytesToFile(fileName, randomKey); }
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); }