Merge rust-bitcoin/rust-bitcoin#4071: chacha20: add benchmarks

e41653d188 add chacha20 benchmarks (jeremiah)

Pull request description:

  Add benchmarks for chacha20. These could be useful to understand future improvements.

  I copied the same 10, 1k and 64k sizes as used in the sha256 benchmark. Some of the lines changed here, such as in `Config.toml`, are a little mysterious to me as I am new to rust, so please check.

  ```
  ➜  chacha20_poly1305 git:(jr_chachabench) RUSTFLAGS='--cfg=bench' cargo +nightly bench
  ...
  test benches::chacha20_10  ... bench:         188.67 ns/iter (+/- 2.70) = 53 MB/s
  test benches::chacha20_1k  ... bench:       2,885.83 ns/iter (+/- 90.06) = 354 MB/s
  test benches::chacha20_64k ... bench:     186,493.88 ns/iter (+/- 5,074.53) = 351 MB/s
  ```

ACKs for top commit:
  apoelstra:
    ACK e41653d18838e0d6e157db475b7b034b2456c924; successfully ran local tests; nice!
  Kixunil:
    ACK e41653d188

Tree-SHA512: fa37a4b6842ab78edc32726b22410d9769c1f03e1bc3488517e1e59e17388cabb63e58eb6ea6f112cb27ff1015296f356275ddee12d261c848050e98e3c6eed6
This commit is contained in:
merge-script 2025-02-19 19:35:32 +00:00
commit e487618503
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
3 changed files with 53 additions and 0 deletions

View File

@ -22,3 +22,6 @@ hex = { package = "hex-conservative", version = "0.3.0", default-features = fals
[package.metadata.docs.rs] [package.metadata.docs.rs]
all-features = true all-features = true
rustdoc-args = ["--cfg", "docsrs"] rustdoc-args = ["--cfg", "docsrs"]
[lints.rust]
unexpected_cfgs = { level = "deny", check-cfg = ['cfg(bench)'] }

View File

@ -0,0 +1,45 @@
use test::Bencher;
use crate::{ChaCha20, Key, Nonce};
#[bench]
pub fn chacha20_10(bh: &mut Bencher) {
let key =
Key::new([0u8; 32]);
let nonce = Nonce::new([0u8; 12]);
let count = 1;
let mut chacha = ChaCha20::new(key, nonce, count);
let mut bytes = [0u8; 10];
bh.iter(|| {
chacha.apply_keystream(&mut bytes[..]);
});
bh.bytes = bytes.len() as u64;
}
#[bench]
pub fn chacha20_1k(bh: &mut Bencher) {
let key =
Key::new([0u8; 32]);
let nonce = Nonce::new([0u8; 12]);
let count = 1;
let mut chacha = ChaCha20::new(key, nonce, count);
let mut bytes = [0u8; 1024];
bh.iter(|| {
chacha.apply_keystream(&mut bytes[..]);
});
bh.bytes = bytes.len() as u64;
}
#[bench]
pub fn chacha20_64k(bh: &mut Bencher) {
let key =
Key::new([0u8; 32]);
let nonce = Nonce::new([0u8; 12]);
let count = 1;
let mut chacha = ChaCha20::new(key, nonce, count);
let mut bytes = [0u8; 65536];
bh.iter(|| {
chacha.apply_keystream(&mut bytes[..]);
});
bh.bytes = bytes.len() as u64;
}

View File

@ -5,6 +5,7 @@
#![no_std] #![no_std]
// Experimental features we need. // Experimental features we need.
#![cfg_attr(docsrs, feature(doc_auto_cfg))] #![cfg_attr(docsrs, feature(doc_auto_cfg))]
#![cfg_attr(bench, feature(test))]
// Coding conventions. // Coding conventions.
#![warn(missing_docs)] #![warn(missing_docs)]
#![warn(deprecated_in_future)] #![warn(deprecated_in_future)]
@ -18,6 +19,10 @@ extern crate alloc;
#[cfg(feature = "std")] #[cfg(feature = "std")]
extern crate std; extern crate std;
#[cfg(bench)]
mod benches;
#[cfg(bench)]
extern crate test;
pub mod chacha20; pub mod chacha20;
pub mod poly1305; pub mod poly1305;