3using System.Security.Cryptography;
4using System.Threading.Tasks;
19 public static Task
CryptoTransform(ICryptoTransform Transform, Stream Source, Stream Destination)
31 public static async Task
CryptoTransform(ICryptoTransform Transform, Stream Source, Stream Destination,
int BufferSize)
34 throw new ArgumentException(
"Invalid buffer size.", nameof(BufferSize));
36 long l = Source.Length;
38 BufferSize = (int)Math.Min(l, BufferSize);
40 byte[] Input =
new byte[BufferSize];
41 byte[] Output =
new byte[BufferSize];
46 j = (int)Math.Min(BufferSize, l);
47 if (await Source.ReadAsync(Input, 0, j) != j)
48 throw new IOException(
"Unexpected end of file.");
53 Output = Transform.TransformFinalBlock(Input, 0, j);
54 await Destination.WriteAsync(Output, 0, Output.Length);
58 j = Transform.TransformBlock(Input, 0, j, Output, 0);
59 await Destination.WriteAsync(Output, 0, j);
71 public static async Task<bool>
CopyAsync(Stream From, Stream To,
long DataLen)
75 int BufSize = (int)Math.Min(DataLen, 65536);
76 byte[] Buffer =
new byte[BufSize];
80 if (DataLen < BufSize)
81 BufSize = (int)DataLen;
83 if (await From.ReadAsync(Buffer, 0, BufSize) != BufSize)
86 await To.WriteAsync(Buffer, 0, BufSize);
Helper methods for encrypting and decrypting streams of data.
static async Task CryptoTransform(ICryptoTransform Transform, Stream Source, Stream Destination, int BufferSize)
Transforms a stream of data.
static async Task< bool > CopyAsync(Stream From, Stream To, long DataLen)
Copies DataLen number of bytes from From to To .
static Task CryptoTransform(ICryptoTransform Transform, Stream Source, Stream Destination)
Transforms a stream of data.