|
#1
|
||||
|
||||
|
XHashEx v2.0 File Hashing & Checksum Verification API for Inno Setup 84 algorithms · multi-threaded · Win32 DLL (32 & 64-bit Windows) · by BLACKFIRE69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ OVERVIEW XHashEx is a lightweight, high-performance hashing library crafted for Inno Setup. It generates and verifies checksum files for entire folders, hashes single files, and exposes 84 hashing algorithms — from fast CRC32/XXHash to the full cryptographic suite (SHA-2, SHA-3, BLAKE2/3 …) — all from a single DLL with live per-file and overall progress tracking. Ideal for verifying the integrity of downloaded payloads, large data sets, or already-installed files before continuing an installation. ▌ TECHNICAL SPECIFICATIONS
▌ WHAT'S NEW (v2.0) ⚠ BREAKING CHANGE — No Backward Compatibility Every exported function was renamed with an XH_ prefix and a cleaner name (e.g. CalculateHashesForDir → XH_GenerateDir). v1.x scripts will not work until imports are updated — swap to the bundled XHashEx.iss header. The ProcessMessages export was removed entirely; the DLL pumps the message queue itself. ✦ Multi-Threading Support (NEW) Hash many files in parallel via a worker-thread pool, count selectable at runtime with XH_SetThreadCount (XH_THREADS_SINGLE / N / XH_THREADS_AUTO). OFF by default — opt in with one call. ✦ Light Callback Mode (NEW) On folders with tens of thousands of files, per-file callback crossings into Pascal Script dominate the runtime, not the hashing. XH_SetCallbackMode(XH_CALLBACK_LIGHT) keeps directory runs fast in BOTH thread modes: failures/missing/final file are always reported, plus a ~10×/s sampled tick — the log still records every file. OFF by default. ✦ Measured Performance (28,036 files · xxHash32 · SATA SSD · Windows 11) Code:
╭───────────────────┬──────────────────────┬──────────────┬───────────╮ │ Mode │ Duration v1.4+ (Mar) │ Duration 2.0 │ Speedup │ ├───────────────────┼──────────────────────┼──────────────┼───────────┤ │ ST generation │ 7 min 32 sec │ 32 sec │ ~14× │ │ ST verification │ 8 min 40 sec │ 35 sec │ ~15× │ │ MT generation │ 5 min 36 sec │ 26 sec │ ~13× │ │ MT verification │ 6 min 13 sec │ 28 sec │ ~13× │ ╰───────────────────┴──────────────────────┴──────────────┴───────────╯ ✦ Byte-Weighted Progress (NEW) Overall progress reflects the share of BYTES hashed, so the bar moves smoothly even when file sizes vary wildly. Toggle with XH_SetProgressMode (on by default). ✦ Accurate MT Progress + Instant Pause In MT runs the overall percent tracks exactly what's reported to your callback — it reaches 100% precisely when the run finishes — and Pause/Resume/Cancel take effect immediately even under heavy load. ✦ Significant Performance Improvements Throughput scales with cores (auto-capped to keep disk access sane), no extra per-file metadata pass before hashing, each worker reuses its hash object across files, and the DLL pumps the message queue itself. ✦ New High-Performance File Search Engine The old file-search code is replaced with a faster wide-API scanner customized for hashing (lean path-only mode), pre-compiled wildcard masks, and full case-insensitive $"regex" support. ✦ Expanded Algorithm Set The full cryptographic suite is now exposed — 80+ algorithms total (added SHA-224/384, SHA-3/Keccak, RIPEMD-160/320, WhirlPool, BLAKE2B/2SP/2BP, GOST, Snefru, Tiger/Haval variants …). ✦ Unicode Fixes Checksum and log files are written/read as UTF-8, so non-Latin file names (Cyrillic, CJK …) round-trip correctly instead of being mangled. ✦ Performance Upgrade Read buffer and hash object reused across files (no per-file alloc), files opened once with sequential-scan I/O, and progress callbacks throttled to whole-percent changes. ✦ Bug Fixes & Stability Fixed a UI-freeze regression during long operations, corrected progress reporting on the verification path, and various smaller fixes. ✦ Refreshed Example & Docs A new, comprehensive Inno Setup 6 demo (XHashEx_Example.iss) with a Multi-threaded toggle (paired with light callback mode), a live Elapsed / Speed / ETA readout, and a final Duration + average-throughput summary — plus an updated quick-reference. ▌ KEY FEATURES ✦ Directory Checksum Generation Recursively hash an entire folder into a single checksum file (.md5/.sha1/.sha256/.sfv …), one algorithm per run. ✦ Checksum Verification Verify files against a checksum file with an explicit algorithm, or in auto-detect mode (CRC32/MD5/SHA1/SHA256/SHA512) for mixed-algorithm lists. ✦ Single-File Hashing Compute and return the digest of one file, or verify it against a known hash. ✦ Powerful File Selection (Masks) Include/Exclude using wildcards, sub-folders, @list files, and case-insensitive $"regex" patterns — mix freely with '|'. ✦ Multi-Threaded Hashing Optionally hash in parallel across a worker-thread pool (selectable count, or auto). Result callbacks stay on your calling thread — safe to enable with no other code changes. ✦ Live Progress Tracking Per-file %, overall % (byte-weighted by default), file size, bytes processed, total file count, per-file status (Ok / Bad / Missing). ✦ Process Control Pause, Resume, and Stop a running operation safely at any point. ✦ Customizable Logging Optional log file with fully customizable log message strings. ✦ Checksum File Comments Write custom comment lines into the header of the generated checksum file. ✦ Attribute Control Optionally include hidden and/or system files when scanning. ✦ Performance Tuning Adjustable read buffer (default 4 MB) for max throughput on very large files; hash object + buffer reused across files. ✦ Full Unicode Support Non-Latin file names handled correctly; checksum and log files written as UTF-8. ✦ Previous-Hash Cache Append new results to existing in-memory hashes to build cumulative checksum files across multiple passes. ✦ Bonus: File Search / Enumeration API A built-in wide-API file scanner (wfs_*) for listing files/directories by the same mask/regex syntax, with optional per-file size, attributes, and CRC32. ▌ SUPPORTED ALGORITHMS (80+ total) Code:
╭───────────────────┬──────────────────────────────────────────────────────╮ │ Group │ Algorithms │ ├───────────────────┼──────────────────────────────────────────────────────┤ │ Checksum │ CRC32 │ │ MD │ MD2, MD4, MD5 │ │ SHA-1 / SHA-2 │ SHA0, SHA1, SHA-224/256/384/512, SHA-512/224, /256 │ │ SHA-3 / Keccak │ SHA3-224/256/384/512, Keccak-224/256/288/384/512 │ │ RIPEMD │ RIPEMD, RIPEMD-128/160/256/320 │ │ BLAKE │ BLAKE2S, BLAKE2B, BLAKE2SP, BLAKE2BP, BLAKE3 │ │ Tiger │ Tiger & Tiger2 (3/4/5 rounds x 128/160/192) │ │ Haval │ Haval (3/4/5 rounds x 128/160/192/224/256) │ │ Other crypto │ WhirlPool, GOST, GOST R 34.11-2012, HAS-160, Snefru, │ │ │ Grindahl, Panama, RadioGatun │ │ Fast / non-crypto │ MurmurHash3, XXHash32 │ ╰───────────────────┴──────────────────────────────────────────────────────╯ ▌ MASKS (Include / Exclude) Matched against the file's RELATIVE path + name, combined with '|'. Blank or '*' means all files. Code:
*.dll|*.exe wildcards / extensions
images\png\* a sub-folder
G????info.* ? = single char
@"IncludeFiles.txt" @list file (one mask per line)
$"^setup.*\.exe$" case-insensitive regex
*.dll|@list.txt|$"\d{4}" mix all three
(v1.x names in parentheses)
▌ QUICK START EXAMPLES Example 1 — Generate a checksum file for a folder Code:
#include "XHashEx.iss"
function MyProgress(FileName: WideString; FileSize: Extended;
FileProgress, TotalProgress, TotalFiles, FileCounted, StatusCode: Integer): Boolean;
begin
// update your UI here ... (no ProcessMessages needed)
Result := False; // return True to abort
end;
if XH_GenerateDir(
ExpandConstant('{app}\checksums.sha256'),
ExpandConstant('{app}'),
XH_SHA256, @MyProgress) = XH_PROCESS_DONE then
Log('Checksum file created.');
Code:
case XH_VerifyDir(
ExpandConstant('{app}\checksums.sha256'),
ExpandConstant('{app}'),
XH_SHA256, 0, True, @MyProgress) of
XH_PROCESS_DONE: Log('All files verified.');
XH_INVALID_CHECKSUM_FILE: Log('Checksum file missing/invalid.');
XH_PROCESS_ABORTED: Log('Cancelled by user.');
end;
Code:
// auto-detect handles CRC32/MD5/SHA1/SHA256/SHA512
XH_VerifyDirAuto(
ExpandConstant('{app}\hash_mixed.md5'),
ExpandConstant('{app}'),
0, False, @MyProgress); // PreviousFileCount, no log file
Code:
Digest := XH_HashFile(
ExpandConstant('{app}\game.exe'), XH_XXHASH_32, @MySingleProgress);
MsgBox('XXHash32: ' + Digest, mbInformation, MB_OK);
Code:
XH_SetIncludeAttribs(True, False); // include hidden, not system
XH_SetBufferSize(4096); // 4 MB read buffer
XH_GenerateDirEx(
ExpandConstant('{app}\data.md5'),
ExpandConstant('{app}'),
'*.dll|*.exe|$"^data\d+\.bin$"', // include masks
'*.log|$"\.(tmp|bak)$"', // exclude masks
True, False, XH_MD5, @MyProgress);
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ Feedback, bug reports and suggestions are welcome. Enjoy! — BLACKFIRE69 . Last edited by BLACKFIRE69; Today at 05:33. Reason: Added latest update |
| The Following 22 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
ARTEMiS14 (05-09-2020), audiofeel (22-02-2023), Carldric Clement (16-01-2023), Cesar82 (04-09-2020), DedSec (05-10-2020), DelphiBuilder (22-12-2022), dixen (03-09-2020), Ele (22-12-2022), Entai44 (22-02-2021), ffmla (05-08-2022), Gehrman (05-08-2022), Harsh ojha (03-09-2020), hdneo (04-01-2023), hitman797 (09-08-2022), Jiva newstone (03-09-2020), kenzo34 (08-02-2022), kozmik (19-04-2023), Lord.Freddy (10-08-2022), Mortal Lord (04-09-2020), ScOOt3r (05-08-2022), Snapppr6 (04-09-2020), ZAZA4EVER (03-09-2020) | ||
| Sponsored Links |
|
#2
|
||||
|
||||
|
XHash Update 1.1v
XHash Update 1.1v
_ Last edited by BLACKFIRE69; Today at 05:22. |
| The Following 10 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
Balaji007 (05-10-2020), DedSec (05-10-2020), dixen (06-09-2020), Epic Titan 69 (20-02-2021), ffmla (06-09-2020), Gehrman (05-08-2022), Harsh ojha (05-09-2020), kenzo34 (08-02-2022), ScOOt3r (08-02-2022), shazzla (06-10-2020) | ||
|
#3
|
||||
|
||||
|
I am appreciating your work friend. Your tools are pretty cool
__________________
If you will smile,You will live long Just like the haters,they are helping to improve your skills. |
| The Following User Says Thank You to Balaji007 For This Useful Post: | ||
BLACKFIRE69 (05-10-2020) | ||
|
#5
|
||||
|
||||
|
XHash New Update
Update available! What's New:
ChecksumX Code:
USAGE: ChecksumX.exe [generate] [autoclose] [/x=<ExcludeFile>] <Checksum_File> <Algorithm_Index> <Base_Path> OPTIONS: generate - Generate a checksumfile. autoclose - Automatically close when the process is done. /x=<file> - Excluding file masks list for generate only. _ Last edited by BLACKFIRE69; Today at 05:25. |
|
#6
|
||||
|
||||
|
Hello. Your file is good, but if I use the VclStyle skin, when the dll file wants to show the error box, the installation file closes suddenly. can you remove the error box from dll
?
Last edited by Lord.Freddy; 05-08-2022 at 05:15. |
|
#7
|
||||
|
||||
|
can you specify what the error message is?
|
|
#8
|
||||
|
||||
|
#9
|
||||
|
||||
|
Quote:
if this doesn't work either, send me your sample script so i can take a look. . Last edited by BLACKFIRE69; Today at 05:26. |
| The Following User Says Thank You to BLACKFIRE69 For This Useful Post: | ||
Gehrman (05-08-2022) | ||
|
#10
|
||||
|
||||
|
Quote:
Last edited by Lord.Freddy; 16-08-2022 at 20:32. |
| The Following User Says Thank You to Lord.Freddy For This Useful Post: | ||
Gehrman (05-08-2022) | ||
|
#11
|
||||
|
||||
|
Quote:
Try with the script attached. |
| The Following 3 Users Say Thank You to Cesar82 For This Useful Post: | ||
|
#12
|
||||
|
||||
|
XHash_Next v1.0
Quote:
Code:
hash_mixed.md5 ; Generator: XHashNext DLL v1.0 ; Algorithm: MD5 (128 bits) ; No. Files: 14 ; MD5 AC3856A351B3C13556B2386CD13BB6CA cover.jpg 12F6B355C84327092D1115E5B1DB97D1 GameInfo.txt ABD14375A3126F9296DCD88132E9652F OverviewInfo.txt 18FAD69BBCE73113C4A6FB211E6A844F PicForm.png ; SHA1 F81A451604B9C3606925A2AB3F406CC5C56C729E PicForm0.png 4B65BA757C862625850D480D574200CEFCDFF162 Reqirements.txt 544A11C86AD0BCBF0ED01019E8250F64A30594EE Ubuntu.ttf ; SHA256 26D21E5C309FAB938F378A83825284E231B056F0A1894078CF4750F015A7DFC3 wallpapers1.jpg AE9EE7E81B55B54745B1B5A60F715A52DEDCE1527F154871F3BBDFEAEC9D52EB wallpapers2.jpg 22022B461C6AF2EBFC3EF817EA941EE5BF7A53B163BFCD26F0CB2C66DC7EC7B0 wallpapers3.jpg B9232B0D21C4EE1ADAB083C04505322C6F22A6C7008E3E81185ABBC06F6590F5 wallpapers4.jpg ; SHA512 40268B8DF3C4369930AC928B2793F29DF8007D237D3323A7E4F1EF7BBE1CD270035B2E8C01C4DE0E08492914CB6E2FB2146BBB878143172153D480B3FC80B1AD wallpapers5.jpg 9A06694CB047301BC9DA1120139A70EFA9BCF7439C23705B590844B4D812504462CD023459BB5914BCD4542F512A5FDE0FF617568C016E149451D60FDE19CFF1 Wallpaper_color.jpg A640305651EFE50B6F62BC0BBF9E53F8E23936B971E1C05289C0B38FF576C86DB3A305F6E02E42CA6E1C493664BE10C930BAA15433EBF3956A3C9D49670635A6 Wallpaper_color2.jpg Quote:
thanks to @Cesar82 for the suggestions for the XHash_Next and testing it. . Last edited by BLACKFIRE69; Today at 05:26. |
|
#13
|
||||
|
||||
|
XHash_Next - Update
Quote:
Last edited by BLACKFIRE69; 17-08-2022 at 05:15. |
| The Following User Says Thank You to BLACKFIRE69 For This Useful Post: | ||
Lord.Freddy (10-08-2022) | ||
|
#14
|
||||
|
||||
|
Thanks for all these BLACKFIRE69, nice work, keep it up
__________________
Can't find a Game Conversion? Check the 'Conversion INDEX'
![]() |
| The Following User Says Thank You to Grumpy For This Useful Post: | ||
BLACKFIRE69 (10-08-2022) | ||
|
#15
|
||||
|
||||
|
XHashNext - Update
Quote:
![]() Thanks to @Cesar82 check the first post. |
| The Following User Says Thank You to BLACKFIRE69 For This Useful Post: | ||
Cesar82 (06-09-2022) | ||
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Best Compression For Archiving | brispuss | PC Games | 12 | 03-01-2020 13:34 |
| Creating a compressed.bat and uncompressed.bat for game files | red01 | PC Games | 14 | 10-03-2019 06:01 |
| Frontlines: Fuel of War | DCore | PC Games - CD/DVD Conversions | 6 | 31-05-2008 18:14 |
| WHat is the point??!!! | Quertas of Atlantis | General Gaming | 6 | 27-05-2006 22:35 |