public async Task <Stream> OpenReadAsync(CancellationToken ct)
        {
            Stream stream = null;

            System.Security.Cryptography.Aes aes = null;
            ICryptoTransform decryptor           = null;

            try
            {
                stream = await _fileInfo.OpenReadAsync(ct);

                var header = await AesHeader.ReadAsync(stream, ct);

                aes = CreateAes(header.Version);
                var key = FileSystem.ComputeKey(header.IV, header.Version);
                decryptor = CreateTransform(aes, key, header.IV, AesMode.Decrypt); // disposed by CryptoStream
                return(new CryptoStream(stream, decryptor, CryptoStreamMode.Read));
            }
            catch
            {
                decryptor?.Dispose();
                stream?.Dispose();
                throw;
            }
            finally
            {
                aes?.Dispose();
            }
        }
Exemple #2
0
        public static async Task <byte[]> GetContentBytesAsync(this IFileInfo fi, CancellationToken ct)
        {
            if (fi == null)
            {
                throw new ArgumentNullException(nameof(fi));
            }

            using var stream = await fi.OpenReadAsync(ct);

            using var ms = new MemoryStream();
            await stream.CopyToAsync(ms, 81920, ct);

            return(ms.ToArray());
        }
Exemple #3
0
        public static async Task <IFileInfo> CopyFileAsync(this IDirectoryInfo directory, IFileInfo file, string fileName, CancellationToken ct)
        {
            if (directory == null)
            {
                throw new ArgumentNullException(nameof(directory));
            }
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            using var inputStream = await file.OpenReadAsync(ct).ConfigureAwait(false);

            return(await directory.CreateFileAsync(fileName, inputStream, file.Length, ct).ConfigureAwait(false));
        }