Skip to content

tacet is available for multiple languages. Choose your platform:

Add tacet as a dev dependency:

Terminal window
cargo add tacet --dev
cargo add rand --dev # For random input generation

Or add to your Cargo.toml:

[dev-dependencies]
tacet = "0.1"
rand = "0.8"

Default features (recommended):

  • parallel - Rayon-based parallel bootstrap (4-8x speedup)
  • kperf (macOS ARM64) - Cycle-accurate timing via kperf (opt-in, requires sudo)
  • perf (Linux) - Cycle-accurate timing via perf_event (opt-in, requires sudo)

Optional features:

  • macros - Proc macros (timing_test!, timing_test_checked!)

Minimal build:

[dev-dependencies]
tacet = { version = "0.1", default-features = false }
PlatformTimerResolutionNotes
Linux x86_64rdtsc~0.3nsBest precision
Linux aarch64cntvct_el01-10nsGood precision
macOS x86_64rdtsc~0.3nsBest precision
macOS ARM64cntvct_el0~42nsUses adaptive batching
Windows x86_64rdtsc~0.3nsBest precision

On platforms with coarse timer resolution (macOS ARM64), the library automatically uses adaptive batching to compensate.

For cycle-accurate measurements on ARM64, use TimerSpec::CyclePrecision:

use tacet::{TimingOracle, AttackerModel, TimerSpec};
TimingOracle::for_attacker(AttackerModel::SharedHardware)
.timer_spec(TimerSpec::CyclePrecision) // Request cycle-accurate timer

This requires elevated privileges on ARM64:

Terminal window
# kperf requires BOTH sudo AND single-threaded execution
sudo -E cargo test --test my_test -- --test-threads=1