diff --git a/.travis.yml b/.travis.yml index 0654bcd..d59b9a4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,21 +14,21 @@ matrix: - rust: beta env: FEATURES=--no-default-features - rust: nightly - env: FEATURES=--features=bench + env: FEATURES= - rust: nightly - env: FEATURES=--features=simd,bench + env: FEATURES=--features=simd - rust: nightly - env: FEATURES=--features=simd_opt,bench + env: FEATURES=--features=simd_opt - rust: nightly - env: FEATURES=--features=simd_asm,bench + env: FEATURES=--features=simd_asm - rust: nightly - env: 'FEATURES="--no-default-features --features=bench"' + env: 'FEATURES="--no-default-features"' - rust: nightly - env: 'FEATURES="--no-default-features --features=simd,bench"' + env: 'FEATURES="--no-default-features --features=simd"' - rust: nightly - env: 'FEATURES="--no-default-features --features=simd_opt,bench"' + env: 'FEATURES="--no-default-features --features=simd_opt"' - rust: nightly - env: 'FEATURES="--no-default-features --features=simd_asm,bench"' + env: 'FEATURES="--no-default-features --features=simd_asm"' script: - cargo build --verbose $FEATURES - cargo test --verbose $FEATURES diff --git a/Cargo.toml b/Cargo.toml index 250c308..35de3ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,6 @@ travis-ci = { repository = "cesarb/blake2-rfc" } [features] default = ["std"] -bench = [] simd = [] simd_opt = ["simd"] simd_asm = ["simd_opt"] diff --git a/benches/blake2b.rs b/benches/blake2b.rs new file mode 100644 index 0000000..6b4a56d --- /dev/null +++ b/benches/blake2b.rs @@ -0,0 +1,29 @@ +#![feature(test)] + +extern crate blake2_rfc; +extern crate test; + +use std::iter::repeat; +use std::vec::Vec; +use test::Bencher; + +use blake2_rfc::blake2b::Blake2b; +use blake2_rfc::_selftest_seq as selftest_seq; + +fn bench_blake2b(bytes: usize, b: &mut Bencher) { + let data: Vec = repeat(selftest_seq(1024)) + .flat_map(|v| v) + .take(bytes) + .collect(); + + b.bytes = bytes as u64; + b.iter(|| { + let mut state = Blake2b::default(); + state.update(&data[..]); + state.finalize() + }) +} + +#[bench] fn blake2b_16(b: &mut Bencher) { bench_blake2b(16, b) } +#[bench] fn blake2b_4k(b: &mut Bencher) { bench_blake2b(4096, b) } +#[bench] fn blake2b_64k(b: &mut Bencher) { bench_blake2b(65536, b) } diff --git a/benches/blake2s.rs b/benches/blake2s.rs new file mode 100644 index 0000000..dfe6c3b --- /dev/null +++ b/benches/blake2s.rs @@ -0,0 +1,29 @@ +#![feature(test)] + +extern crate blake2_rfc; +extern crate test; + +use std::iter::repeat; +use std::vec::Vec; +use test::Bencher; + +use blake2_rfc::blake2s::Blake2s; +use blake2_rfc::_selftest_seq as selftest_seq; + +fn bench_blake2s(bytes: usize, b: &mut Bencher) { + let data: Vec = repeat(selftest_seq(1024)) + .flat_map(|v| v) + .take(bytes) + .collect(); + + b.bytes = bytes as u64; + b.iter(|| { + let mut state = Blake2s::default(); + state.update(&data[..]); + state.finalize() + }) +} + +#[bench] fn blake2s_16(b: &mut Bencher) { bench_blake2s(16, b) } +#[bench] fn blake2s_4k(b: &mut Bencher) { bench_blake2s(4096, b) } +#[bench] fn blake2s_64k(b: &mut Bencher) { bench_blake2s(65536, b) } diff --git a/src/blake2.rs b/src/blake2.rs index 4d58dbb..d2e7444 100644 --- a/src/blake2.rs +++ b/src/blake2.rs @@ -339,6 +339,7 @@ macro_rules! blake2_impl { #[cfg_attr(feature = "cargo-clippy", allow(cast_possible_truncation, unreadable_literal))] #[cold] +#[doc(hidden)] pub fn selftest_seq(len: usize) -> ArrayVec<[u8; 1024]> { use core::num::Wrapping; @@ -386,35 +387,3 @@ macro_rules! blake2_selftest_impl { } } } - -macro_rules! blake2_bench_impl { - ($state:ident) => { - #[cfg(all(feature = "bench", test))] - mod bench { - use std::iter::repeat; - use std::vec::Vec; - use test::Bencher; - - use blake2::selftest_seq; - use super::$state; - - fn bench_blake2(bytes: usize, b: &mut Bencher) { - let data: Vec = repeat(selftest_seq(1024)) - .flat_map(|v| v) - .take(bytes) - .collect(); - - b.bytes = bytes as u64; - b.iter(|| { - let mut state = $state::default(); - state.update(&data[..]); - state.finalize() - }) - } - - #[bench] fn bench_16(b: &mut Bencher) { bench_blake2(16, b) } - #[bench] fn bench_4k(b: &mut Bencher) { bench_blake2(4096, b) } - #[bench] fn bench_64k(b: &mut Bencher) { bench_blake2(65536, b) } - } - } -} diff --git a/src/blake2b.rs b/src/blake2b.rs index 1e9c305..414d7e6 100644 --- a/src/blake2b.rs +++ b/src/blake2b.rs @@ -50,8 +50,6 @@ blake2_selftest_impl!(Blake2b, blake2b, [ 0x7F, 0x5E, 0x76, 0x5A, 0x7B, 0xCC, 0xD4, 0x75, ], [ 20, 32, 48, 64 ], [ 0, 3, 128, 129, 255, 1024 ]); -blake2_bench_impl!(Blake2b); - #[cfg(test)] mod tests { #![cfg_attr(feature = "cargo-clippy", allow(result_unwrap_used))] diff --git a/src/blake2s.rs b/src/blake2s.rs index 27c3c15..7f7975a 100644 --- a/src/blake2s.rs +++ b/src/blake2s.rs @@ -48,8 +48,6 @@ blake2_selftest_impl!(Blake2s, blake2s, [ 0xFB, 0xDC, 0x88, 0x79, 0x7F, 0x4C, 0x1D, 0xFE, ], [ 16, 20, 28, 32 ], [ 0, 3, 64, 65, 255, 1024 ]); -blake2_bench_impl!(Blake2s); - #[cfg(test)] mod tests { #![cfg_attr(feature = "cargo-clippy", allow(result_unwrap_used))] diff --git a/src/lib.rs b/src/lib.rs index 929436f..cd930f0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,18 +14,14 @@ #![cfg_attr(feature = "cargo-clippy", warn(clippy_pedantic))] #![cfg_attr(feature = "cargo-clippy", allow(missing_docs_in_private_items))] -#![cfg_attr(all(feature = "bench", test), feature(test))] #![cfg_attr(feature = "simd", feature(platform_intrinsics, repr_simd))] #![cfg_attr(feature = "simd_opt", feature(cfg_target_feature))] #![cfg_attr(feature = "simd_asm", feature(asm))] -#[cfg(any(feature = "std", all(feature = "bench", test)))] +#[cfg(feature = "std")] #[macro_use] extern crate std; -#[cfg(all(feature = "bench", test))] -extern crate test; - extern crate arrayvec; extern crate constant_time_eq; @@ -50,3 +46,6 @@ pub fn selftest() { blake2b::selftest(); blake2s::selftest(); } + +// Internal export of selftest_seq for the benches, not part of the crate API. +pub use blake2::selftest_seq as _selftest_seq;