c61c663ec5
Changes since 1.1.0: - SECURITY FIX: Fixed an instance of undefined behavior in the Windows SSE2 assembly implementations, which affected both the Rust and C libraries in their default build configurations. See https://github.com/BLAKE3-team/BLAKE3/issues/206. The cause was a vector register that wasn't properly saved and restored. This bug has been present since SSE2 support was initially added in v0.3.7. The effects of this bug depend on surrounding code and compiler optimizations; see test_issue_206_windows_sse2 for an example of this bug causing incorrect hash output. Note that even when surrounding code is arranged to trigger this bug, the SSE2 implementation is normally only invoked on CPUs where SSE4.1 (introduced in 2007) isn't supported. One notable exception, however, is if the Rust library is built in `no_std` mode, with `default_features = false` or similar. In that case, runtime CPU feature detection is disabled, and since LLVM assumes that all x86-64 targets support SSE2, the SSE2 implementation will be invoked. For that reason, Rust callers who build `blake3` in `no_std` mode for x86-64 Windows targets are the most likely to trigger this bug. We found this bug in internal testing, and we aren't aware of any callers encountering it in practice. - Added the Hasher::count() method. |
||
---|---|---|
.. | ||
src | ||
tests | ||
Cargo.toml | ||
README.md | ||
what_does_check_do.md |
b3sum
A command line utility for calculating
BLAKE3 hashes, similar to
Coreutils tools like b2sum
or md5sum
.
b3sum 1.2.0
USAGE:
b3sum [FLAGS] [OPTIONS] [FILE]...
FLAGS:
-c, --check Reads BLAKE3 sums from the [file]s and checks them
-h, --help Prints help information
--keyed Uses the keyed mode. The secret key is read from standard
input, and it must be exactly 32 raw bytes.
--no-mmap Disables memory mapping. Currently this also disables
multithreading.
--no-names Omits filenames in the output
--quiet Skips printing OK for each successfully verified file.
Must be used with --check.
--raw Writes raw output bytes to stdout, rather than hex.
--no-names is implied. In this case, only a single
input is allowed.
-V, --version Prints version information
OPTIONS:
--derive-key <CONTEXT> Uses the key derivation mode, with the given
context string. Cannot be used with --keyed.
-l, --length <LEN> The number of output bytes, prior to hex
encoding (default 32)
--num-threads <NUM> The maximum number of threads to use. By
default, this is the number of logical cores.
If this flag is omitted, or if its value is 0,
RAYON_NUM_THREADS is also respected.
ARGS:
<FILE>... Files to hash, or checkfiles to check. When no file is given,
or when - is given, read standard input.
See also this document about how the --check
flag
works.
Example
Hash the file foo.txt
:
b3sum foo.txt
Time hashing a gigabyte of data, to see how fast it is:
# Create a 1 GB file.
head -c 1000000000 /dev/zero > /tmp/bigfile
# Hash it with SHA-256.
time openssl sha256 /tmp/bigfile
# Hash it with BLAKE3.
time b3sum /tmp/bigfile
Installation
Prebuilt binaries are available for Linux, Windows, and macOS (requiring
the unidentified developer
workaround)
on the releases page.
If you've installed Rust and
Cargo,
you can also build b3sum
yourself with:
cargo install b3sum
On Linux for example, Cargo will put the compiled binary in
~/.cargo/bin
. You might want to add that directory to your $PATH
, or
rustup
might have done it for you when you installed Cargo.
If you want to install directly from this directory, you can run cargo install --path .
. Or you can just build with cargo build --release
,
which puts the binary at ./target/release/b3sum
.