summaryrefslogtreecommitdiff
path: root/crates/hashx/benches
Commit message (Collapse)AuthorAgeFilesLines
* hashx: Simplify hash_to_bytes, only support fixed output widthMicah Elizabeth Scott2023-07-271-1/+1
| | | | | | | | | | | | In response to review feedback. The byte output is only needed for unit tests right now, since Equi-X uses u64 output exclusively. The optimization for shorter output widths can shave tiny amounts of time off hash benchmarks, but in this case it's more helpful to avoid introducing APIs that offer parameters with incomplete compile-time range checking. Signed-off-by: Micah Elizabeth Scott <[email protected]>
* Reimplement HashX in RustMicah Elizabeth Scott2023-07-271-0/+92
This is a new pure Rust implementation of the HashX algorithm designed by tevador for Tor's onion service proof of work puzzle v1. HashX is a lightweight family of randomly generated hash functions. A seed, via blake2 and siphash, drives a program generation model which randomly selects opcodes and registers while following some constraints that avoid timing stalls or insufficient hash mixing. The execution of these hash funcions can be done using a pure Rust interpreter, or about 20x faster using a very simple just in time compiler based on the dynasm assembler crate. This has been implemented for x86_64 and aarch64. Signed-off-by: Micah Elizabeth Scott <[email protected]>