public static string TryReadHashProtectedTextFile(string filename, string manifest, string seed)
{
if (File.Exists(filename) && File.Exists(manifest))
{
using (var md5 = MD5.Create())
{
var bytes = Encoding.UTF8.GetBytes(seed);
md5.TransformBlock(bytes, 0, bytes.Length, bytes, 0);
var memoryStream = new MemoryStream();
using (var stream = File.OpenRead(filename))
{
var buffer = Buffer;
int byteCount;
while ((byteCount = stream.Read(buffer, 0, buffer.Length)) > 0)
{
md5.TransformBlock(buffer, 0, byteCount, buffer, 0);
memoryStream.Write(buffer, 0, byteCount);
}
md5.TransformFinalBlock(buffer, 0, 0);
var testHash = File.ReadAllBytes(manifest);
if (CompareHashes(testHash, md5.Hash))
{
return System.Text.Encoding.UTF8.GetString(memoryStream.GetBuffer());
}
else
{
PSDebug.Log("Hash mismatch: {0}", filename);
return null;
}
}
}
}
else
{
PSDebug.Log("Either file: {0} or manifest {1} not found.",File.Exists(filename), File.Exists(manifest));
return null;
}
}