Skip to content

Commit

Permalink
Merge rust-bitcoin#4071: chacha20: add benchmarks
Browse files Browse the repository at this point in the history
e41653d 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 e41653d; successfully ran local tests; nice!
  Kixunil:
    ACK e41653d

Tree-SHA512: fa37a4b6842ab78edc32726b22410d9769c1f03e1bc3488517e1e59e17388cabb63e58eb6ea6f112cb27ff1015296f356275ddee12d261c848050e98e3c6eed6
  • Loading branch information
apoelstra committed Feb 19, 2025
2 parents f71e28e + e41653d commit e487618
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 0 deletions.
3 changes: 3 additions & 0 deletions chacha20_poly1305/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,6 @@ hex = { package = "hex-conservative", version = "0.3.0", default-features = fals
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lints.rust]
unexpected_cfgs = { level = "deny", check-cfg = ['cfg(bench)'] }
45 changes: 45 additions & 0 deletions chacha20_poly1305/src/benches.rs
Original file line number Diff line number Diff line change
@@ -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;
}
5 changes: 5 additions & 0 deletions chacha20_poly1305/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#![no_std]
// Experimental features we need.
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#![cfg_attr(bench, feature(test))]
// Coding conventions.
#![warn(missing_docs)]
#![warn(deprecated_in_future)]
Expand All @@ -18,6 +19,10 @@ extern crate alloc;
#[cfg(feature = "std")]
extern crate std;

#[cfg(bench)]
mod benches;
#[cfg(bench)]
extern crate test;
pub mod chacha20;
pub mod poly1305;

Expand Down

0 comments on commit e487618

Please sign in to comment.