sha1dc 0.1.3 hashes 9–11% faster than 0.1.2 on large inputs, and 32–39%
faster on messages of up to 64 bytes (measured Apple M4, Xeon Platinum
8488C and Graviton4).
Notable changes:
- Benchmarks now run on data that does not repeat, and on new machines
(#16, #19). The published cost of detection moved to 19–28% of
throughput as a result, not because the code got slower.
- The UBC check's prefix is chosen by search: greedy, then local search,
then variable neighbourhood search (#20, #24), with bit tests per lane
and a NEON tail emitted as a guarded block per DV (#15, #23, #27).
- The generated forms are tested against upstream's C check (#22), and
the hardware's states are kept at steps 60 and 64 (#21).
- The per-block scratch buffer lives in the stack frame instead of the
hasher, so both hashers shrink from 472 to 112 bytes (#17).
- Vector loads and stores are consolidated and go through a single helper,
reducing `unsafe` code and making it easier to audit (#18).