diff --git a/OpenRa.DataStructures/AssetInfo.cs b/OpenRa.DataStructures/AssetInfo.cs
new file mode 100644
index 0000000000..caa072e462
--- /dev/null
+++ b/OpenRa.DataStructures/AssetInfo.cs
@@ -0,0 +1,33 @@
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+
+namespace OpenRa
+{
+ class AssetInfo
+ {
+ public readonly string Filename;
+ public readonly string Hash;
+
+ public AssetInfo(string filename, string hash)
+ {
+ Filename = filename;
+ Hash = hash;
+ }
+
+ static string GetHash(string filename)
+ {
+ using (var csp = SHA1.Create())
+ return new string(csp.ComputeHash(File.ReadAllBytes(filename))
+ .SelectMany(a => a.ToString("x2")).ToArray());
+ }
+
+ public static AssetInfo FromLocalFile(string filename)
+ {
+ return new AssetInfo(filename, GetHash(filename));
+ }
+
+ /* todo: perf: cache this */
+ public bool IsPresent() { return File.Exists(Filename) && (Hash == GetHash(Filename)); }
+ }
+}
diff --git a/OpenRa.DataStructures/OpenRa.DataStructures.csproj b/OpenRa.DataStructures/OpenRa.DataStructures.csproj
index 1fd76608f7..f794fd193f 100644
--- a/OpenRa.DataStructures/OpenRa.DataStructures.csproj
+++ b/OpenRa.DataStructures/OpenRa.DataStructures.csproj
@@ -14,6 +14,7 @@
2.0
+ v3.5
true
@@ -33,11 +34,15 @@
+
+ 3.5
+
+