ZKAC/scripts/fuzz-libfuzzer.sh
everbarry 3bc7a791e8 v0.4
2026-04-18 01:08:25 +02:00

54 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run libFuzzer targets via cargo-fuzz (LLVM coverage + mutation).
# Usage:
# ./scripts/fuzz-libfuzzer.sh # all targets, 60s each, sanitizer none (stable-friendly)
# FUZZ_TIME=300 ./scripts/fuzz-libfuzzer.sh session_decrypt
# FUZZ_RUNS=2000 ./scripts/fuzz-libfuzzer.sh # fixed iterations (e.g. CI), all targets
# SANITIZER=address ./scripts/fuzz-libfuzzer.sh # needs nightly rustc (rustup)
set -euo pipefail
export PATH="${HOME}/.cargo/bin:${PATH}"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
if ! command -v cargo-fuzz >/dev/null 2>&1; then
echo "Install cargo-fuzz: cargo install cargo-fuzz" >&2
exit 1
fi
FUZZ_TIME="${FUZZ_TIME:-60}"
FUZZ_RUNS="${FUZZ_RUNS:-}"
SANITIZER="${SANITIZER:-none}"
TARGETS=(
handshake_respond
handshake_initiator_complete
session_decrypt
replay_sequence
crypto_deserialize
bbs_verify_presentation
)
run_one() {
local name="$1"
if [[ -n "$FUZZ_RUNS" ]]; then
echo "=== cargo-fuzz: $name (-runs=${FUZZ_RUNS}, sanitizer=${SANITIZER}) ==="
cargo fuzz run -s "$SANITIZER" "$name" -- -runs="$FUZZ_RUNS" -print_final_stats=1
else
echo "=== cargo-fuzz: $name (max_total_time=${FUZZ_TIME}s, sanitizer=${SANITIZER}) ==="
cargo fuzz run -s "$SANITIZER" "$name" -- -max_total_time="$FUZZ_TIME" -print_final_stats=1
fi
}
if [[ $# -gt 0 ]]; then
for name in "$@"; do
run_one "$name"
done
else
for name in "${TARGETS[@]}"; do
run_one "$name"
done
fi