public static async Task<ObjectWriteResult> CreateTempFile(ObjectType type, int length, byte[] data, string rootPath) { var name = Path.Combine(rootPath, "tmp" + _random.Next(0, int.MaxValue)); using (var file = File.OpenWrite(name)) using (var stream = CompressionStream.CompressStream(file)) using (var md = new MessageDigest()) { var header = Encoding.ASCII.GetBytes(string.Format("{0} {1}\0", type.ToTypeCode(), length)); await stream.WriteAsync(header, 0, header.Length); await stream.WriteAsync(data, 0, data.Length); md.Update(header); md.Update(data); var digest = md.Digest(); return new ObjectWriteResult { FileInfo = new FileInfo(name), ObjectId = Helper.ByteArrayToId(digest) }; } }