public async Task WriteReadData() { const string fileName = "hello.txt"; Random rand = new Random(156); byte[] data = new byte[1024 * 156]; rand.NextBytes(data); IRsaCryptoAccessor p12CryptoAccessor = this.CreateAccesor(); using MemoryStream writeMs = new MemoryStream(); using (ContainerWriter writer = new ContainerWriter(writeMs, fileName, await p12CryptoAccessor.ExtractPublicCertificate())) { await writer.Write(data, 0, data.Length); } using MemoryStream readMs = new MemoryStream(writeMs.ToArray()); using (ContainerReader reader = new ContainerReader(readMs, p12CryptoAccessor)) { string decodedFileName = await reader.ReadFileName(); Assert.AreEqual(fileName, decodedFileName, "Decoded file name"); using Stream contentStream = await reader.GetContentStream(); using MemoryStream buffer = new MemoryStream(data.Length + 10); await contentStream.CopyToAsync(buffer); byte[] decryptedData = buffer.ToArray(); Assert.AreEqual(data.Length, decryptedData.Length); CollectionAssert.AreEquivalent(data, decryptedData); } }
public ContainerReader(Stream readStream, IRsaCryptoAccessor cryptoAccessor) { if (readStream == null) { throw new ArgumentNullException(nameof(readStream)); } if (cryptoAccessor == null) { throw new ArgumentNullException(nameof(cryptoAccessor)); } this.readerStream = readStream; this.cryptoAccessor = cryptoAccessor; this.fileName = null; this.aes = new AesManaged(); this.aes.Mode = CipherMode.CBC; this.aes.Padding = PaddingMode.PKCS7; this.aes.KeySize = 256; this.aes.BlockSize = 128; }