aboutsummaryrefslogtreecommitdiff
path: root/crates/hashx/Cargo.toml
Commit message (Collapse)AuthorAgeFilesLines
* Switch to FixedCapacityVec 0.1.0 from crates.ioIan Jackson2023-09-061-0/+1
|
* Update patchlevel for crates with nontrivial changes.Nick Mathewson2023-09-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These are: ``` hashx equix tor-async-utils tor-error tor-config tor-rtmock tor-llcrypto tor-bytes tor-hscrypto tor-hspow tor-cert tor-linkspec tor-cell tor-proto tor-netdoc tor-netdir tor-chanmgr tor-guardmgr tor-dirmgr tor-keymgr tor-hsclient tor-hsservice arti-client arti ```
* equix, hashx: Benchmark against C implementationMicah Elizabeth Scott2023-08-011-7/+0
| | | | | | | | | | | | | | | | | | | | | This is a small batch of improvements for the equix and hashx benchmarks. The headline feature is that we are now including the C implementations (slightly modified from tevador's, hosted as part of c-tor) and using them in apples-to-apples comparisons. Minor features: - Benchmarks moved to new nested crates, preventing their dependencies from spilling into the main workspace build. - Tests are now grouped - We also test the performance of memory reuse where possible - Code cleanup for per-runtime options These benchmark builds will now automatically pull in the c-tor git repo and build portions of it with a Rust wrapper. This uses the 'cc' and 'bindgen' crates, so it requires a C compiler and libclang on the host system. Signed-off-by: Micah Elizabeth Scott <[email protected]>
* equix, hashx: Additional comment tweaksMicah Elizabeth Scott2023-07-271-0/+4
| | | | | | More review feedback. Thanks nickm! Signed-off-by: Micah Elizabeth Scott <[email protected]>
* equix, hashx: Prepare for an initial LGPL releaseMicah Elizabeth Scott2023-07-271-1/+6
| | | | | | | This replaces the 'TODO' marker from earlier commits, using tevador's copyright and license (LGPL 3.0 only) for the hashx and equix crates. Signed-off-by: Micah Elizabeth Scott <[email protected]>
* hashx: use RngCore for HashX's internal PRNGMicah Elizabeth Scott2023-07-271-0/+1
| | | | | | | | | | | | | | | | | | | | | This refactors the random number generator used within HashX's program generator so that it uses the rand::RngCore trait. The basic SipHash powered u64 generator now implements RngCore, while a buffer layer wraps this and provides u8 and u32 values as needed by the generator. Some of this new RngCore layer is now exposed to the hashx crate's public API. The intent is to allow external code to test, benchmark, or fuzz the program generator by supplying its own random number stream. Benchmarks show a small but confusing performance improvement associated with this patch. About a 2% improvement in generation. This could be due to the Rng changes. No change in compiled hash execution performance. Even though this patch only touches program generation, benchmarks show a 4% speedup in interpreted execution. This seems most likely explained by instruction cache effects, but I'm not sure. Signed-off-by: Micah Elizabeth Scott <[email protected]>
* Reimplement HashX in RustMicah Elizabeth Scott2023-07-271-0/+34
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]>