ddh is a simple hasher available cross-platform (Windows, macOS, Linux, BSDs) and comes with more features than built-in OS utilities.
Feature | ddh | GNU coreutils | uutils/coreutils | OpenSSL 1 |
---|---|---|---|---|
Binary mode | ✔️ | ✔️ | ✔️ | ✔️ |
Text mode | ✔️ | ✔️ | ✔️ | |
Check support | ✔️ | ✔️2 | ✔️ | ✔️ |
File support | ✔️ | ✔️ | ✔️ | ✔️ |
Memory-mapped file support | ✔️ | |||
Standard input (stdin) support | ✔️ | ✔️ | ✔️ | ✔️ |
GNU style hashes | ✔️ | ✔️ | ✔️3 | ✔️ |
BSD style hashes | ✔️ | ✔️ | ✔️ | ✔️ |
SRI style hashes | ✔️ | 4 | 4 | 4 |
Checksum/Hash | ddh | GNU coreutils | uutils/coreutils | OpenSSL1 |
---|---|---|---|---|
CRC-32 | ✔️ | |||
CRC-64-ISO | ✔️ | |||
CRC-64-ECMA | ✔️ | |||
MurmurHash3 | ✔️ | |||
MD5 | ✔️ | ✔️ | ✔️ | ✔️ |
RIPEMD-160 | ✔️ | ✔️ | ✔️ | |
SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ |
SHA-2 | ✔️ | ✔️ | ✔️ | ✔️ |
SHA-3/SHAKE | ✔️ | ✔️ | ✔️ | |
BLAKE2b | ✔️ | ✔️ | ✔️5 | ✔️ |
BLAKE2s | ✔️ | ✔️ | ||
BLAKE3 | 6 | ✔️5 |
Checksum/Hash | Type | Secure |
---|---|---|
CRC-32 | Checksum | ❌ |
CRC-64-ISO | Checksum | ❌ |
CRC-64-ECMA | Checksum | ❌ |
Murmurhash-32 | Hash | ❌ |
Murmurhash-128-32 | Hash | ❌ |
Murmurhash-128-64 | Hash | ❌ |
MD5 | Hash | ❌ |
RIPEMD-160 | Hash | ✔️ |
SHA-1 | Hash | ❌ |
SHA-2 | Hash | ✔️ |
SHA-3/SHAKE | Hash | ✔️ |
BLAKE2b | Hash | ✔️ |
BLAKE2s | Hash | ✔️ |
Format: ddh [options...|--autocheck] [file|--stdin]
With no arguments, the help page is shown.
For a list of options available, use the --help
argument.
For a list of supported checksums and hashes, use the --hashes
switch.
$ ddh --md5 LICENSE
1d267ceb3a8d8f75f1be3011ee4cbf53 LICENSE
To select OpenSSL tags for the output, use --tag
.
To select SRI for the output, use --sri
.
$ ddh --sha256 -c list
file1: OK
file2: FAILED
2 total: 1 mismatch, 0 not read
To select the tag digest style, use --tag
.
Both OpenSSL and GNU/BSD tags are supported.
$ ddh --sha1 LICENSE -A f6067df486cbdbb0aac026b799b26261c92734a3
LICENSE: OK
$ ddh --sha512 --compare LICENSE README.md dub.sdl
Files 'LICENSE' and 'README.md' are different
Files 'README.md' and 'dub.sdl' are different
Files 'LICENSE' and 'dub.sdl' are different
$ ddh --autocheck codium_1.73.0.22306_amd64.deb.sha256
codium_1.73.0.22306_amd64.deb: OK
Some hashes may take optional parameters.
- BLAKE2: The
--key
option takes a binary file for keying the hash. - Murmurhash3: The
--seed
option takes an argument literal for seeding the hash.
Style | CLI Switch | Example |
---|---|---|
GNU | 1d267ceb3a8d8f75f1be3011ee4cbf53 LICENSE |
|
BSD | --tag |
MD5(LICENSE)= 1d267ceb3a8d8f75f1be3011ee4cbf53 |
SRI | --sri |
md5-HSZ86zqNj3XxvjAR7ky/Uw== |
Plain | --plain |
1d267ceb3a8d8f75f1be3011ee4cbf53 |
This utility supports file globbing out of the box using std.file.dirEntries
.
However, while useful on Windows, most UNIX-like terminals support in-shell
globbing. This may behave differently than the dirEntries
function.
To force the usage of the embedded globbing mechanism, you may want to use
'*'
or \*
. To disable it, use the --
parameter.
The globbing pattern is further explained on dlang.org.
The default parameters used in dirEntries
are:
SpanMode
:shallow
(same-level directory);- And
followSymlink
:true
(follows soft symbolic links).
NOTE: The embedded globbing system includes hidden files.
EXAMPLE: A pattern such as src/*.{d,dd}
:
- Matches
src/example.d
,src/.dd
, andsrc/file.dd
; - But doesn't match
example.d
,src/.ddd
, andsrc/.e
; - Basically all files ending with
.d
and.dd
in thesrc
directory, following symlinks.
The mmfile mode's performance may vary on systems. Typically, file mode is faster on Windows, and mmfile mode is faster on Linux systems.
The default is file.
Code | Description |
---|---|
1 | CLI error |
2 | No hashes selected or autocheck not used |
3 | Internal error: Unable to initiate hash module with hash |
4 | Failed to set the hash key |
5 | Failed to set the hash seed |
6 | No such file |
7 | Could not determine hash type |
9 | Could not hash text argument |
10 | List is empty |
11 | Unsupported tag format in list due to missing filename |
12 | Internal error: Couldn't continue processing list |
15 | Two or more files are required to compare |
Compiling requires a recent D compiler and DUB.
To compile a debug build with the default compiler:
dub build
Release recommendation with the LDC compiler:
dub build -b release-nobounds --compiler=ldc2
To compile with GDC, you'll also need gdmd installed.