2c691af95b
## Proposed Changes Modify the SHA256 implementation in `eth2_hashing` so that it switches between `ring` and `sha2` to take advantage of [x86_64 SHA extensions](https://en.wikipedia.org/wiki/Intel_SHA_extensions). The extensions are available on modern Intel and AMD CPUs, and seem to provide a considerable speed-up: on my Ryzen 5950X it dropped state tree hashing times by about 30% from 35ms to 25ms (on Prater). ## Additional Info The extensions became available in the `sha2` crate [last year](https://www.reddit.com/r/rust/comments/hf2vcx/ann_rustcryptos_sha1_and_sha2_now_support/), and are not available in Ring, which uses a [pure Rust implementation of sha2](https://github.com/briansmith/ring/blob/main/src/digest/sha2.rs). Ring is faster on CPUs that lack the extensions so I've implemented a runtime switch to use `sha2` only when the extensions are available. The runtime switching seems to impose a miniscule penalty (see the benchmarks linked below).
24 lines
519 B
TOML
24 lines
519 B
TOML
[package]
|
|
name = "eth2_hashing"
|
|
version = "0.1.1"
|
|
authors = ["Paul Hauner <paul@paulhauner.com>"]
|
|
edition = "2018"
|
|
license = "Apache-2.0"
|
|
description = "Hashing primitives used in Ethereum 2.0"
|
|
|
|
[dependencies]
|
|
lazy_static = { version = "1.4.0", optional = true }
|
|
ring = "0.16.19"
|
|
sha2 = "0.9.5"
|
|
cpufeatures = "0.1.5"
|
|
|
|
[dev-dependencies]
|
|
rustc-hex = "2.1.0"
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
|
wasm-bindgen-test = "0.3.18"
|
|
|
|
[features]
|
|
default = ["zero_hash_cache"]
|
|
zero_hash_cache = ["lazy_static"]
|