// just an unoptimized example of SHA1 hashing public static string GetHash(string firstBuildHash) { var stringBytes = StringUtils.StringToBytes(firstBuildHash); var sha1 = new SHA1Wrapper(); var hash = sha1.ComputeHash(stringBytes); sha1.Clear(); return(StringUtils.HashBytesToHexString(hash)); }
private static List <FileHash> HashSuitableFilesInZipFile(string path, FileFilter[] fileFilters, SHA1Wrapper sha1) { ZipFile zf = null; var fileHashes = new List <FileHash>(); try { var fs = File.OpenRead(path); zf = new ZipFile(fs); var i = 0f; foreach (ZipEntry zipEntry in zf) { i++; if (!zipEntry.IsFile) { continue; } var entryFileName = zipEntry.Name; var suitableFile = false; foreach (var fileFilter in fileFilters) { if (fileFilter.MatchesPath(entryFileName)) { suitableFile = true; break; } } if (!suitableFile) { continue; } EditorUtility.DisplayProgressBar("ACTk: Generating code hash", "Hashing files...", i / zf.Count); var zipStream = zf.GetInputStream(zipEntry); var hash = sha1.ComputeHash(zipStream); var hashString = StringUtils.HashBytesToHexString(hash); fileHashes.Add(new FileHash(entryFileName, hashString)); //Debug.Log("Path: " + zipEntry.Name + "\nHash: " + hashString); zipStream.Close(); } } catch (Exception e) { Debug.LogError(ACTkConstants.LogPrefix + "Error while calculating code hash: " + e); return(null); } finally { if (zf != null) { zf.IsStreamOwner = true; zf.Close(); } } return(fileHashes); }