From 698c90879ec467f4f440709b7c3536a03a381da4 Mon Sep 17 00:00:00 2001 From: megonen Date: Fri, 31 Jul 2026 00:31:26 +0300 Subject: [PATCH 01/11] pqc: import the post-quantum cryptography benchmark Snapshot of megonen/pqc-bench @ d5636d1 (formerly pq-bench-rpi5), imported verbatim into tools/benchmarks/pqc/. It measures the migration cost of moving from the cryptography Logos uses today (X25519 + Ed25519) to PQ candidates: four measurement groups (liboqs, RustCrypto, aws-lc-rs pricing rows, and a TLS 1.3 handshake matrix across openssl-native, oqs-provider and rustls+aws-lc-rs), organised by migration phase, in one self-describing schema-2.0.0 results JSON. Imported here rather than into logos-blockchain-pocs (where it was proposed as commit 1382002) because this is a measurement tool, not a proof-of-concept implementation: it belongs next to the other benchmark harnesses in tools/benchmarks/. What this snapshot brings over the earlier pq-bench-rpi5-consolidated state: * narrowed sudo: the run escalates only for the CPU-governor write; measurement, in-run cargo builds and all results run as the invoking user (kills root-owned .work-*/target artifacts and cargo-as-root) * the Fedora fix series, verified in a Fedora 42 container and on a real Fedora 44 machine: x86 cpu-features path, silent-failure ERR traps + logged build steps, usable OpenSSL source-build path (libdir=lib, rpath, install_ssldirs, vendored reuse), family-aware package hints, and a permanent `make test-fedora` container gate * generalized naming; the Raspberry Pi 5 remains the baseline reference platform by definition (gate unchanged) * published dataset grown to 4 runs: RPi5 baseline + Apple M3 + Apple M4 Pro + Fedora 44 x86_64 (first x86 datapoint) Dashboard: https://megonen.github.io/pqc-bench/ (cherry picked from commit 59bef0ddf7c35a5b32ce459c3074e416e8b12021) --- tools/benchmarks/pqc/.gitignore | 75 + tools/benchmarks/pqc/Dockerfile | 46 + tools/benchmarks/pqc/Makefile | 54 + tools/benchmarks/pqc/README.md | 655 + tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md | 184 + tools/benchmarks/pqc/analyze/merge.py | 261 + tools/benchmarks/pqc/analyze/plot.py | 162 + .../benchmarks/pqc/analyze/published_runs.txt | 40 + tools/benchmarks/pqc/analyze/requirements.txt | 1 + tools/benchmarks/pqc/bench/kem_sig/Makefile | 52 + tools/benchmarks/pqc/bench/kem_sig/bench_pq.c | 659 + tools/benchmarks/pqc/bench/lib/assemble.py | 625 + tools/benchmarks/pqc/bench/lib/list_algs.py | 59 + tools/benchmarks/pqc/bench/lib/miniyaml.py | 151 + .../benchmarks/pqc/bench/rust-tls/Cargo.lock | 325 + .../benchmarks/pqc/bench/rust-tls/Cargo.toml | 22 + tools/benchmarks/pqc/bench/rust-tls/build.rs | 53 + .../pqc/bench/rust-tls/src/bench.rs | 269 + .../benchmarks/pqc/bench/rust-tls/src/main.rs | 481 + .../pqc/bench/rust-tls/src/primitives.rs | 267 + tools/benchmarks/pqc/bench/rust/Cargo.lock | 469 + tools/benchmarks/pqc/bench/rust/Cargo.toml | 29 + tools/benchmarks/pqc/bench/rust/build.rs | 61 + tools/benchmarks/pqc/bench/rust/src/algs.rs | 484 + tools/benchmarks/pqc/bench/rust/src/bench.rs | 269 + tools/benchmarks/pqc/bench/rust/src/main.rs | 186 + tools/benchmarks/pqc/bench/tls/Makefile | 17 + tools/benchmarks/pqc/bench/tls/bench_tls.c | 233 + tools/benchmarks/pqc/bench/tls/run_tls.sh | 292 + tools/benchmarks/pqc/config.yaml | 245 + tools/benchmarks/pqc/dashboard/README.md | 85 + tools/benchmarks/pqc/dashboard/app.js | 604 + .../benchmarks/pqc/dashboard/data/merged.json | 30219 ++++++++++++++++ tools/benchmarks/pqc/dashboard/index.html | 106 + tools/benchmarks/pqc/dashboard/style.css | 91 + tools/benchmarks/pqc/results/.gitkeep | 0 .../pqc/results/Mac-20260730T134951Z.json | 18519 ++++++++++ .../pqc/results/example-macos-smoke.json | 1984 + .../pqc/results/fedora-20260730T120637Z.json | 12848 +++++++ .../results/mehmetmac-20260624T140033Z.json | 12521 +++++++ .../results/mehmetmac-20260625T220618Z.json | 13829 +++++++ .../results/mehmetmac-20260719T224937Z.json | 24177 +++++++++++++ .../results/rasberrypi5-20260608T223040Z.json | 5152 +++ .../results/rasberrypi5-20260614T205226Z.json | 8179 +++++ .../results/rasberrypi5-20260625T202356Z.json | 10825 ++++++ .../results/rasberrypi5-20260720T143239Z.json | 21404 +++++++++++ .../results/thomas-pi-20260703T083302Z.json | 10555 ++++++ tools/benchmarks/pqc/run.sh | 377 + tools/benchmarks/pqc/scripts/bench-run.sh | 33 + .../benchmarks/pqc/scripts/build-toolchain.sh | 100 + tools/benchmarks/pqc/scripts/check-env.sh | 177 + tools/benchmarks/pqc/scripts/install-deps.sh | 54 + tools/benchmarks/pqc/scripts/selftest.sh | 242 + tools/benchmarks/pqc/scripts/test-fedora.sh | 57 + tools/benchmarks/pqc/setup/lib_platform.sh | 342 + tools/benchmarks/pqc/setup/setup.sh | 295 + tools/benchmarks/pqc/setup/versions.env | 70 + 57 files changed, 179571 insertions(+) create mode 100644 tools/benchmarks/pqc/.gitignore create mode 100644 tools/benchmarks/pqc/Dockerfile create mode 100644 tools/benchmarks/pqc/Makefile create mode 100644 tools/benchmarks/pqc/README.md create mode 100644 tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md create mode 100644 tools/benchmarks/pqc/analyze/merge.py create mode 100644 tools/benchmarks/pqc/analyze/plot.py create mode 100644 tools/benchmarks/pqc/analyze/published_runs.txt create mode 100644 tools/benchmarks/pqc/analyze/requirements.txt create mode 100644 tools/benchmarks/pqc/bench/kem_sig/Makefile create mode 100644 tools/benchmarks/pqc/bench/kem_sig/bench_pq.c create mode 100644 tools/benchmarks/pqc/bench/lib/assemble.py create mode 100644 tools/benchmarks/pqc/bench/lib/list_algs.py create mode 100644 tools/benchmarks/pqc/bench/lib/miniyaml.py create mode 100644 tools/benchmarks/pqc/bench/rust-tls/Cargo.lock create mode 100644 tools/benchmarks/pqc/bench/rust-tls/Cargo.toml create mode 100644 tools/benchmarks/pqc/bench/rust-tls/build.rs create mode 100644 tools/benchmarks/pqc/bench/rust-tls/src/bench.rs create mode 100644 tools/benchmarks/pqc/bench/rust-tls/src/main.rs create mode 100644 tools/benchmarks/pqc/bench/rust-tls/src/primitives.rs create mode 100644 tools/benchmarks/pqc/bench/rust/Cargo.lock create mode 100644 tools/benchmarks/pqc/bench/rust/Cargo.toml create mode 100644 tools/benchmarks/pqc/bench/rust/build.rs create mode 100644 tools/benchmarks/pqc/bench/rust/src/algs.rs create mode 100644 tools/benchmarks/pqc/bench/rust/src/bench.rs create mode 100644 tools/benchmarks/pqc/bench/rust/src/main.rs create mode 100644 tools/benchmarks/pqc/bench/tls/Makefile create mode 100644 tools/benchmarks/pqc/bench/tls/bench_tls.c create mode 100755 tools/benchmarks/pqc/bench/tls/run_tls.sh create mode 100644 tools/benchmarks/pqc/config.yaml create mode 100644 tools/benchmarks/pqc/dashboard/README.md create mode 100644 tools/benchmarks/pqc/dashboard/app.js create mode 100644 tools/benchmarks/pqc/dashboard/data/merged.json create mode 100644 tools/benchmarks/pqc/dashboard/index.html create mode 100644 tools/benchmarks/pqc/dashboard/style.css create mode 100644 tools/benchmarks/pqc/results/.gitkeep create mode 100644 tools/benchmarks/pqc/results/Mac-20260730T134951Z.json create mode 100644 tools/benchmarks/pqc/results/example-macos-smoke.json create mode 100644 tools/benchmarks/pqc/results/fedora-20260730T120637Z.json create mode 100644 tools/benchmarks/pqc/results/mehmetmac-20260624T140033Z.json create mode 100644 tools/benchmarks/pqc/results/mehmetmac-20260625T220618Z.json create mode 100644 tools/benchmarks/pqc/results/mehmetmac-20260719T224937Z.json create mode 100644 tools/benchmarks/pqc/results/rasberrypi5-20260608T223040Z.json create mode 100644 tools/benchmarks/pqc/results/rasberrypi5-20260614T205226Z.json create mode 100644 tools/benchmarks/pqc/results/rasberrypi5-20260625T202356Z.json create mode 100644 tools/benchmarks/pqc/results/rasberrypi5-20260720T143239Z.json create mode 100644 tools/benchmarks/pqc/results/thomas-pi-20260703T083302Z.json create mode 100755 tools/benchmarks/pqc/run.sh create mode 100755 tools/benchmarks/pqc/scripts/bench-run.sh create mode 100755 tools/benchmarks/pqc/scripts/build-toolchain.sh create mode 100755 tools/benchmarks/pqc/scripts/check-env.sh create mode 100755 tools/benchmarks/pqc/scripts/install-deps.sh create mode 100755 tools/benchmarks/pqc/scripts/selftest.sh create mode 100755 tools/benchmarks/pqc/scripts/test-fedora.sh create mode 100644 tools/benchmarks/pqc/setup/lib_platform.sh create mode 100755 tools/benchmarks/pqc/setup/setup.sh create mode 100644 tools/benchmarks/pqc/setup/versions.env diff --git a/tools/benchmarks/pqc/.gitignore b/tools/benchmarks/pqc/.gitignore new file mode 100644 index 0000000..0d255df --- /dev/null +++ b/tools/benchmarks/pqc/.gitignore @@ -0,0 +1,75 @@ +# Build trees / vendored deps (rebuilt by setup/setup.sh) +/vendor/ +/build/ +setup/versions.lock + +# Compiled harness binaries +bench/kem_sig/bench_pq +bench/tls/bench_tls +*.o + +# Generated TLS material +bench/tls/pki/ + +# Per-run scratch dirs (intermediate artifacts; never committed) +results/.work-*/ + +# Local results are kept by users, not committed by default. +# Comment the next line out if you DO want to commit your machine's results. +results/*.json +!results/example-*.json +# Published baseline-grade RPi5 run (auto-calibrated full run) +!results/rasberrypi5-20260608T223040Z.json +# Baseline-grade RPi5 run adding the code-based + conservative-LWE KEMs +# (Classic McEliece + FrodoKEM); kept as its own file, baseline above untouched. +!results/rasberrypi5-20260614T205226Z.json +# Mac (Apple M3) cross-platform run: apple-m3-optimized from-source liboqs, +# KEM/sig reps=5 (same auto-calibrate regime as the Pi). NOT baseline-grade +# (unpinned, no governor) by design; provenance self-stamped in the JSON. Kept +# as its own file for the tuned-vs-portable comparison; Pi baselines untouched. +!results/mehmetmac-20260624T140033Z.json +# Consolidated baseline-grade RPi5 run (KEM + sig + TLS in one pass); supersedes +# the two older split files (0614 KEM/sig + 0608 TLS) as the single Pi baseline. +!results/rasberrypi5-20260625T202356Z.json + +# Merged dataset consumed by the dashboard. Tracked: ships the published RPi5 +# baseline so a fresh clone renders charts out-of-the-box. Contributors who +# re-merge overwrite it locally (modified file they can commit or discard). +analyze/png/ + +# Python venv (matplotlib lives here; system python stays clean) +analyze/.venv/ + +# Machine-local Claude Code settings (never shared) +.claude/settings.local.json + +# Python / OS cruft +__pycache__/ +*.pyc +.DS_Store +# Consolidated Mac (Apple M3) run in the published Logos snapshot; cited by the +# companion document's provenance section (supersedes 20260624T140033Z, which +# was KEM/sig only — no TLS cells). +!results/mehmetmac-20260625T220618Z.json +# Community RPi5 run cited by the companion document (file to be added). +!results/thomas-pi-20260703T083302Z.json + +# Rust harness build tree (bench/rust — Cargo.lock IS committed) +bench/rust/target/ + +# rustls TLS harness build tree (bench/rust-tls — Cargo.lock IS committed) +bench/rust-tls/target/ +# Consolidated schema-2.0.0 Mac (Apple M3) run: all four measurement groups +# (liboqs, rustcrypto+dalek, aws-lc-rs pricing rows, three-stack TLS phase +# matrix), apple-m3 tuned build. Not yet in published_runs.txt — the published +# set flips wholesale once the Pi companion run exists. +!results/mehmetmac-20260719T224937Z.json +# Consolidated schema-2.0.0 RPi5 baseline run (whitelisted here so snapshot +# copies of this .gitignore don't silently exclude the published baseline; +# the file was originally force-added on the Pi). +!results/rasberrypi5-20260720T143239Z.json + +# Published 2026-07-30: Apple M4 Pro + Fedora 44 x86_64 cross-platform runs +# (see analyze/published_runs.txt for provenance) +!results/Mac-20260730T134951Z.json +!results/fedora-20260730T120637Z.json diff --git a/tools/benchmarks/pqc/Dockerfile b/tools/benchmarks/pqc/Dockerfile new file mode 100644 index 0000000..a7b99d8 --- /dev/null +++ b/tools/benchmarks/pqc/Dockerfile @@ -0,0 +1,46 @@ +# ============================================================================= +# Reproducible BUILD of the PQ benchmark C toolchain on Debian aarch64 (the +# same OS family as Raspberry Pi OS / Ubuntu on the RPi5). +# +# COVERAGE NOTE: C toolchain ONLY (liboqs / OpenSSL / oqs-provider). This image +# installs no Rust, so the RustCrypto (bench/rust) and rustls (bench/rust-tls) +# measurement groups are not built here, and the image has not been re-verified +# since those groups were added. The verified setup paths are the bare-metal +# ones in README.md / RUNNING-ON-YOUR-RPI5.md. +# +# This image is for BUILDING ONLY — it is NOT for running the benchmark. +# +# docker build -t pq-bench-rpi5 . # build + pin the toolchain +# +# Run the MEASUREMENT bare-metal on the host, never in the container. A +# container cannot reliably control the CPU governor, pin to an isolated core, +# or read the Pi's SoC thermal/throttle sensors (vcgencmd) — the three knobs the +# reference-grade gate depends on — so an in-container run could never be +# baseline-grade and would only add noise. Build here if you like; then: +# +# ./run.sh # on the host (see README) +# ============================================================================= +FROM debian:bookworm-slim + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential cmake ninja-build git perl pkg-config \ + python3 python3-venv ca-certificates \ + libssl-dev cpufrequtils util-linux \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY . /app + +# Build + pin the toolchain at image-build time so the image is self-contained. +# (Comment this out to keep the image thin and run setup.sh at container start.) +RUN ./setup/setup.sh all || (echo "setup failed — see log above" && exit 1) + +# Optional: matplotlib PNG export in an isolated venv. +RUN python3 -m venv analyze/.venv \ + && analyze/.venv/bin/pip install --no-cache-dir -r analyze/requirements.txt + +ENTRYPOINT ["/bin/bash", "-lc"] +# This image builds the toolchain; it does not run the benchmark. The default +# command just says so — run the measurement bare-metal on the host (see README). +CMD ["echo 'Toolchain built. Run the benchmark BARE-METAL on the host (./run.sh) — Docker is for reproducible builds only; a container cannot meet the baseline-grade gate.'"] diff --git a/tools/benchmarks/pqc/Makefile b/tools/benchmarks/pqc/Makefile new file mode 100644 index 0000000..0aba2fa --- /dev/null +++ b/tools/benchmarks/pqc/Makefile @@ -0,0 +1,54 @@ +# ============================================================================= +# pqc-bench — executable documentation. `make help` lists everything. +# +# Design rules (docs/history behind them: the cold-read round): +# * `check` is READ-ONLY; `deps` is the only target that installs anything. +# * No stamp files — skip decisions use live probes and real artifacts +# (an upgraded OpenSSL or deleted toolchain always triggers a rebuild). +# * `smoke`/`run` depend on `build` only: `test`'s hygiene checks must never +# block a 30-minute measurement. Run `make test` before trusting results. +# * All test artifacts live in /tmp — never results/ or bench/tls/pki/. +# ============================================================================= +SHELL := /bin/bash +.DEFAULT_GOAL := help + +.PHONY: help check deps build test test-fedora smoke run merge dashboard clean distclean + +help: ## list targets + @grep -E '^[a-z-]+:.*##' $(MAKEFILE_LIST) | awk -F':.*## ' '{printf " make %-10s %s\n", $$1, $$2}' + +check: ## verify the environment (read-only; prints per-platform install hints) + @scripts/check-env.sh + +deps: ## OPT-IN: install missing system deps (brew/apt/dnf); add RUST=1 for rustup + @scripts/install-deps.sh + +build: check ## C toolchain (liboqs/OpenSSL/oqs-provider) + bench binaries + Rust harnesses + @scripts/build-toolchain.sh + +test: build ## fast verification gate (~1-2 min): correctness blocks, hygiene warns + @scripts/selftest.sh + +test-fedora: ## check/build/test in a Fedora container (Red Hat paths/packages/degradation; SMOKE=1 adds a smoke run; not a benchmark) + @scripts/test-fedora.sh + +smoke: build ## all-four-groups smoke benchmark (1 rep, 50 handshakes/cell) + @scripts/bench-run.sh --smoke + +run: build ## full benchmark run (~30 min Pi / ~36 min M3); sudo handled per-platform + @scripts/bench-run.sh + +merge: ## regenerate dashboard/data/merged.json from the published_runs manifest + python3 analyze/merge.py + +dashboard: ## serve the dashboard over HTTP (does NOT touch merged.json; see 'merge') + @echo "serving http://localhost:8000 (Ctrl-C to stop)" + @cd dashboard && python3 -m http.server 8000 + +clean: ## remove bench binaries and Rust target trees + $(MAKE) -C bench/kem_sig clean + $(MAKE) -C bench/tls clean + rm -rf bench/rust/target bench/rust-tls/target + +distclean: clean ## additionally remove the vendored C toolchain (forces full rebuild) + rm -rf vendor setup/versions.lock diff --git a/tools/benchmarks/pqc/README.md b/tools/benchmarks/pqc/README.md new file mode 100644 index 0000000..2536bef --- /dev/null +++ b/tools/benchmarks/pqc/README.md @@ -0,0 +1,655 @@ +# pqc-bench + +A reproducible, general-purpose **post-quantum cryptography benchmark** +(formerly `pq-bench-rpi5`) whose baseline **reference platform** is the +**Raspberry Pi 5** (Broadcom BCM2712, Cortex-A76, +aarch64). Anyone can run it on their own Pi 5 and the results aggregate and +compare apples-to-apples. + +**Framing — migration cost.** How much does moving from the cryptography Logos +uses *today* (X25519 key exchange + Ed25519 signatures) to PQ candidates cost on +validator-grade hardware? Every chart draws that classical baseline as the +reference line, so the PQ "tax" is always visible. + +Hooks are left for a later SNARK/STARK phase (see `config.yaml`); it is not +implemented yet. + +--- + +## What gets measured + +The benchmark targets **four measurement groups**, all landing in the same +self-describing results JSON and distinguished by a per-row `implementation` +field: + +1. **liboqs — KEM + signatures** *(implemented)*: ML-KEM, Classic McEliece, + FrodoKEM, ML-DSA, Falcon, SLH-DSA, plus the classical X25519/Ed25519 + baselines via OpenSSL EVP (`implementation: liboqs` / `openssl`). +2. **RustCrypto — KEM + signatures** *(implemented — `bench/rust`)*: pure-Rust + implementations as an independent second source + (`implementation: rustcrypto`), measured by a Rust harness (`pqb-rust`) + that deliberately replicates `bench_pq.c`'s clock + (`clock_gettime(CLOCK_MONOTONIC)` via libc), auto-calibration, and + median/MAD statistics so the two groups are methodologically comparable. + Crates (pinned exactly; `Cargo.lock` committed; all pre-1.0 and + **unaudited** — fine for benchmarking): `ml-kem 0.3.2`, `ml-dsa 0.1.1`, + `slh-dsa 0.2.0-rc.5`, plus `x25519-dalek 3.0.0` / `ed25519-dalek 3.0.0` + for the in-family classical anchors. Signing is **hedged**, matching + liboqs. Coverage: ML-KEM 512/768/1024, ML-DSA 44/65/87, SLH-DSA SHA2 + 128f/128s/192f/256f, X25519, Ed25519. Rust signature rows carry **two + verify shapes**: `verify` (decode public key from wire bytes + verify — + the call shape of both `OQS_SIG_verify` and a TLS handshake) and + `verify_cached_key` (pre-parsed key object, expansion amortised — the + long-lived-peer pattern); their difference is the pk parse/expansion cost. + Totals use `verify`. **Not covered** — Falcon, Classic + McEliece and FrodoKEM have no mature pure-Rust implementation; those cells + stay genuinely absent rather than being filled by an FFI wrapper (pqcrypto, + liboqs-rust, aws-lc-rs), which would not be an independent source. The + dependency tree is verified free of liboqs/PQClean/C-FFI. Requires + cargo/rustc; if absent the group is skipped and the reason recorded in the + results. +3. **TLS 1.3 handshakes by migration phase** *(implemented — two stacks)*: + - `implementation: openssl-native` — OpenSSL ≥ 3.5's **own** PQC, the + production-relevant path. The harness loads no provider for these rows + and **asserts at runtime that no OQS provider is active**. Matrix: + baseline (X25519+Ed25519), phase0 (X25519MLKEM768, SecP256r1MLKEM768 and + pure MLKEM512/768/1024, each + Ed25519 — the harvest-now-decrypt-later + configuration), phase2 (X25519MLKEM768 and the pure groups × + ML-DSA-44/65/87, with natively generated ML-DSA certificates). + - `implementation: oqs-provider` — the full experimental-provider matrix, + kept in full: its ML-DSA cells deliberately overlap the native matrix + (same protocol + algorithms under two stacks isolates provider overhead), + and its Falcon and SLH-DSA (`sphincssha2128fsimple`) cells exist **only** + here — native OpenSSL can issue SLH-DSA certificates but cannot negotiate + SLH-DSA in TLS 1.3 (the IETF codepoints are still draft), so that row + being provider-only is itself a finding. +4. **rustls + aws-lc-rs TLS 1.3 handshakes** *(implemented — `bench/rust-tls`)*: + the Rust TLS stack (`implementation: rustls-awslc`), same phase structure + and same in-memory methodology (`pqb-rust-tls` mirrors `bench_tls.c`: same + clock, same fixed connections+warmup loop, same statistics and + bytes-on-wire/ClientHello accounting). Coverage — measured: X25519, + X25519MLKEM768, SecP256r1MLKEM768, pure MLKEM768/MLKEM1024, against + Ed25519 (baseline/phase0) and ML-DSA-44/65/87 (phase2, using the natively + generated certificates). Recorded as `enabled:false` rows, not hidden: + rustls 0.23 has **no MLKEM512** group, and **SLH-DSA is absent from + rustls/aws-lc-rs entirely** — so across both production stacks SLH-DSA in + TLS 1.3 exists only in the experimental oqs-provider. **Unstable-feature + caveat**: the ML-DSA rows ride `rustls-post-quantum/aws-lc-rs-unstable` + (aws-lc-rs's `unstable` ML-DSA API) and carry `unstable_features: true` + in the row itself. **Two-variables caveat**: rustls-vs-OpenSSL compares + two protocol implementations AND two crypto backends (aws-lc-rs vs + OpenSSL native) at once — the variables are not separable from these + numbers, and this is not a language comparison. Unlike `bench/rust`, this + group makes no pure-Rust claim (aws-lc-rs wraps the AWS-LC C library). + To price these handshakes' primitive sums correctly, the run also measures + **aws-lc-rs pricing rows** (`implementation: aws-lc-rs`: ML-KEM-768/1024, + ML-DSA-44/65/87, X25519, secp256r1, Ed25519, same bench_pq methodology) — + explicitly the primitives these handshakes execute, NOT an independent + implementation; Stage 3's exclusion of FFI wrappers from the pure-Rust + group stands. Sums are priced strictly per-stack: C-stack cells from + liboqs/openssl rows, rustls cells from aws-lc-rs rows, never across. + +| Layer | Metrics | +|-------|---------| +| **KEM** | keygen / encaps / decaps wall-clock (median, MAD, IQR, min, max, mean, stddev, ops/sec) · a keygen+encaps+decaps total · pk/sk/ct sizes · heap high-water | +| **Signature** | keygen / sign / verify wall-clock (same stats) · a keygen+sign+verify total · pk/sig sizes | +| **TLS 1.3** | full-handshake latency · handshakes/sec · bytes-on-wire · ClientHello size (+ fragmentation flag) · a per-cell primitive-operation sum (below) — as a matrix of (KEM group × signature) | + +The **classical baseline** (X25519 / Ed25519 / X25519+Ed25519) is always +included as the reference point — measured as a real primitive via OpenSSL, not +hand-waved. + +### Migration phases (TLS) + +Every TLS matrix cell carries a `phase` field from our migration framework: + +- **`baseline`** — classical KEM group + classical signature + (X25519 + Ed25519): what Logos runs today. +- **`phase0`** — PQ or hybrid KEM group + **classical** signature + (e.g. X25519MLKEM768 + Ed25519): the harvest-now-decrypt-later protection + actually deployed on today's internet. +- **`phase2`** — PQ signature (e.g. X25519MLKEM768 + ML-DSA-65): full PQ + authentication. + +### Per-operation values vs totals + +Per-operation medians (±MAD) remain the primary data. In addition, every +KEM/sig row carries a `total.sum_of_medians_ns` aggregate, and every enabled +TLS cell carries a `handshake_primitive_sum` block: the sum of the primitive +operations that one handshake actually performs (hybrid groups include **both** +components — e.g. X25519MLKEM768 = 2× X25519 keygen + 2× derive + ML-KEM-768 +keygen/encaps/decaps — plus the signature sign + verifies), with the exact +component list, counts and medians spelled out in the JSON so the number is +auditable. These are **sums of medians** — derived figures, labelled as such, +not measured latencies; the gap between `handshake_primitive_sum` and the +measured handshake latency is the protocol overhead. + +--- + +## Project layout + +``` +pqc-bench/ + setup/ build + pin liboqs, OpenSSL 3.5+, oqs-provider (versions.env / versions.lock) + bench/kem_sig/ bench_pq.c primitive KEM/sig harness (liboqs + OpenSSL EVP baselines) + bench/tls/ bench_tls.c in-process TLS 1.3 handshake harness (OpenSSL API; + openssl-native + oqs-provider matrices) + run_tls.sh PKI generation + three-stack phase-matrix driver + bench/rust/ pqb-rust pure-Rust (RustCrypto) primitive harness + dalek anchors + bench/rust-tls/ pqb-rust-tls rustls + aws-lc-rs TLS harness + aws-lc-rs pricing rows + bench/lib/ assemble.py / merge helpers / miniyaml.py (zero-dep YAML) + results/ results/-.json (one per run, full metadata) + analyze/ merge.py (combine machines) + plot.py (matplotlib PNGs, optional venv) + dashboard/ static HTML/JS (Chart.js) — no backend, GitHub-Pages deployable + run.sh governor + taskset + thermal wrapper + orchestrator + config.yaml candidate lists (extend here) + Dockerfile reproducible Debian-aarch64 build +``` + +--- + +## Quick start + +### Prerequisites (all platforms — read this first) + +- **OpenSSL ≥ 3.5 with its DEVELOPMENT files** (the project pins the 3.5.x + LTS line): the `openssl` binary alone is **not** enough — liboqs and + oqs-provider compile and link against libcrypto, so you need the headers + too (`libssl-dev` on Debian, **`openssl-devel` on Fedora/RHEL**, keg-only + Homebrew `openssl@3.5` on macOS). `make check` verifies this with a real + compile-and-link probe against the exact OpenSSL the build will use and + prints the right package name for your platform. Systems older than 3.5 + trigger an automatic source build (+15–30 min). +- **Rust toolchain (rustup)** — required for **two of the four measurement + groups** (RustCrypto primitives and the rustls TLS matrix). Install stable + via [rustup.rs](https://rustup.rs); if cargo is absent the run completes but + those groups are skipped (with recorded reasons). The rustls harness + compiles the AWS-LC C library on first build — several minutes, once. +- **cmake** (liboqs and the AWS-LC build), a C compiler, **git**, **python3** + (stdlib only). `make deps` installs these on Debian-family (apt), + Fedora/RHEL-family (dnf) and macOS (brew); other distros get the package + list printed. +- **liboqs must be the vendored, pinned build — never a system copy.** The + harness refuses to link a distro `liboqs-devel`: an unpinned liboqs would + silently change what is measured (and the pinned oqs-provider expects + exactly the pinned liboqs' headers). `make build` produces the vendored + build; `make test` verifies the built binaries actually link it. +- Any Linux or macOS box works: non-Pi hosts run fine and are stamped + `is_baseline_grade=false` with reasons — only a Raspberry Pi 5 under the + controlled conditions below produces reference-grade rows. + +### The make targets (all platforms — executable documentation) + +The setup and run steps live in the **Makefile**, so they can't drift from +reality the way prose does; `make help` lists everything. The flow: + +```bash +git clone && cd pqc-bench +make check # read-only: verifies the environment — including that the + # OpenSSL the build will use has its DEVELOPMENT files + # (compile-and-link probe) — and prints per-platform install + # commands for anything missing (installs nothing) +make deps # OPT-IN installer for what check reported: apt / dnf / brew + # per platform (add RUST=1 for rustup) +make build # C toolchain + bench binaries + both Rust harnesses (as your + # user — it refuses to run cargo as root, and refuses to link + # a system liboqs) +make test # ~1-2 min verification gate (21 checks): harness correctness + # gates, LINK-TARGET verification (vendored liboqs + pinned + # OpenSSL, via otool/ldd), the three TLS stacks incl. the + # native no-OQS-provider assertion, cross-implementation size + # agreement, schema round-trip; repo-hygiene checks warn + # without blocking +make smoke # all-four-groups pipeline check (1 rep, 50 handshakes/cell) +make test-fedora # check+build+test in a Fedora container (podman/docker; + # SMOKE=1 adds a smoke run) — covers the Red Hat platform + # differences Mac+Pi testing structurally cannot catch (dnf + # package split, lib64 defaults, x86 /proc/cpuinfo shape); + # exercises degradation paths, produces no measurement data +make run # the full benchmark (~30 min Pi 5 / ~36 min M3) +make merge # rebuild dashboard/data/merged.json from the published manifest +make dashboard # serve the dashboard over HTTP (view only; never mutates data) +``` + +`make run`/`make smoke` handle privilege correctly per platform. The run needs +root for exactly one step — writing `performance` into the sysfs CPU-governor +files — so on Linux they cache sudo credentials once up front (`sudo -v`) and +only that step escalates (`sudo -n`); the measurement itself, including the +cargo builds and all result files, runs as your user. (The old whole-run sudo +design left root-owned `results/.work-*` and `target/` artifacts behind and +needed a fragile `sudo env RUSTUP_HOME=…` workaround for cargo — all gone.) +On macOS no escalation of any kind is used. `NOSUDO=1 make run` skips the +sudo attempt and honestly records the governor demerit. `build`'s skip logic uses live checks (artifacts + `openssl version` +against the lock), never stamp files — upgrading OpenSSL triggers a rebuild +instead of being silently masked. + +### On a Raspberry Pi 5 (the real measurement target) + +Follow **[RUNNING-ON-YOUR-RPI5.md](RUNNING-ON-YOUR-RPI5.md)** for the +Pi-specific context (cooling, PSU, governor, baseline-grade); the commands are +the same targets: `make check && make build && make test && make run`. + +**On `sudo`:** it is **optional, not a prerequisite.** The only thing it does is +set the CPU governor to `performance` — none of the crypto needs root. `./run.sh` +runs fine without it: it warns, skips the governor step, completes the run, and +the results JSON is automatically stamped `is_baseline_grade=false` (governor +demerit). So use `sudo` when you want a baseline-grade reference run; drop it for +a quick local run you don't intend to submit. + +`./run.sh --smoke` runs tiny iteration counts as a fast pipeline check. +`./run.sh --kemsig-only` / `--tls-only` scope the run. `--iters/--warmup/--reps` +override the `config.yaml` knobs. + +### On macOS (cross-platform reference / smoke testing) + +Same targets: `make check` tells you what to `brew install` (or `make deps` +does it for you), then `make build && make test && make smoke`. Runs are +stamped `is_baseline_grade=false` with reasons, by design: + +> **macOS runs are cross-platform / smoke data, never baseline-grade — by +> design, for three concrete reasons:** +> 1. **Not a Raspberry Pi**, so it fails the gate's first condition outright. +> 2. **No userspace cycle counter, and ~1 µs timer granularity.** macOS exposes +> no readable PMU cycle counter and its wall-clock quantizes to ~1 µs steps — +> a ~10% floor on the fastest ops (ML-KEM ~10 µs), negligible for anything +> ≥100 µs (McEliece, FrodoKEM). (See "Timing source" under Measurement +> methodology below.) +> 3. **No Linux cpufreq governor, and core-pinning isn't guaranteed.** Two of the +> noise-control knobs the gate relies on — `performance` governor and a pinned +> core — aren't available, and the build flags aren't `cortex-a76` either. +> +> Every macOS results file records `is_baseline_grade=false` with the exact +> reasons, and the dashboard shows such runs labelled **"cross-platform +> reference — not baseline-grade"** (shown and labelled, never mixed with or +> mistaken for the Pi reference). They still produce +> **useful cross-platform numbers** (the heavier McEliece/FrodoKEM ops are barely +> affected by the timer floor) — they just can't meet the controlled reference +> bar, hence smoke-only. + +### Docker (reproducible build — build only, never run) + +Docker is for reproducibly **building** the pinned C toolchain (liboqs / +OpenSSL / oqs-provider), not for running the benchmark: + +```bash +docker build -t pqc-bench . # builds + pins the C toolchain inside the image +``` + +> **Coverage note:** the image covers the **C toolchain only** — it installs no +> Rust, so the RustCrypto and rustls harnesses are not built in it, and it has +> not been re-verified since those measurement groups were added. Its Debian 12 +> base also predates the system-OpenSSL-3.5 path, so `setup.sh` source-builds +> OpenSSL inside the image. Treat it as a legacy convenience for the C +> toolchain; the verified paths are the bare-metal ones above. + +**Run the measurement bare-metal on the host.** A container can't reliably set +the CPU governor, pin to an isolated core, or read the Pi's thermal/throttle +sensors — the noise-control knobs the reference-grade gate relies on — so an +in-container run could never be baseline-grade and would only add jitter. Build +in Docker if you like; then run `./run.sh` on the host. + +--- + +## Measurement methodology (why the numbers are credible) + +`run.sh` is the wrapper that makes a number defensible: + +- **CPU governor → `performance`** (Linux; needs `sudo`). Recorded before/after. + If it can't be set (e.g. not root) the run **continues anyway**: it warns, + proceeds, and the missing governor becomes an `is_baseline_grade=false` + demerit. `sudo` is only ever for this step — never for the crypto. +- **Core pinning via `taskset -c 3`.** This is a **single-operation latency** + benchmark (one keygen, one encaps, one sign — timed in isolation), not a + parallel-throughput one, so pinning the whole sweep to one core keeps that + core's cache warm and removes cross-core migration scheduling noise, which + tightens the median and MAD. The Pi 5 has 4 cores (0–3); core **3** is chosen + because core 0 typically absorbs the most OS/IRQ/RPS work. The pinned core and + exact `taskset` command are recorded. + - *Planned (separate axis):* a multi-core **throughput/scaling** mode — run an + op across 1..N cores and report ops/sec plus scaling efficiency per + algorithm. Some schemes (SLH-DSA, and later STARK proving) parallelize far + better than others, so it's a worthwhile dimension — but kept **separate** + from these per-op latency numbers, not mixed into them. +- **Thermal/clock trace.** A background sampler logs ARM clock + (`vcgencmd measure_clock arm`) and SoC temperature (`vcgencmd measure_temp`) + ~once a second for the whole run. The full trace is embedded in the results + JSON, and **thermal throttling** (`vcgencmd get_throttled`, plus a clock-droop + heuristic) is detected and flagged — a throttled run is not baseline-grade. +- **Warmup + N timed iterations, multiple repetitions.** Primary metric is + wall-clock nanoseconds via `clock_gettime(CLOCK_MONOTONIC)`. We report + **median, MAD, IQR, min, max, mean, stddev, ops/sec**, plus per-repetition + medians — not just a mean. +- **Timing source — two clocks, honestly recorded.** There are two ways to time + an op: + 1. **Cycle-based** via the ARM hardware cycle counter (`PMCCNTR_EL0`) — the + most precise, but on Linux **userspace can't read it by default**: the + register traps unless a kernel module enables the userspace PMU (e.g. + `enable_arm_pmu`). + 2. **Time-based** wall-clock via `clock_gettime(CLOCK_MONOTONIC)` — always + available, and accurate enough for the millisecond/microsecond ranges here. + + The harness probes the cycle counter and, when it isn't available, **falls + back to wall-clock and records exactly that** in the JSON + (`run.cycles_available=false` + the reason). **On a stock machine the cycle + counter is not available, so runs use the wall-clock timer by default** — and + both published runs reflect this: the RPi5 baseline and the macOS run *both* + have `cycles_available=false` (both wall-clock). The remaining difference + between them is wall-clock **granularity**, not clock *type*: the Pi's + wall-clock lands on fractional microseconds, while macOS quantizes to ~1 µs + steps — a ~10% resolution floor on the fastest ops (ML-KEM keygen ~10 µs), + negligible for anything ≥100 µs (McEliece, FrodoKEM). +- **CPU features / Keccak acceleration.** NEON, SHA2, SHA3, SHA512, AES, PMULL + are detected (`/proc/cpuinfo` on Linux, `sysctl` on macOS). **Note:** the + Cortex-A76 has the SHA2/AES extensions but **not** the ARMv8.2 SHA3 + extension, so on the Pi 5 Keccak runs on NEON/scalar code — the results record + both the hardware capability and whether liboqs was compiled with SHA3 + instructions, so this is explicit rather than assumed. + +### The AArch64-optimized backend + +liboqs is built with `OQS_DIST_BUILD=OFF` and the pinned flags so the optimized +aarch64 ML-KEM backend (`mlkem-native`) and Falcon/Keccak asm are compiled in. +`setup/setup.sh` extracts the proof from the generated `oqsconfig.h` (e.g. +`OQS_ENABLE_KEM_ml_kem_768_aarch64 1`) into `versions.lock`, which is stamped +into every results file under `toolchain.liboqs_opt_defines`. + +--- + +## Methodology & trustworthiness (verify it yourself) + +Every claim below points at the exact code so you can read it, not take our word. +All `bench_pq.c` references are `bench/kem_sig/bench_pq.c`. + +1. **Correctness gate — broken crypto emits *zero* numbers.** Before any timing, + each algorithm runs a full round-trip and asserts it: for KEM, + keygen→encaps→decaps then `memcmp(ss_encaps, ss_decaps)` + (`bench_pq.c:357-363`); for signatures, keygen→sign→`verify` must succeed + (`bench_pq.c:428-434`). On any failure, `die()` prints to **stderr** and + `exit(3)` (`bench_pq.c:303-307`) — and the JSON is only printed *after* all + measurement (`bench_pq.c:372-381`), so a failed gate yields **no stdout at + all**. The gate runs once, *outside* the timed loop. A runtime guard + (`must_measure`, `bench_pq.c:311-315`) also aborts if a timed op ever fails + mid-run. *Verify it:* flip one byte of the decaps shared secret right before + `bench_pq.c:362`, rebuild, run — the process exits `3` with empty stdout. + +2. **No dead-code elimination — the `volatile` sink.** At `-O3` the compiler may + delete work whose result is never observed. Each timed op folds an output + byte into a file-scope `volatile uint64_t g_sink` (`bench_pq.c:300`; uses at + `:333,:336,:339,:407,:410,:486`), forcing the store to be materialized so the + crypto call **cannot** be optimized away. Without it the loop could time + nothing and report meaningless near-zero numbers. + +3. **What is timed — only the op, never setup.** The timed region brackets a + single `fn(ctx)` call between two `now_ns()` reads (`bench_pq.c:274-281`); + per-rep warmup runs *outside* it (`bench_pq.c:272-273`). Inputs are canonical + and pre-validated, so e.g. KEM decaps (`bench_pq.c:337-339`) times one + `OQS_KEM_decaps` and nothing else. For the X25519 baseline, keygen is timed + separately (`bench_pq.c:507`), a stable key is re-primed *outside* timing + (`bench_pq.c:509`), then derive is timed alone (`bench_pq.c:510`) — setup is + never folded into a measured number. + +4. **Per-op auto-calibration with clamps.** `calibrate_op` (`bench_pq.c:209-250`) + runs a doubling probe (`:223-230`, also cache warmup) to estimate per-op cost + `est_ns` (`:231`), then picks iterations to hit `target_time_ms` of real work + (`:234-235`), clamped to `[min_samples, max_iters]` (`:236-237`). So a fast + 18 µs keygen and a 0.74 s SLH-DSA sign each get the iteration count *they* + need: slow ops floor at `min_samples` (30), fast ops ceil at `max_iters` + (20000). The chosen `timed_iters` and `calib_est_ns` are recorded per op. + +5. **Robust statistics — median + MAD.** `compute_stats` (`bench_pq.c:111-146`) + reports median, MAD, IQR, q1/q3, min, max, mean, stddev, ops/sec, plus + per-repetition medians (`print_stats_json`, `bench_pq.c:184-203`). The + headline metric is the **median**, with **MAD** as spread: timing + distributions are right-skewed with a hard floor (true cost) and a long tail + of OS-scheduling/interrupt contamination that drags mean/stddev but not + median/MAD. Mean and stddev are kept in the JSON so the skew is visible. The + clock is `clock_gettime(CLOCK_MONOTONIC)` (`bench_pq.c:44-48`); userspace PMU + cycles are probed and honestly reported absent when they trap + (`probe_pmu`, `bench_pq.c:66-86`). + +6. **`is_baseline_grade` demerit gate.** Computed in + `bench/lib/assemble.py:155-168` as a demerit accumulator — the flag is `true` + only if *every* condition holds: real Pi (`:157`), `performance` governor + (`:160`), core-pinned (`:162`), `cortex-a76` build flags (`:164`), and no + thermal throttling (`:166`). Throttling is read from `vcgencmd get_throttled` + bits 2/18 plus a clock-droop heuristic (`assemble.py:91-98,:110-113`). Any + failure appends a human-readable reason and flips the flag to `false`; the + dashboard and `plot.py` default to baseline-grade runs only. + +--- + +## Reproducibility & provenance + +- **Pinned versions** live in `setup/versions.env` (liboqs `0.15.0`, OpenSSL + pinned to the **3.5.x LTS line** on every platform — keg-only Homebrew + `openssl@3.5` on macOS, Debian 13's system 3.5.x on the Pi — so cross-machine + TLS numbers never compare different OpenSSL minor lines; oqs-provider + `0.9.0`). After cloning, `setup.sh` records the **actually resolved git + commits** and the **exact build flags + compiler version** into + `setup/versions.lock`. +- **Acceleration provenance, empirically determined.** Every KEM/sig row + carries an `acceleration` field with two independent axes: the *arithmetic + path* (hand-written asm vs portable code, derived from the recorded build + defines / Rust provenance) and the *symmetric path* (which primitive the hot + loop uses — AES / SHA-2 / SHA-3-SHAKE / none — where that implementation + comes from, and whether it reaches hardware instructions on this CPU). The + per-algorithm routing was established by **differential builds** (toggling + `OQS_USE_{SHA2,AES,SHA3}_OPENSSL` and measuring which rows move), not by + reading configuration — necessary because e.g. liboqs 0.15's SLH-DSA bundles + its own portable SHA-2 and ignores the OQS symmetric layer entirely, while + its sibling SPHINCS+ routes through it. +- **Results schema `2.0.0`.** Every KEM/sig row carries `implementation` + (which library produced the measurement: `liboqs`, `openssl`, `rustcrypto`, + `oqs-provider`, `openssl-native`, `rustls-awslc`; formerly named `backend`), + and every TLS cell carries `implementation` + `phase` + `sig_alg` and the + `handshake_primitive_sum` block. Older (schema `1.0.0`) result files are + **never rewritten** — `analyze/merge.py` injects the equivalent values at + merge time (`backend`→`implementation`, phase inference, derived totals). +- **Every results JSON carries full environment metadata**: RPi model, RAM, + kernel, OS, governor, the clock/temp trace during the run, compiler version, + liboqs/oqs-provider/OpenSSL versions+commits, build flags, and the candidate + list. A macOS smoke file and an RPi5 baseline file can never be confused. +- **Identical flags for every candidate:** `-O3 -mcpu=cortex-a76` on the Pi. + Document your `gcc`/`clang` version — it is auto-captured in `versions.lock` + (`CC_VERSION`). + +### `is_baseline_grade` + +A **reference-measurement quality gate**, not a deployment requirement. It marks +whether a run was produced under controlled, reproducible *reference* conditions, +so the numbers are comparable across algorithms and across machines. It is `true` +**only** when all hold: real Raspberry Pi · `performance` governor · core-pinned · +`cortex-a76` build flags · no thermal throttling. Otherwise it is `false` with a +list of reasons. + +- **What it is:** a label that says "this run is clean enough to sit in the + cross-algorithm / cross-machine reference comparison." The dashboard and + `plot.py` default to baseline-grade runs only, so noisy runs don't distort the + picture. +- **What it is *not*:** a claim about how nodes must be configured in production. + Real deployments are heterogeneous (different SoCs, governors, thermals) — + that's a separate question this flag does not speak to. +- A run that doesn't meet the gate **isn't wrong** — it's just flagged + `is_baseline_grade=false` with the reasons and kept out of the reference set. + The macOS cross-platform runs are exactly this: useful, honest numbers that + simply aren't reference-grade. + +--- + +## Candidates (edit `config.yaml`) + +- **KEM:** ML-KEM-512/768/1024; hybrids X25519MLKEM768, SecP256r1MLKEM768 + (hybrids are benchmarked in the TLS layer; at the primitive layer liboqs + exposes them only as TLS groups, so they show as `enabled:false` there). + Code-based + conservative-LWE backups: Classic McEliece + 348864/460896/460896f/6688128/6960119/8192128 (tiny ciphertext, slow keygen) + and FrodoKEM 640/976/1344 in **both AES and SHAKE variants** — same + algorithm and arithmetic, different symmetric primitive, added as the + controlled test of the hardware-AES attribution for FrodoKEM's + cross-platform behaviour (on the M3 the SHAKE variants measure ~5–6.6× + slower than AES). Baseline: **X25519**. +- **Signatures:** ML-DSA-44/65/87; hash-based **both** SLH-DSA (FIPS 205 final, + `SLH_DSA_PURE_SHA2_{128s,128f,192f,256f}`) **and** the round-3 + `SPHINCS+-SHA2-*-simple` sets; Falcon/FN-DSA-512/1024. Baseline: **Ed25519**. + + > **Comparability note (SPHINCS+ vs SLH-DSA).** Round-3 SPHINCS+ and FIPS 205 + > SLH-DSA are **different algorithms**, not a relabelling. The earlier + > (now-retired generation) RPi5 baselines measured only the SPHINCS+ sets; + > the config measures both generations side by side, so runs (a) stay + > directly comparable to that history via the SPHINCS+ rows and (b) carry + > the standardised SLH-DSA numbers. Don't compare an SLH-DSA row against an old SPHINCS+ row as if + > they were the same scheme. The SLH-DSA identifiers exist in our pinned + > liboqs 0.15.0 build, so this needs no library upgrade; liboqs 0.16.0 + > removes SPHINCS+ entirely, at which point the SPHINCS+ rows retire. +- **RustCrypto second source:** the same ML-KEM / ML-DSA / SLH-DSA parameter + sets (and X25519/Ed25519 anchors) measured again from pure-Rust + implementations — rows join by `(kind, alg)` across `implementation`, and + `assemble.py` cross-checks that both implementations report identical + encoded sizes (a mismatch is reported loudly as a bug/spec disagreement, + never as a benchmark result). +- **TLS:** two matrices (see "What gets measured"): the `openssl-native` phase + matrix (baseline / phase0 / phase2, Ed25519 and ML-DSA certificates) and the + full `oqs-provider` matrix — always including the classical + **X25519 + Ed25519** pair, measured natively. + +Classic McEliece and FrodoKEM are now measured (above). **HQC** is not — it is +not enabled in the linked liboqs 0.15.0 build (disabled upstream after the +IND-CCA2 implementation issue), so it is intentionally omitted rather than +listed-and-disabled; re-add it once linked against a liboqs that re-enables it. +Add further algorithms by uncommenting/adding entries — the harness skips +anything your liboqs build doesn't enable (and says so). + +--- + +## Output & analysis + +- `results/-.json` — one self-describing file per run. +- `analyze/merge.py` — with **no arguments**, merges the **published set** + pinned in `analyze/published_runs.txt` into `dashboard/data/merged.json` + (explicit manifest, so ad-hoc dev runs in `results/` never leak into the + published dataset); pass explicit files/globs for an ad-hoc merge. Keeps + each run distinct; never mixes baseline with smoke. +- `analyze/plot.py` — matplotlib PNGs for papers (optional; install into + `analyze/.venv` via `analyze/requirements.txt` to keep system python clean — + it gracefully skips if matplotlib is absent). +- `dashboard/` — static, no-backend dashboard (see `dashboard/README.md`): + the TLS migration-phase view (Pi and Mac side by side, latency + bytes with + ×multipliers), the full three-stack handshake matrix, cross-implementation + primitive comparison with an always-visible acceleration table, the original + security-level charts (log axes, classical reference lines), and a + deliberate-absences panel. Serve over HTTP (`python3 -m http.server`) or + deploy the folder to GitHub Pages. + +--- + +## Contributing your RPi5 results + +The whole point is a **shared, aggregated baseline**: the more Raspberry Pi 5 +results we collect under identical conditions, the more confident the migration- +cost picture. If you have a Pi 5, please contribute a run — it takes one command +and a pull request. + +### 1. Run under baseline conditions + +For your numbers to count as baseline-grade, the run must satisfy the +`is_baseline_grade` gate (real Pi 5 · `performance` governor · core-pinned · +`cortex-a76` flags · no thermal throttling). To give it the best shot: + +- **Use a Raspberry Pi 5** with active cooling (the official Active Cooler or a + fan). PQ signing (esp. SLH-DSA) runs the core hot for a while; without cooling + you *will* throttle and the run is flagged non-baseline. +- **Use the official 27 W USB-C PSU.** Under-voltage also trips the throttle flag. +- **Run on a quiet machine** (close other workloads) so core 3 stays clean. +- **Don't edit `config.yaml`'s candidate list** if you want your run to be + directly comparable to others. (Extending it is fine — just say so in your PR; + extra algorithms simply add columns.) + +```bash +git clone && cd pqc-bench +make check && make build && make test +make run # sudo (with the required rustup env) is handled for you +``` + +A full run takes ~30 min on a Pi 5 (hash-based signing dominates). To check the +pipeline first without committing to the full run, `make smoke` — but only a +**full** run (not smoke) counts as a submission. + +### 2. Confirm it's baseline-grade + +When the run finishes, the summary prints `baseline-grade (RPi5): True`. Verify +in the JSON too: + +```bash +f=$(ls -t results/*.json | head -1) +python3 -c "import json;d=json.load(open('$f'));print('baseline_grade:',d['is_baseline_grade']);\ +print('reasons:',d['baseline_grade_reasons']);\ +print('throttled:',d['thermal_trace']['throttling_detected']);\ +print('aarch64 ML-KEM backend:', 'ml_kem_768_aarch64 1' in d['toolchain']['liboqs_opt_defines'])" +``` + +You want `baseline_grade: True`, `reasons: []`, `throttled: False`, and the +backend line `True`. If `is_baseline_grade` is false, the printed reasons tell +you what to fix (usually cooling/PSU/governor) — fix and re-run. + +### 3. Submit it + +Your `results/-.json` is fully self-describing (host model, +kernel, OS, governor, clock/temp trace, compiler + liboqs/oqs-provider/OpenSSL +commits, build flags). It contains your **hostname** and Pi model and nothing +else identifying — if you'd rather not share the hostname, prepend +`HOSTNAME=mypi5` to the sudo run line, or just rename the file before +submitting. + +`results/*.json` is git-ignored by default (so you never accidentally commit +local experiments), so add yours explicitly: + +```bash +git checkout -b results/-pi5 +git add -f results/-.json +git commit -m "results: RPi5 baseline from " +# push to your fork and open a PR +``` + +**PR checklist** (maintainers will look for these): + +- [ ] `is_baseline_grade: true` with empty `baseline_grade_reasons` +- [ ] `thermal_trace.throttling_detected: false` +- [ ] `host.is_rpi: true` and `host.rpi_model` mentions "Raspberry Pi 5" +- [ ] `run.governor_after: performance` and `run.pinned: true` +- [ ] `toolchain.cflags_target: cortex-a76` +- [ ] full run (not `--smoke`): `run.repetitions` is the `config.yaml` value + (5), not 1 — smoke runs record `repetitions: 1` +- [ ] all four measurement groups present (`toolchain.rust.available: true`; + rustcrypto / aws-lc-rs / rustls-awslc rows in the JSON) — if the Rust + groups are missing, revisit the sudo env line above +- [ ] unmodified candidate list (or extensions noted in the PR description) + +Once merged, your file joins `results/` and gets a line in +`analyze/published_runs.txt` (the explicit manifest of published runs); anyone +can then regenerate the aggregated dataset and dashboard with +`python3 analyze/merge.py`. The dashboard's run selector will then include +your Pi alongside everyone else's. + +> Prefer not to use GitHub? Open an issue and attach the JSON file instead — a +> maintainer will add it. + +--- + +## Limitations + +- **macOS is smoke-only** (see above): coarse timer, no governor/pinning, + fallback flags. +- **Userspace cycle counts** require a kernel PMU module; default is time-based. +- **Heap/stack memory** is best-effort (`mallinfo2` on glibc; reported + unavailable elsewhere); pk/sk/ct/sig **sizes** are authoritative. +- **TLS handshakes are in-process over memory BIOs** — this isolates crypto + cost cleanly (no socket/scheduler noise) but is not a network RTT model; + ClientHello fragmentation is flagged against a typical 1400-byte MSS. +- **Docker is build-only.** The benchmark is not run in a container — a + container can't reliably control the governor, core pinning, or throttle + detection, so measurement runs bare-metal on the host (see the Docker section). + +## Future phase (not implemented) + +`config.yaml` reserves a `zk:` section for SNARK/STARK proving/verification +benchmarks; the results schema and dashboard are structured to absorb it later. diff --git a/tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md b/tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md new file mode 100644 index 0000000..a647480 --- /dev/null +++ b/tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md @@ -0,0 +1,184 @@ +# Running pq-bench-rpi5 on Your Own Raspberry Pi 5 + +This benchmark measures post-quantum KEMs, signatures, and TLS 1.3 handshakes +against the classical baseline Logos uses today (X25519 / Ed25519), so every +chart shows the **migration cost** of moving to PQ on validator-grade hardware. + +There's no manual tuning: the benchmark **auto-calibrates the iteration count +per operation** to your Pi's speed, so results stay comparable across machines. + +## Prerequisites + +- **Raspberry Pi 5** (Cortex-A76, aarch64), ideally the 8GB model, with + **active cooling** so it doesn't thermal-throttle mid-run. +- **Raspberry Pi OS / Debian 13 (trixie) or newer** — the benchmark pins + OpenSSL to the **3.5.x LTS line** on every platform, and Debian 13's system + `openssl` package is already 3.5.x with the PQC algorithms (ML-KEM / ML-DSA / + SLH-DSA) compiled in, so **no OpenSSL source build is needed**. *(Verified on + a Pi 5 running trixie's `3.5.6`: the full native surface is present — + MLKEM512/768/1024, X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 and + mldsa44/65/87 — and the complete native phase matrix ran without + degradation.)* Confirm on your box with: + + ```sh + openssl version # want 3.5.x + openssl list -kem-algorithms | grep -i mlkem # want ML-KEM entries + openssl list -tls-groups | tr ':' '\n' | grep -i mlkem # MLKEM512/768/1024 + hybrids + openssl list -tls-signature-algorithms | tr ':' '\n' | grep -i mldsa # mldsa44/65/87 + ``` + + If the native MLKEM TLS groups are missing, `run.sh` skips the + `openssl-native` TLS matrix with a warning and the oqs-provider matrix still + runs. + + If your OS ships an older OpenSSL, `./setup/setup.sh` falls back to building + the pinned `openssl-3.5.7` from source automatically (adds ~15–30 min). +- **Rust toolchain** — needed for the `rustcrypto` measurement group (pure-Rust + ML-KEM/ML-DSA/SLH-DSA plus X25519/Ed25519 anchors). Install stable Rust via + rustup: + + ```sh + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + . "$HOME/.cargo/env" + cargo --version # any recent stable is fine + ``` + + (Debian 13 also packages `rustup` — `sudo apt install rustup && rustup default + stable` should be equivalent, but that path has not been verified by this + project.) The Rust toolchain covers TWO measurement groups: the + `rustcrypto` primitives (`bench/rust`) and the `rustls-awslc` TLS matrix + (`bench/rust-tls`). The latter compiles the AWS-LC C library on first build + (needs `cmake`, which `setup.sh deps` installs; verified working on a Pi 5). + Build both harnesses as your normal user (the run also does this + automatically — it runs cargo as you, never as root): + + ```sh + (cd bench/rust && cargo build --release --locked) + (cd bench/rust-tls && cargo build --release --locked) # AWS-LC C build: several minutes, once + ``` + + **Optional:** if cargo is absent, `./run.sh` skips both Rust groups + gracefully and records the reasons in the results JSON — the rest of the + benchmark is unaffected. +- **Internet access** and **sudo**. + +## Step 1 — Clone (public repo, no auth) + +```sh +git clone +cd pq-bench-rpi5 +``` + +## Step 2 — Check, then build + +```sh +make check # read-only: verifies OpenSSL incl. its DEV FILES (libssl-dev — + # the binary alone is not enough), rust, cmake etc., and prints + # apt commands for anything missing ('make deps' installs them) +make build # C toolchain + bench binaries + both Rust harnesses; refuses to + # link a system liboqs — only the vendored pinned build is + # comparable with the published baselines +make test # ~1-2 min verification gate (21 checks, incl. ldd-verifying the + # binaries link the vendored liboqs) before you spend 30 min + # measuring +``` + +The build takes 5–15 min (liboqs dominates; the first Rust-TLS build compiles +AWS-LC, several more minutes once). Run inside `tmux` so it survives an SSH +disconnect. `make build` refuses to run cargo as root — build as your normal +user; the run also stays your user, only the governor step escalates. + +## Step 3 — Run + +```sh +make run +``` + +Root is needed for exactly one step: writing `performance` into the sysfs +CPU-governor files. `make run` asks for your sudo password once, up front +(`sudo -v`), and only the governor write escalates (`sudo -n`) — the +measurement itself, the in-run cargo builds and every result file stay owned +by your user. (Core pinning via `taskset` and the `vcgencmd` thermal trace +need no root — vcgencmd only needs the `video` group, which the default Pi +user has.) `NOSUDO=1 make run` skips the sudo attempt; the run completes and +the governor demerit is recorded honestly. + +A full run covers **all four measurement groups** (liboqs primitives, +RustCrypto primitives, aws-lc-rs pricing rows, and the three-stack TLS phase +matrix: openssl-native / oqs-provider / rustls-awslc, ~60 cells at 1000 +handshakes each). **Measured: 36 min on an Apple M3, 29 min (1716 s) on a +Pi 5** — the Pi is not slower end-to-end because per-op auto-calibration +targets a fixed measurement budget per operation. There are no iteration +counts to set. + +To exercise the whole pipeline end-to-end first without a publishable-length +run, use smoke mode — same coverage (all four groups, every TLS stack), one +repetition per op and 50 handshakes per TLS cell: + +```sh +make smoke +``` + +Output lands in `results/-.json`, stamped with full +provenance (Pi model, RAM, kernel, governor, thermal trace, library versions) +and an `is_baseline_grade` flag. + +## Step 4 — View results + +The dashboard must be served over **HTTP** (opening `index.html` as a `file://` +URL blocks its JSON fetch — see `dashboard/README.md`): + +```sh +cd dashboard +python3 -m http.server 8765 +# then open http://:8765 +``` + +The charts show KEM, signature, and TLS results with the classical X25519 / +Ed25519 baseline drawn as a reference line. + +## Step 5 — Contribute (optional) + +Share your `results/*.json` (open a PR or send it over). The published +dashboard dataset is pinned by `analyze/published_runs.txt` (run +`python3 analyze/merge.py` with no arguments to rebuild exactly that set); +for an ad-hoc local comparison pass explicit files: + +```sh +python3 analyze/merge.py results/.json results/.json \ + -o dashboard/data/merged.json +``` + +The dashboard then shows every selected machine side by side. + +## What the results tell you + +PQ is not so much *slower* as *bigger*. Lattice schemes (ML-KEM, ML-DSA) run +close to classical in speed but have much larger keys and signatures, while the +hash-based SLH-DSA (SPHINCS+) is an outlier in both signing time and signature +size. On TLS, the classical baseline fits in a single packet, while PQ and +hybrid handshakes grow past it and fragment. + +## Notes and limitations + +- Hash-based signatures are measured in **both generations**: the standardised + FIPS 205 SLH-DSA sets (`SLH_DSA_PURE_SHA2_*`, new rows) **and** the round-3 + `SPHINCS+-SHA2-*-simple` sets (the rows comparable to the earlier published + baselines). They are different algorithms — compare like with like. +- Measures **liboqs** (C / assembly) implementations, the **RustCrypto + pure-Rust second source** (`implementation: rustcrypto` rows — same + methodology, hedged signing like liboqs; Falcon/McEliece/FrodoKEM have no + mature pure-Rust implementation and stay absent there), the **aws-lc-rs + pricing rows**, and the **three-stack TLS phase matrix** (`openssl-native`, + `oqs-provider`, `rustls-awslc`) — see README for what each covers and the + caveats that apply. +- Rust-vs-C gaps are partly **optimisation-path artefacts**, not pure + implementation quality: liboqs has hand-written aarch64 assembly for ML-KEM, + the Rust crates are portable Rust. The results JSON records both sides' + compiled code paths (`toolchain.liboqs_opt_defines` / `toolchain.rust`). +- Userspace PMU cycle counts are usually unavailable, so the primary metric is + **wall-clock time + ops/sec**. +- SNARK / STARK benchmarking is **out of scope** for this phase (`config.yaml` + reserves a hook for it). +- The candidate list lives in `config.yaml` — use the exact liboqs algorithm + names. diff --git a/tools/benchmarks/pqc/analyze/merge.py b/tools/benchmarks/pqc/analyze/merge.py new file mode 100644 index 0000000..ff70a0a --- /dev/null +++ b/tools/benchmarks/pqc/analyze/merge.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +"""merge.py — merge many results/-.json files into one dataset the +dashboard (and PNG export) consume. + + python3 analyze/merge.py # merge the PUBLISHED set (see below) + python3 analyze/merge.py results/*.json ... # merge an explicit ad-hoc set + +With no inputs, the file list comes from analyze/published_runs.txt — the +explicit, reviewed manifest of which results files feed the published dashboard +dataset. That keeps ad-hoc dev runs sitting in results/ from silently leaking +into dashboard/data/merged.json: getting a run published is an edit to the +manifest, not an accident of globbing. + +The merged file keeps every run as a separate record (so multiple machines / +repetitions can be compared) plus a flat index for quick charting. It never +collapses RPi5 baseline-grade runs together with non-baseline (e.g. macOS smoke) +runs — each record carries its own `is_baseline_grade` flag and host, and the +dashboard filters on it by default. + +Schema-v1 inputs (pre-`implementation`/`phase` result files) are read +compatibly: `backend` maps to `implementation`, TLS rows get their phase +inferred (classical sig + classical group = baseline; PQ signature = phase2; +PQ/hybrid group + classical sig = phase0), and TLS implementation defaults to +"oqs-provider" (the only TLS stack that existed before v2). The source files +are never rewritten. +""" +from __future__ import annotations +import argparse +import glob +import json +import os +import sys + +MERGED_SCHEMA = "2.0.0" + +HERE = os.path.dirname(os.path.abspath(__file__)) +ROOT = os.path.dirname(HERE) +MANIFEST = os.path.join(HERE, "published_runs.txt") + +PQ_KEM_TOKENS = ("mlkem", "kyber", "frodo", "hqc", "bike", "ntru", "mceliece") +CLASSICAL_SIG_PREFIXES = ("ed25519", "ed448", "ecdsa", "rsa") + + +def infer_phase(group: str, sig_alg: str) -> str: + """v1-compat phase inference; keep in sync with bench/lib/assemble.py.""" + g, s = (group or "").lower(), (sig_alg or "").lower() + pq_kem = any(t in g for t in PQ_KEM_TOKENS) + if s.startswith(CLASSICAL_SIG_PREFIXES): + return "phase0" if pq_kem else "baseline" + return "phase2" + + +def row_total(row): + """Per-alg total (sum of per-op medians). Prefer the value assemble.py + stamped; for v1 files (which are never rewritten) derive it here so old + and new runs chart uniformly. Derived, not measured.""" + t = (row.get("total") or {}).get("sum_of_medians_ns") + if t is not None: + return t + # keep in sync with assemble.py TOTAL_OPS: auxiliary ops (e.g. + # verify_cached_key) are not part of the one-full-cycle total + total_ops = ("keygen", "encaps", "decaps", "derive", "sign", "verify") + medians = [(st or {}).get("median") + for op, st in (row.get("operations") or {}).items() + if op in total_ops] + if medians and all(m is not None for m in medians): + return round(sum(medians), 2) + return None + + +def manifest_paths(): + if not os.path.exists(MANIFEST): + sys.exit(f"no inputs given and manifest not found: {MANIFEST}") + paths = [] + with open(MANIFEST) as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + p = line if os.path.isabs(line) else os.path.join(ROOT, "results", line) + if os.path.isfile(p): + paths.append(p) + else: + print(f"[merge] manifest entry missing on disk (skipped): {line}", + file=sys.stderr) + return paths + + +def load_runs(paths): + runs = [] + for p in paths: + try: + with open(p) as f: + d = json.load(f) + d["_source_file"] = os.path.basename(p) + runs.append(d) + except (json.JSONDecodeError, OSError) as e: + print(f"[merge] skipping {p}: {e}", file=sys.stderr) + return runs + + +def run_id(run): + h = run.get("host", {}) + return f"{h.get('hostname','?')}/{h.get('cpu_brand','?')}@{run.get('generated_utc','?')}" + + +def flatten(runs): + """Produce flat per-(run, algorithm, operation) rows for easy charting. + Deliberately-disabled rows are NOT dropped: they flow into the *_absent + arrays with their reasons — absences (e.g. SLH-DSA in TLS) are findings + the dashboard must render, not gaps to silently filter.""" + kem_rows, sig_rows, tls_rows = [], [], [] + kem_absent, sig_absent, tls_absent = [], [], [] + for run in runs: + rid = run_id(run) + host = run.get("host", {}) + meta = { + "run_id": rid, + "hostname": host.get("hostname"), + "cpu_brand": host.get("cpu_brand"), + "is_rpi": host.get("is_rpi"), + "is_baseline_grade": run.get("is_baseline_grade"), + "source_file": run.get("_source_file"), + } + for k in run.get("kem", []): + if not k.get("enabled"): + kem_absent.append({**meta, "alg": k.get("alg"), + "implementation": k.get("implementation") or k.get("backend"), + "reason": k.get("reason", "")}) + continue + for op, st in (k.get("operations") or {}).items(): + kem_rows.append({**meta, + "alg": k["alg"], + # v1 files say `backend`; same meaning, injected as default + "implementation": k.get("implementation") or k.get("backend"), + "classical": bool(k.get("classical")), + "nist_level": k.get("claimed_nist_level"), + "operation": op, + "median_ns": st.get("median"), "mad_ns": st.get("mad"), + "iqr_ns": st.get("iqr"), "min_ns": st.get("min"), + "stddev_ns": st.get("stddev"), "ops_per_sec": st.get("ops_per_sec"), + "total_sum_of_medians_ns": row_total(k), + "acceleration": k.get("acceleration"), + "sizes": k.get("sizes")}) + for s in run.get("sig", []): + if not s.get("enabled"): + sig_absent.append({**meta, "alg": s.get("alg"), + "implementation": s.get("implementation") or s.get("backend"), + "reason": s.get("reason", "")}) + continue + for op, st in (s.get("operations") or {}).items(): + sig_rows.append({**meta, + "alg": s["alg"], + "implementation": s.get("implementation") or s.get("backend"), + "classical": bool(s.get("classical")), + "nist_level": s.get("claimed_nist_level"), + "operation": op, + "median_ns": st.get("median"), "mad_ns": st.get("mad"), + "iqr_ns": st.get("iqr"), "min_ns": st.get("min"), + "stddev_ns": st.get("stddev"), "ops_per_sec": st.get("ops_per_sec"), + "total_sum_of_medians_ns": row_total(s), + "acceleration": s.get("acceleration"), + "sizes": s.get("sizes")}) + tls = run.get("tls") or {} + for cell in (tls.get("matrix") or []): + if not cell.get("enabled"): + lab = cell.get("label") or "" + tls_absent.append({**meta, "label": lab, + "group": cell.get("group"), + "sig_alg": cell.get("sig_alg") or + (lab.split("+", 1)[1] if "+" in lab else ""), + "phase": cell.get("phase") or "", + "implementation": cell.get("implementation") or "oqs-provider", + "unstable_features": cell.get("unstable_features", False), + "reason": cell.get("reason", "")}) + continue + label = cell.get("label") or "" + sig_alg = cell.get("sig_alg") or \ + (label.split("+", 1)[1] if "+" in label else "") + hps = cell.get("handshake_primitive_sum") or {} + tls_rows.append({**meta, + "label": label, "group": cell.get("group"), + "sig_alg": sig_alg, + # v1 files predate these fields; defaults describe what those + # runs actually were (oqs-provider stack, phase by inference) + "implementation": cell.get("implementation") or "oqs-provider", + "unstable_features": cell.get("unstable_features", False), + "phase": cell.get("phase") or infer_phase(cell.get("group"), sig_alg), + "is_baseline_pair": label == (tls.get("baseline") or {}).get("label"), + "handshakes_per_sec": cell.get("handshakes_per_sec"), + "median_ns": (cell.get("handshake_latency_ns") or {}).get("median"), + "primitive_sum_of_medians_ns": hps.get("sum_of_medians_ns"), + "primitive_sum_complete": hps.get("complete"), + "bytes_total": (cell.get("bytes_on_wire") or {}).get("total"), + "client_hello_bytes": cell.get("client_hello_bytes"), + "client_hello_fragmented": cell.get("client_hello_fragmented")}) + return (kem_rows, sig_rows, tls_rows, + kem_absent, sig_absent, tls_absent) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("inputs", nargs="*", + help="results JSON files or globs; empty = the published " + "set from analyze/published_runs.txt") + ap.add_argument("-o", "--out", default="dashboard/data/merged.json") + args = ap.parse_args() + + if args.inputs: + paths = [] + for pat in args.inputs: + paths.extend(sorted(glob.glob(pat)) if any(c in pat for c in "*?[") else [pat]) + paths = [p for p in paths if os.path.isfile(p)] + else: + paths = manifest_paths() + print(f"[merge] no inputs given -> published set from {MANIFEST} " + f"({len(paths)} files)", file=sys.stderr) + if not paths: + sys.exit("no input files matched") + + runs = load_runs(paths) + (kem_rows, sig_rows, tls_rows, + kem_absent, sig_absent, tls_absent) = flatten(runs) + + merged = { + "merged_schema": MERGED_SCHEMA, + "n_runs": len(runs), + "runs": [{ + "run_id": run_id(r), + "host": r.get("host"), + "is_baseline_grade": r.get("is_baseline_grade"), + "baseline_grade_reasons": r.get("baseline_grade_reasons", []), + "toolchain": r.get("toolchain"), + "cpu_features": r.get("cpu_features"), + "run": r.get("run"), + "thermal_summary": { + "temp_c": (r.get("thermal_trace") or {}).get("temp_c"), + "throttling_detected": (r.get("thermal_trace") or {}).get("throttling_detected"), + }, + "generated_utc": r.get("generated_utc"), + "source_file": r.get("_source_file"), + } for r in runs], + "kem": kem_rows, + "sig": sig_rows, + "tls": tls_rows, + "kem_absent": kem_absent, + "sig_absent": sig_absent, + "tls_absent": tls_absent, + } + + os.makedirs(os.path.dirname(args.out) or ".", exist_ok=True) + with open(args.out, "w") as f: + json.dump(merged, f, indent=2) + n_base = sum(1 for r in runs if r.get("is_baseline_grade")) + print(f"merged {len(runs)} run(s) -> {args.out} " + f"({n_base} baseline-grade, {len(runs)-n_base} smoke/other)") + print(f" kem rows: {len(kem_rows)} sig rows: {len(sig_rows)} tls rows: {len(tls_rows)}") + + +if __name__ == "__main__": + main() diff --git a/tools/benchmarks/pqc/analyze/plot.py b/tools/benchmarks/pqc/analyze/plot.py new file mode 100644 index 0000000..a1f7715 --- /dev/null +++ b/tools/benchmarks/pqc/analyze/plot.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +"""plot.py — export publication-ready PNGs from a merged dataset. + + python3 analyze/plot.py dashboard/data/merged.json -o analyze/png + +matplotlib is an OPTIONAL dependency. If it is not installed this prints a clear +hint and exits 0 (the HTML dashboard remains the primary, dependency-free view). + +By default it plots only baseline-grade (RPi5) runs so paper figures are never +polluted with macOS smoke data; pass --include-smoke to override. The classical +Logos baseline (X25519 / Ed25519) is drawn as a reference line on every chart. +""" +from __future__ import annotations +import argparse +import json +import os +import sys + +try: + import matplotlib + matplotlib.use("Agg") + import matplotlib.pyplot as plt +except ImportError: + print("matplotlib not installed — skipping PNG export.\n" + " enable it in a project venv (keeps your system python clean):\n" + " python3 -m venv analyze/.venv\n" + " analyze/.venv/bin/pip install -r analyze/requirements.txt\n" + " analyze/.venv/bin/python analyze/plot.py dashboard/data/merged.json\n" + " (the HTML dashboard works without it)", file=sys.stderr) + sys.exit(0) + + +def median_ms(ns): + return (ns or 0) / 1e6 + + +def pick_runs(merged, include_smoke): + ids = set() + for r in merged.get("runs", []): + if include_smoke or r.get("is_baseline_grade"): + ids.add(r["run_id"]) + return ids + + +def grouped_bar_by_level(rows, op, title, outpath): + """Grouped bars of median latency per algorithm, grouped by NIST level.""" + data = [r for r in rows if r["operation"] == op] + if not data: + return + # one bar per algorithm; baseline highlighted + data.sort(key=lambda r: (r.get("nist_level") or 0, r["median_ns"])) + labels = [r["alg"] for r in data] + vals = [median_ms(r["median_ns"]) for r in data] + colors = ["#888" if r.get("classical") else "#3b6" for r in data] + + fig, ax = plt.subplots(figsize=(max(6, len(labels) * 0.55), 4)) + ax.bar(range(len(labels)), vals, color=colors) + # baseline reference line + base = next((r for r in data if r.get("classical")), None) + if base: + ax.axhline(median_ms(base["median_ns"]), color="#c33", ls="--", lw=1, + label=f"classical baseline ({base['alg']})") + ax.legend(fontsize=8) + ax.set_xticks(range(len(labels))) + ax.set_xticklabels(labels, rotation=45, ha="right", fontsize=8) + ax.set_ylabel("median latency (ms)") + ax.set_title(title) + ax.grid(axis="y", alpha=0.3) + fig.tight_layout() + fig.savefig(outpath, dpi=150) + plt.close(fig) + print("wrote", outpath) + + +def size_speed_scatter(rows, op, size_key, title, outpath): + data = [r for r in rows if r["operation"] == op and r.get("sizes")] + pts = [] + for r in data: + sz = (r["sizes"] or {}).get(size_key) + if sz: + pts.append((sz, median_ms(r["median_ns"]), r["alg"], r.get("classical"))) + if not pts: + return + fig, ax = plt.subplots(figsize=(7, 5)) + for sz, lat, alg, classical in pts: + ax.scatter(sz, lat, c="#c33" if classical else "#3b6", + s=60, edgecolors="k", linewidths=0.4, zorder=3) + ax.annotate(alg, (sz, lat), fontsize=7, xytext=(4, 3), + textcoords="offset points") + ax.set_xlabel(f"{size_key} size (bytes)") + ax.set_ylabel("median latency (ms)") + ax.set_title(title) + ax.grid(alpha=0.3) + fig.tight_layout() + fig.savefig(outpath, dpi=150) + plt.close(fig) + print("wrote", outpath) + + +def tls_bar(tls_rows, outpath): + if not tls_rows: + return + tls_rows = sorted(tls_rows, key=lambda r: -(r.get("handshakes_per_sec") or 0)) + labels = [r["label"] for r in tls_rows] + vals = [r.get("handshakes_per_sec") or 0 for r in tls_rows] + colors = ["#c33" if r.get("is_baseline_pair") else "#36c" for r in tls_rows] + fig, ax = plt.subplots(figsize=(max(6, len(labels) * 0.5), 4.5)) + ax.barh(range(len(labels)), vals, color=colors) + base = next((r for r in tls_rows if r.get("is_baseline_pair")), None) + if base: + ax.axvline(base.get("handshakes_per_sec") or 0, color="#c33", ls="--", lw=1, + label=f"classical baseline ({base['label']})") + ax.legend(fontsize=8) + ax.set_yticks(range(len(labels))) + ax.set_yticklabels(labels, fontsize=7) + ax.invert_yaxis() + ax.set_xlabel("handshakes / sec") + ax.set_title("TLS 1.3 handshake throughput (higher is better)") + ax.grid(axis="x", alpha=0.3) + fig.tight_layout() + fig.savefig(outpath, dpi=150) + plt.close(fig) + print("wrote", outpath) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("merged") + ap.add_argument("-o", "--outdir", default="analyze/png") + ap.add_argument("--include-smoke", action="store_true") + args = ap.parse_args() + + with open(args.merged) as f: + merged = json.load(f) + ids = pick_runs(merged, args.include_smoke) + if not ids: + print("no baseline-grade runs to plot (use --include-smoke for macOS/dev data)", + file=sys.stderr) + return + + def keep(rows): + return [r for r in rows if r["run_id"] in ids] + + kem, sig, tls = keep(merged["kem"]), keep(merged["sig"]), keep(merged["tls"]) + os.makedirs(args.outdir, exist_ok=True) + O = args.outdir + + grouped_bar_by_level(kem, "keygen", "KEM keygen latency by algorithm", f"{O}/kem_keygen.png") + grouped_bar_by_level(kem, "encaps", "KEM encapsulation latency", f"{O}/kem_encaps.png") + grouped_bar_by_level(kem, "decaps", "KEM decapsulation latency", f"{O}/kem_decaps.png") + grouped_bar_by_level(sig, "sign", "Signature signing latency", f"{O}/sig_sign.png") + grouped_bar_by_level(sig, "verify", "Signature verification latency", f"{O}/sig_verify.png") + size_speed_scatter(kem, "encaps", "public_key", + "KEM: public-key size vs encaps latency", f"{O}/kem_size_speed.png") + size_speed_scatter(sig, "sign", "signature", + "Signature: signature size vs sign latency", f"{O}/sig_size_speed.png") + tls_bar(tls, f"{O}/tls_throughput.png") + print(f"PNGs in {O}/ ({'incl. smoke' if args.include_smoke else 'baseline-grade only'})") + + +if __name__ == "__main__": + main() diff --git a/tools/benchmarks/pqc/analyze/published_runs.txt b/tools/benchmarks/pqc/analyze/published_runs.txt new file mode 100644 index 0000000..f15466a --- /dev/null +++ b/tools/benchmarks/pqc/analyze/published_runs.txt @@ -0,0 +1,40 @@ +# Published dashboard dataset — the ONLY results files merged into +# dashboard/data/merged.json when analyze/merge.py runs without arguments. +# +# Membership criterion: the file is in the published Logos snapshot and cited +# by the companion document's provenance section — NOT merely git-tracked here. +# Paths are relative to results/. Publishing a new run = adding a line here +# (and un-ignoring the file in .gitignore); dev/smoke runs sitting in results/ +# never leak into the published dataset by accident. +# +# ---- current generation (schema 2.0.0: four measurement groups, three-stack +# ---- TLS phase matrix, SLH-DSA + SPHINCS+ side by side, Frodo AES+SHAKE) ---- +# +# Consolidated baseline-grade RPi5 run (cortex-a76, OpenSSL 3.5.6, 1716 s, +# no throttling, zero warnings): +rasberrypi5-20260720T143239Z.json +# Consolidated Mac (Apple M3) cross-platform run (apple-m3 / -mcpu=native, +# OpenSSL 3.5.7; NOT baseline-grade by design — dashboard hides it by default): +mehmetmac-20260719T224937Z.json +# Apple M4 Pro cross-platform run (apple-m4-pro / -mcpu=native, OpenSSL 3.5.7, +# macOS 26.6; full four-group + three-stack coverage; NOT baseline-grade): +Mac-20260730T134951Z.json +# Fedora 44 x86_64 run (Intel Core Ultra 9 285HX, generic-fallback flags, +# system OpenSSL 3.5.7, governor=performance + pinned via the narrowed-sudo +# path; NOT baseline-grade: non-Pi host, untuned flags. First x86 datapoint — +# also validates the x86 cpu-features path in production): +fedora-20260730T120637Z.json +# +# ---- retired (schema 1.0.0 generation; files kept in the repo as history) ---- +# NB: rasberrypi5-20260614T205226Z.json additionally serves as the +# schema-1.0.0 COMPATIBILITY FIXTURE for `make test` (hygiene test 5 in +# scripts/selftest.sh exercises merge.py's v1 handling against it) — do NOT +# delete it when tidying retired results. +# The old published set (rasberrypi5-20260625T202356Z, mehmetmac-20260625T220618Z, +# thomas-pi-20260703T083302Z) predates the SLH-DSA rename and measures none of: +# the RustCrypto/aws-lc-rs groups, the native/rustls TLS phase matrix, or the +# FrodoKEM-SHAKE variants — merged next to current-generation runs those files +# would render mostly blank and their SLH-DSA-labelled rows would silently mean +# a different algorithm (round-3 SPHINCS+ vs FIPS 205). Thomas's run is retired +# for the same reason, not for any quality problem — we will ask for a re-run +# with the new harness and re-list it then. diff --git a/tools/benchmarks/pqc/analyze/requirements.txt b/tools/benchmarks/pqc/analyze/requirements.txt new file mode 100644 index 0000000..3cf9f81 --- /dev/null +++ b/tools/benchmarks/pqc/analyze/requirements.txt @@ -0,0 +1 @@ +matplotlib>=3.7 diff --git a/tools/benchmarks/pqc/bench/kem_sig/Makefile b/tools/benchmarks/pqc/bench/kem_sig/Makefile new file mode 100644 index 0000000..27d36ab --- /dev/null +++ b/tools/benchmarks/pqc/bench/kem_sig/Makefile @@ -0,0 +1,52 @@ +# Build the primitive KEM/sig harness against the pinned liboqs + system OpenSSL. +# +# Paths/flags default to the vendored toolchain but are overridable so run.sh can +# pass the exact values from setup/versions.lock (single source of truth): +# make LIBOQS_PREFIX=... OPENSSL_PREFIX=... BENCH_CFLAGS="-O3 -mcpu=cortex-a76" + +ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../..) +LIBOQS_PREFIX ?= $(ROOT)/vendor/install +# OpenSSL: prefer the pinned keg-only Homebrew openssl@3.5 on macOS, else system. +OPENSSL_PREFIX ?= $(shell brew --prefix openssl@3.5 2>/dev/null || echo /usr) +BENCH_CFLAGS ?= -O3 + +CC ?= cc +CFLAGS := $(BENCH_CFLAGS) -std=c11 -Wall -Wextra \ + -I$(LIBOQS_PREFIX)/include -I$(OPENSSL_PREFIX)/include +LDFLAGS := -L$(LIBOQS_PREFIX)/lib -L$(OPENSSL_PREFIX)/lib \ + -Wl,-rpath,$(LIBOQS_PREFIX)/lib -Wl,-rpath,$(OPENSSL_PREFIX)/lib +LDLIBS := -loqs -lcrypto -lm + +# NB: the guard target is declared before bench_pq, so pin the default goal +# explicitly — otherwise a bare `make` would run only the guard and "succeed" +# without producing a binary. +.DEFAULT_GOAL := bench_pq + +# HARD GUARD: refuse to build against anything but the vendored liboqs. With +# vendor/install empty, -L would silently fall through to a system liboqs +# (e.g. a distro liboqs-devel) and every measurement would run against an +# unpinned library — the version pin is the whole basis of comparability, and +# the pinned oqs-provider expects exactly the pinned liboqs' headers. +liboqs-guard: + @if ! test -f "$(LIBOQS_PREFIX)/include/oqs/oqs.h" || ! ls "$(LIBOQS_PREFIX)"/lib/liboqs.* >/dev/null 2>&1; then \ + echo "ERROR: pinned vendored liboqs not found. Looked for BOTH of:"; \ + echo " $(LIBOQS_PREFIX)/include/oqs/oqs.h"; \ + echo " $(LIBOQS_PREFIX)/lib/liboqs.*"; \ + echo "Inspect what is actually there with: ls $(LIBOQS_PREFIX)"; \ + echo "- Nothing there: the toolchain build did not run or failed -- check the"; \ + echo " output of 'make build' / ./setup/setup.sh for the original error."; \ + echo "- A lib64/ directory: the toolchain was built before the install layout"; \ + echo " was pinned (-DCMAKE_INSTALL_LIBDIR=lib) -- 'make distclean && make build'."; \ + echo "Either way, do NOT install a distro liboqs to work around this: linking a"; \ + echo "system liboqs is refused because unpinned versions are not comparable with"; \ + echo "the published baselines."; \ + exit 1; \ + fi + +bench_pq: bench_pq.c | liboqs-guard + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS) + +clean: + rm -f bench_pq + +.PHONY: clean liboqs-guard diff --git a/tools/benchmarks/pqc/bench/kem_sig/bench_pq.c b/tools/benchmarks/pqc/bench/kem_sig/bench_pq.c new file mode 100644 index 0000000..02bf90e --- /dev/null +++ b/tools/benchmarks/pqc/bench/kem_sig/bench_pq.c @@ -0,0 +1,659 @@ +/* =========================================================================== + * bench_pq.c — primitive-level KEM / signature benchmark harness. + * + * One algorithm per invocation (fresh process keeps cache state clean): + * bench_pq --kind kem --alg ML-KEM-768 --warmup 1000 --iters 10000 --reps 5 + * bench_pq --kind sig --alg ML-DSA-65 ... + * + * Emits a single JSON object describing the algorithm to stdout. The orchestrator + * (run.sh / assemble.py) wraps these with environment metadata. + * + * Two implementations, selected by algorithm name (emitted per row in the + * "implementation" field — the schema dimension that distinguishes library + * sources: liboqs / openssl / rustcrypto / oqs-provider / openssl-native / + * rustls-awslc; this harness emits the first two): + * - liboqs : all PQ candidates (ML-KEM, ML-DSA, Falcon, SLH-DSA, ...) + * - OpenSSL EVP : the classical Logos baselines X25519 (KEM-analog) and + * Ed25519 (signature), which liboqs does not implement. + * This lets the classical reference be drawn on the same primitive charts. + * + * Metrics per operation: full per-iteration wall-clock nanosecond distribution + * -> median, MAD, IQR, min, max, mean, stddev, ops/sec, plus per-repetition + * medians. Optional userspace PMU cycle counts when available. Heap high-water + * via mallinfo2 on glibc (the RPi5 target); honestly reported unavailable + * elsewhere (e.g. the macOS smoke box). + * ===========================================================================*/ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#if defined(__linux__) && defined(__GLIBC__) +#include +#define HAVE_MALLINFO2 1 +#endif + +/* ---- timing ------------------------------------------------------------- */ +static inline uint64_t now_ns(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t)ts.tv_sec * 1000000000ull + (uint64_t)ts.tv_nsec; +} + +/* ---- userspace PMU cycle counter probe (aarch64) ------------------------ */ +static sigjmp_buf g_sigill_jmp; +static volatile sig_atomic_t g_pmu_ok = 0; +static void sigill_handler(int sig) { (void)sig; siglongjmp(g_sigill_jmp, 1); } + +static inline uint64_t read_cycles(void) { +#if defined(__aarch64__) + uint64_t v; + __asm__ volatile("mrs %0, pmccntr_el0" : "=r"(v)); + return v; +#else + return 0; +#endif +} + +/* Returns 1 and a reason string if userspace cycle counting works. */ +static int probe_pmu(const char **reason) { +#if defined(__aarch64__) + struct sigaction sa, old; + memset(&sa, 0, sizeof sa); + sa.sa_handler = sigill_handler; + sigaction(SIGILL, &sa, &old); + if (sigsetjmp(g_sigill_jmp, 1) == 0) { + (void)read_cycles(); + g_pmu_ok = 1; + } else { + g_pmu_ok = 0; + } + sigaction(SIGILL, &old, NULL); + if (g_pmu_ok) { *reason = "PMCCNTR_EL0 readable from userspace"; return 1; } + *reason = "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)"; + return 0; +#else + *reason = "not aarch64"; + return 0; +#endif +} + +/* ---- statistics --------------------------------------------------------- */ +typedef struct { + double median, mad, iqr, q1, q3, min, max, mean, stddev; + double ops_per_sec; + uint64_t n; +} stats_t; + +static int cmp_u64(const void *a, const void *b) { + uint64_t x = *(const uint64_t *)a, y = *(const uint64_t *)b; + return (x > y) - (x < y); +} + +/* percentile on an already-sorted array (linear interpolation) */ +static double pct_sorted(const uint64_t *s, uint64_t n, double p) { + if (n == 0) return 0; + if (n == 1) return (double)s[0]; + double idx = p * (double)(n - 1); + uint64_t lo = (uint64_t)idx; + double frac = idx - (double)lo; + if (lo + 1 >= n) return (double)s[n - 1]; + return (double)s[lo] + frac * ((double)s[lo + 1] - (double)s[lo]); +} + +static stats_t compute_stats(uint64_t *samples, uint64_t n) { + stats_t st; memset(&st, 0, sizeof st); + st.n = n; + if (n == 0) return st; + qsort(samples, n, sizeof(uint64_t), cmp_u64); + st.min = (double)samples[0]; + st.max = (double)samples[n - 1]; + st.median = pct_sorted(samples, n, 0.5); + st.q1 = pct_sorted(samples, n, 0.25); + st.q3 = pct_sorted(samples, n, 0.75); + st.iqr = st.q3 - st.q1; + + double sum = 0; + for (uint64_t i = 0; i < n; i++) sum += (double)samples[i]; + st.mean = sum / (double)n; + double ss = 0; + for (uint64_t i = 0; i < n; i++) { + double d = (double)samples[i] - st.mean; + ss += d * d; + } + st.stddev = (n > 1) ? sqrt(ss / (double)(n - 1)) : 0; + + /* MAD = median(|x - median|); needs a second sorted buffer */ + uint64_t *dev = malloc(n * sizeof(uint64_t)); + if (dev) { + for (uint64_t i = 0; i < n; i++) { + double d = (double)samples[i] - st.median; + dev[i] = (uint64_t)(d < 0 ? -d : d); + } + qsort(dev, n, sizeof(uint64_t), cmp_u64); + st.mad = pct_sorted(dev, n, 0.5); + free(dev); + } + st.ops_per_sec = st.median > 0 ? 1e9 / st.median : 0; + return st; +} + +/* ---- measurement configuration + generic loop --------------------------- */ +/* A closure-ish: the caller provides a function pointer that runs one op. */ +typedef int (*op_fn)(void *ctx); + +/* How each op is sized. Two modes, decided per invocation: + * - fixed-count (fixed_iters > 0): exactly fixed_iters timed iters per rep, + * with the configured fixed-mode warmup. This is the explicit + * `--iters N` override / fixed-count fallback. + * - auto-calibrate(fixed_iters == 0): each op is timed long enough to put + * ~target_ns of aggregate timed work on it, so a 18 us keygen + * and a 750 ms SLH-DSA sign both yield a stable median. The + * chosen count is clamped to [min_samples, max_iters]: + * fast ops hit max_iters, slow ops hit min_samples. + * Auto mode estimates per-op cost with a short doubling calibration (which also + * serves as cache warmup), then derives the timed count + a per-rep re-warm. */ +typedef struct { + uint64_t fixed_iters; /* >0 => fixed-count mode; 0 => auto-calibrate */ + uint64_t target_ns; /* auto: per-op aggregate timed-work target */ + uint64_t min_samples; /* auto: floor on timed iters per rep */ + uint64_t max_iters; /* auto: ceiling on timed iters per rep */ + uint64_t warmup; /* fixed-mode warmup count per rep */ + uint64_t reps; +} bench_cfg; + +typedef struct { + uint64_t *all; /* all samples across reps */ + uint64_t all_n; + double per_rep_median[64]; + int n_rep_med; + uint64_t timed_iters; /* timed iters per rep actually used */ + uint64_t warmup_iters; /* warmup iters per rep actually used */ + uint64_t reps; + int calibrated; /* 1 if auto-calibrated, 0 if fixed-count */ + double est_ns; /* per-op cost estimate from calibration (auto) */ +} measure_out; + +static void print_stats_json(FILE *f, const char *name, stats_t st, + const measure_out *m) { + fprintf(f, "\"%s\":{", name); + fprintf(f, "\"unit\":\"ns\",\"warmup_iters\":%llu,\"timed_iters\":%llu,\"repetitions\":%llu,", + (unsigned long long)m->warmup_iters, (unsigned long long)m->timed_iters, + (unsigned long long)m->reps); + fprintf(f, "\"calibrated\":%s,", m->calibrated ? "true" : "false"); + if (m->calibrated) + fprintf(f, "\"calib_est_ns\":%.2f,", m->est_ns); + fprintf(f, "\"samples\":%llu,", (unsigned long long)st.n); + fprintf(f, "\"median\":%.2f,\"mad\":%.2f,\"iqr\":%.2f,\"q1\":%.2f,\"q3\":%.2f,", + st.median, st.mad, st.iqr, st.q1, st.q3); + fprintf(f, "\"min\":%.2f,\"max\":%.2f,\"mean\":%.2f,\"stddev\":%.2f,", + st.min, st.max, st.mean, st.stddev); + fprintf(f, "\"ops_per_sec\":%.2f,", st.ops_per_sec); + fprintf(f, "\"per_rep_median\":["); + for (int i = 0; i < m->n_rep_med; i++) + fprintf(f, "%s%.2f", i ? "," : "", m->per_rep_median[i]); + fprintf(f, "]}"); +} + +/* Pick the timed-iter count (and per-rep warmup) for one op under cfg. + * In auto mode this runs a doubling calibration loop on fn (which warms caches) + * to estimate per-op cost, then solves for the count that hits target_ns. + * Returns 0 on success, -2 if the op ever fails during calibration. */ +static int calibrate_op(op_fn fn, void *ctx, const bench_cfg *cfg, + uint64_t *timed_out, uint64_t *warm_out, + double *est_ns_out, int *calibrated_out) { + if (cfg->fixed_iters > 0) { + *timed_out = cfg->fixed_iters; + *warm_out = cfg->warmup; + *est_ns_out = 0.0; + *calibrated_out = 0; + return 0; + } + /* doubling calibration: run batches 1,2,4,... until ~CALIB_BUDGET elapses, + * capped at max_iters so a sub-microsecond op can't spin forever. */ + const uint64_t CALIB_BUDGET_NS = 30ull * 1000 * 1000; /* 30 ms */ + uint64_t cops = 0, cel = 0, batch = 1; + while (cel < CALIB_BUDGET_NS && cops < cfg->max_iters) { + uint64_t t0 = now_ns(); + for (uint64_t i = 0; i < batch; i++) + if (fn(ctx) != 0) return -2; + cel += now_ns() - t0; + cops += batch; + batch *= 2; + } + double est_ns = cops ? (double)cel / (double)cops : 1.0; + if (est_ns < 1.0) est_ns = 1.0; + + double want = (double)cfg->target_ns / est_ns; + uint64_t n = (uint64_t)(want + 0.5); + if (n < cfg->min_samples) n = cfg->min_samples; /* slow ops floor here */ + if (n > cfg->max_iters) n = cfg->max_iters; /* fast ops ceil here */ + + /* per-rep re-warm ~= 20% of the timed budget, at least 1, capped. */ + double w = ((double)cfg->target_ns * 0.2) / est_ns; + uint64_t warm = (uint64_t)(w + 0.5); + if (warm < 1) warm = 1; + if (warm > cfg->max_iters) warm = cfg->max_iters; + + *timed_out = n; + *warm_out = warm; + *est_ns_out = est_ns; + *calibrated_out = 1; + return 0; +} + +/* Returns 0 on success. Fills out with samples. Re-warms before each rep. */ +static int measure_op(op_fn fn, void *ctx, const bench_cfg *cfg, measure_out *out) { + uint64_t iters, warmup; + double est_ns; int calibrated; + if (calibrate_op(fn, ctx, cfg, &iters, &warmup, &est_ns, &calibrated) != 0) + return -2; + + out->all = malloc(iters * cfg->reps * sizeof(uint64_t)); + if (!out->all) return -1; + out->all_n = 0; + out->n_rep_med = 0; + out->timed_iters = iters; + out->warmup_iters = warmup; + out->reps = cfg->reps; + out->calibrated = calibrated; + out->est_ns = est_ns; + uint64_t *rep_buf = malloc(iters * sizeof(uint64_t)); + if (!rep_buf) { free(out->all); return -1; } + + for (uint64_t r = 0; r < cfg->reps; r++) { + for (uint64_t i = 0; i < warmup; i++) + if (fn(ctx) != 0) { free(rep_buf); free(out->all); return -2; } + for (uint64_t i = 0; i < iters; i++) { + uint64_t t0 = now_ns(); + int rc = fn(ctx); + uint64_t dt = now_ns() - t0; + if (rc != 0) { free(rep_buf); free(out->all); return -2; } + rep_buf[i] = dt; + out->all[out->all_n++] = dt; + } + /* per-rep median (sorts a copy of this rep's slice) */ + uint64_t *copy = malloc(iters * sizeof(uint64_t)); + if (copy) { + memcpy(copy, rep_buf, iters * sizeof(uint64_t)); + qsort(copy, iters, sizeof(uint64_t), cmp_u64); + if (out->n_rep_med < 64) + out->per_rep_median[out->n_rep_med++] = pct_sorted(copy, iters, 0.5); + free(copy); + } + } + free(rep_buf); + return 0; +} + +/* ---- anti-DCE sink + fatal helpers -------------------------------------- */ +/* File-scope volatile: the compiler must materialize every store, so it cannot + * dead-code-eliminate the crypto outputs we feed into it. Every timed op sinks + * one output byte here. */ +static volatile uint64_t g_sink = 0; + +/* Abort the whole run: a broken build must NEVER silently emit timing numbers. */ +static void die(const char *alg, const char *what) { + fprintf(stderr, "[bench_pq] FATAL: %s: %s — aborting so no numbers are emitted\n", + alg, what); + exit(3); +} + +/* measure_op wrapper: if any timed op ever returns failure (e.g. a verify that + * stopped succeeding), abort instead of reading freed/partial buffers. */ +static void must_measure(const char *alg, const char *op, op_fn fn, void *ctx, + const bench_cfg *cfg, measure_out *out) { + if (measure_op(fn, ctx, cfg, out) != 0) + die(alg, op); +} + +#define MSGLEN 32 + +/* ======================= liboqs KEM ====================================== */ +/* Timed ops consume canonical, pre-validated inputs; keygen/encaps write to + * scratch buffers so they never clobber the matched (pk,sk,ct) that the other + * timed ops depend on. Each op sinks an output byte into g_sink. */ +typedef struct { + OQS_KEM *kem; + uint8_t *pk, *sk; /* canonical matched keypair (encaps/decaps inputs) */ + uint8_t *ct; /* canonical ciphertext (decaps input) */ + uint8_t *pk_s, *sk_s; /* scratch: keygen outputs */ + uint8_t *ct_s, *ss_s; /* scratch: encaps outputs */ + uint8_t *ss_d; /* scratch: decaps output */ +} kem_ctx; +static int kem_keygen(void *c){ kem_ctx*x=c; + if (OQS_KEM_keypair(x->kem, x->pk_s, x->sk_s) != OQS_SUCCESS) return 1; + g_sink += x->pk_s[0]; return 0; } +static int kem_encaps(void *c){ kem_ctx*x=c; + if (OQS_KEM_encaps(x->kem, x->ct_s, x->ss_s, x->pk) != OQS_SUCCESS) return 1; + g_sink += (uint64_t)x->ss_s[0] ^ x->ct_s[0]; return 0; } +static int kem_decaps(void *c){ kem_ctx*x=c; + if (OQS_KEM_decaps(x->kem, x->ss_d, x->ct, x->sk) != OQS_SUCCESS) return 1; + g_sink += x->ss_d[0]; return 0; } + +static int run_kem(const char *alg, const bench_cfg *cfg) { + OQS_KEM *kem = OQS_KEM_new(alg); + if (!kem) { + printf("{\"alg\":\"%s\",\"kind\":\"kem\",\"implementation\":\"liboqs\",\"enabled\":false," + "\"reason\":\"not enabled in this liboqs build\"}\n", alg); + return 0; + } + kem_ctx x; memset(&x, 0, sizeof x); x.kem = kem; + x.pk = malloc(kem->length_public_key); x.sk = malloc(kem->length_secret_key); + x.ct = malloc(kem->length_ciphertext); + x.pk_s = malloc(kem->length_public_key); x.sk_s = malloc(kem->length_secret_key); + x.ct_s = malloc(kem->length_ciphertext); + x.ss_s = malloc(kem->length_shared_secret); + x.ss_d = malloc(kem->length_shared_secret); + if (!x.pk||!x.sk||!x.ct||!x.pk_s||!x.sk_s||!x.ct_s||!x.ss_s||!x.ss_d) die(alg,"out of memory"); + + /* ---- correctness check (ONCE, outside the timed loop) ---- + * keygen -> encaps -> decaps, then assert the shared secrets match. */ + if (OQS_KEM_keypair(kem, x.pk, x.sk) != OQS_SUCCESS) die(alg, "keygen failed"); + if (OQS_KEM_encaps(kem, x.ct, x.ss_s, x.pk) != OQS_SUCCESS) die(alg, "encaps failed"); + if (OQS_KEM_decaps(kem, x.ss_d, x.ct, x.sk) != OQS_SUCCESS) die(alg, "decaps failed"); + if (memcmp(x.ss_s, x.ss_d, kem->length_shared_secret) != 0) + die(alg, "KEM shared-secret mismatch (ss_encaps != ss_decaps)"); + + /* timed phases run on the canonical, validated (pk,sk,ct); any op failure + * during timing aborts via must_measure. */ + measure_out kg={0}, en={0}, de={0}; + must_measure(alg,"keygen",kem_keygen,&x,cfg,&kg); + must_measure(alg,"encaps",kem_encaps,&x,cfg,&en); + must_measure(alg,"decaps",kem_decaps,&x,cfg,&de); + + printf("{\"alg\":\"%s\",\"kind\":\"kem\",\"implementation\":\"liboqs\",\"enabled\":true,", alg); + printf("\"claimed_nist_level\":%d,", kem->claimed_nist_level); + printf("\"sizes\":{\"public_key\":%zu,\"secret_key\":%zu,\"ciphertext\":%zu,\"shared_secret\":%zu},", + kem->length_public_key, kem->length_secret_key, kem->length_ciphertext, kem->length_shared_secret); + printf("\"operations\":{"); + stats_t s; + s=compute_stats(kg.all,kg.all_n); print_stats_json(stdout,"keygen",s,&kg); printf(","); + s=compute_stats(en.all,en.all_n); print_stats_json(stdout,"encaps",s,&en); printf(","); + s=compute_stats(de.all,de.all_n); print_stats_json(stdout,"decaps",s,&de); + printf("}}\n"); + + free(kg.all); free(en.all); free(de.all); + free(x.pk); free(x.sk); free(x.ct); + free(x.pk_s); free(x.sk_s); free(x.ct_s); free(x.ss_s); free(x.ss_d); + OQS_KEM_free(kem); + return 0; +} + +/* ======================= liboqs SIG ====================================== */ +/* sign writes a scratch signature; verify reads the canonical (sg,sglen) over + * the canonical msg with the canonical pk — all pre-validated. */ +typedef struct { + OQS_SIG *sig; + uint8_t *pk, *sk; /* canonical keypair (sign/verify inputs) */ + uint8_t *msg; /* canonical message */ + uint8_t *sg; size_t sglen; /* canonical signature (verify input) */ + uint8_t *pk_s, *sk_s; /* scratch: keygen outputs */ + uint8_t *sg_s; size_t sg_s_len;/* scratch: sign output */ +} sig_ctx; +static int sig_keygen(void *c){ sig_ctx*x=c; + if (OQS_SIG_keypair(x->sig, x->pk_s, x->sk_s) != OQS_SUCCESS) return 1; + g_sink += x->pk_s[0]; return 0; } +static int sig_sign(void *c){ sig_ctx*x=c; + x->sg_s_len = x->sig->length_signature; + if (OQS_SIG_sign(x->sig, x->sg_s, &x->sg_s_len, x->msg, MSGLEN, x->sk) != OQS_SUCCESS) return 1; + g_sink += x->sg_s[0]; return 0; } +static int sig_verify(void *c){ sig_ctx*x=c; + if (OQS_SIG_verify(x->sig, x->msg, MSGLEN, x->sg, x->sglen, x->pk) != OQS_SUCCESS) return 1; + g_sink += 1; return 0; } + +static int run_sig(const char *alg, const bench_cfg *cfg) { + OQS_SIG *sig = OQS_SIG_new(alg); + if (!sig) { + printf("{\"alg\":\"%s\",\"kind\":\"sig\",\"implementation\":\"liboqs\",\"enabled\":false," + "\"reason\":\"not enabled in this liboqs build\"}\n", alg); + return 0; + } + sig_ctx x; memset(&x,0,sizeof x); x.sig=sig; + x.pk = malloc(sig->length_public_key); x.sk = malloc(sig->length_secret_key); + x.msg = malloc(MSGLEN); + x.sg = malloc(sig->length_signature); + x.pk_s = malloc(sig->length_public_key); x.sk_s = malloc(sig->length_secret_key); + x.sg_s = malloc(sig->length_signature); + if (!x.pk||!x.sk||!x.msg||!x.sg||!x.pk_s||!x.sk_s||!x.sg_s) die(alg,"out of memory"); + memset(x.msg, 0xA5, MSGLEN); + + /* ---- correctness check (ONCE, outside the timed loop) ---- + * keygen -> sign -> verify; the verify MUST succeed on a valid signature. */ + if (OQS_SIG_keypair(sig, x.pk, x.sk) != OQS_SUCCESS) die(alg, "keygen failed"); + x.sglen = sig->length_signature; + if (OQS_SIG_sign(sig, x.sg, &x.sglen, x.msg, MSGLEN, x.sk) != OQS_SUCCESS) die(alg, "sign failed"); + if (OQS_SIG_verify(sig, x.msg, MSGLEN, x.sg, x.sglen, x.pk) != OQS_SUCCESS) + die(alg, "signature verify failed on a valid signature (broken build)"); + + measure_out kg={0}, sg={0}, vf={0}; + must_measure(alg,"keygen",sig_keygen,&x,cfg,&kg); + must_measure(alg,"sign", sig_sign, &x,cfg,&sg); + must_measure(alg,"verify",sig_verify,&x,cfg,&vf); + + printf("{\"alg\":\"%s\",\"kind\":\"sig\",\"implementation\":\"liboqs\",\"enabled\":true,", alg); + printf("\"claimed_nist_level\":%d,", sig->claimed_nist_level); + printf("\"sizes\":{\"public_key\":%zu,\"secret_key\":%zu,\"signature\":%zu},", + sig->length_public_key, sig->length_secret_key, sig->length_signature); + printf("\"operations\":{"); + stats_t s; + s=compute_stats(kg.all,kg.all_n); print_stats_json(stdout,"keygen",s,&kg); printf(","); + s=compute_stats(sg.all,sg.all_n); print_stats_json(stdout,"sign",s,&sg); printf(","); + s=compute_stats(vf.all,vf.all_n); print_stats_json(stdout,"verify",s,&vf); + printf("}}\n"); + + free(kg.all); free(sg.all); free(vf.all); + free(x.pk); free(x.sk); free(x.msg); free(x.sg); + free(x.pk_s); free(x.sk_s); free(x.sg_s); + OQS_SIG_free(sig); + return 0; +} + +/* ======================= OpenSSL classical baselines ===================== */ +/* X25519 as a KEM-analog: keygen + ECDH derive (one shared-secret derivation). */ +typedef struct { EVP_PKEY *self; EVP_PKEY *peer; } x25519_ctx; +static int x25519_keygen(void *c){ + x25519_ctx*x=c; + if (x->self) { EVP_PKEY_free(x->self); x->self=NULL; } + EVP_PKEY_CTX *p = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519,NULL); + if(!p) return 1; + int ok = EVP_PKEY_keygen_init(p)>0 && EVP_PKEY_keygen(p,&x->self)>0; + EVP_PKEY_CTX_free(p); + return ok?0:1; +} +/* derive shared secret a·b into out[32]; returns 1 on success */ +static int x25519_derive_into(EVP_PKEY *a, EVP_PKEY *b, unsigned char out[32]){ + EVP_PKEY_CTX *p = EVP_PKEY_CTX_new(a,NULL); + if(!p) return 0; + size_t slen=32; + int ok = EVP_PKEY_derive_init(p)>0 && + EVP_PKEY_derive_set_peer(p,b)>0 && + EVP_PKEY_derive(p,out,&slen)>0; + EVP_PKEY_CTX_free(p); + return ok; +} +static int x25519_derive(void *c){ + x25519_ctx*x=c; + unsigned char secret[32]; + if(!x25519_derive_into(x->self,x->peer,secret)) return 1; + g_sink += secret[0]; /* sink the derived shared secret */ + return 0; +} + +static int run_x25519(const bench_cfg *cfg) { + x25519_ctx x={0}; + if (x25519_keygen(&x) != 0) die("X25519","keygen failed"); /* self */ + /* a fixed peer key for derive */ + EVP_PKEY_CTX *p = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519,NULL); + if(!p || EVP_PKEY_keygen_init(p)<=0 || EVP_PKEY_keygen(p,&x.peer)<=0) die("X25519","peer keygen failed"); + EVP_PKEY_CTX_free(p); + + /* ---- correctness check (ONCE, outside timing): ECDH must agree ---- */ + { + unsigned char sa[32], sb[32]; + if (!x25519_derive_into(x.self, x.peer, sa)) die("X25519","derive(self,peer) failed"); + if (!x25519_derive_into(x.peer, x.self, sb)) die("X25519","derive(peer,self) failed"); + if (memcmp(sa, sb, 32) != 0) die("X25519","ECDH shared-secret mismatch"); + } + + measure_out kg={0}, dv={0}; + must_measure("X25519","keygen",x25519_keygen,&x,cfg,&kg); + /* keygen frees+replaces self each call; re-make a stable self for derive */ + if (x25519_keygen(&x) != 0) die("X25519","keygen failed"); + must_measure("X25519","derive",x25519_derive,&x,cfg,&dv); + + printf("{\"alg\":\"X25519\",\"kind\":\"kem\",\"implementation\":\"openssl\",\"classical\":true,\"enabled\":true,"); + printf("\"claimed_nist_level\":1,"); + printf("\"sizes\":{\"public_key\":32,\"secret_key\":32,\"ciphertext\":null,\"shared_secret\":32},"); + printf("\"operations\":{"); + stats_t s; + s=compute_stats(kg.all,kg.all_n); print_stats_json(stdout,"keygen",s,&kg); printf(","); + s=compute_stats(dv.all,dv.all_n); print_stats_json(stdout,"derive",s,&dv); + printf("}}\n"); + free(kg.all); free(dv.all); + if(x.self)EVP_PKEY_free(x.self); if(x.peer)EVP_PKEY_free(x.peer); + return 0; +} + +/* Ed25519 signature baseline. */ +typedef struct { EVP_PKEY *key; unsigned char msg[32]; unsigned char sig[64]; size_t siglen; } ed_ctx; +static int ed_keygen(void *c){ + ed_ctx*x=c; + if(x->key){EVP_PKEY_free(x->key);x->key=NULL;} + EVP_PKEY_CTX *p=EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519,NULL); + if(!p)return 1; + int ok=EVP_PKEY_keygen_init(p)>0 && EVP_PKEY_keygen(p,&x->key)>0; + EVP_PKEY_CTX_free(p); + return ok?0:1; +} +static int ed_sign(void *c){ + ed_ctx*x=c; + EVP_MD_CTX *m=EVP_MD_CTX_new(); if(!m)return 1; + x->siglen=sizeof x->sig; + int ok = EVP_DigestSignInit(m,NULL,NULL,NULL,x->key)>0 && + EVP_DigestSign(m,x->sig,&x->siglen,x->msg,sizeof x->msg)>0; + EVP_MD_CTX_free(m); + if(!ok) return 1; + g_sink += x->sig[0]; /* sink the signature */ + return 0; +} +static int ed_verify(void *c){ + ed_ctx*x=c; + EVP_MD_CTX *m=EVP_MD_CTX_new(); if(!m)return 1; + int ok = EVP_DigestVerifyInit(m,NULL,NULL,NULL,x->key)>0 && + EVP_DigestVerify(m,x->sig,x->siglen,x->msg,sizeof x->msg)>0; + EVP_MD_CTX_free(m); + if(!ok) return 1; + g_sink += 1; /* sink the (successful) verify result */ + return 0; +} + +static int run_ed25519(const bench_cfg *cfg) { + ed_ctx x; memset(&x,0,sizeof x); memset(x.msg,0xA5,sizeof x.msg); + + /* ---- correctness check (ONCE, outside timing): verify MUST succeed ---- */ + if (ed_keygen(&x) != 0) die("Ed25519","keygen failed"); + if (ed_sign(&x) != 0) die("Ed25519","sign failed"); + if (ed_verify(&x) != 0) die("Ed25519","verify failed on a valid signature (broken build)"); + + measure_out kg={0}, sg={0}, vf={0}; + must_measure("Ed25519","keygen",ed_keygen,&x,cfg,&kg); + if (ed_keygen(&x)!=0 || ed_sign(&x)!=0) die("Ed25519","re-priming key+sig failed"); + must_measure("Ed25519","sign", ed_sign, &x,cfg,&sg); + must_measure("Ed25519","verify",ed_verify,&x,cfg,&vf); + + printf("{\"alg\":\"Ed25519\",\"kind\":\"sig\",\"implementation\":\"openssl\",\"classical\":true,\"enabled\":true,"); + printf("\"claimed_nist_level\":1,"); + printf("\"sizes\":{\"public_key\":32,\"secret_key\":32,\"signature\":64},"); + printf("\"operations\":{"); + stats_t s; + s=compute_stats(kg.all,kg.all_n); print_stats_json(stdout,"keygen",s,&kg); printf(","); + s=compute_stats(sg.all,sg.all_n); print_stats_json(stdout,"sign",s,&sg); printf(","); + s=compute_stats(vf.all,vf.all_n); print_stats_json(stdout,"verify",s,&vf); + printf("}}\n"); + free(kg.all); free(sg.all); free(vf.all); + if(x.key)EVP_PKEY_free(x.key); + return 0; +} + +/* ---- main --------------------------------------------------------------- */ +static void usage(void){ + fprintf(stderr, + "usage: bench_pq --kind kem|sig --alg NAME [options]\n" + " auto-calibration (default): each op is timed to ~--target-time-ms of\n" + " aggregate work, clamped to [--min-samples, --max-iters].\n" + " --target-time-ms N per-op timed-work target (default 250)\n" + " --min-samples N floor on timed iters per rep (default 30)\n" + " --max-iters N ceiling on timed iters per rep (default 20000)\n" + " --reps N independent repetitions (default 5)\n" + " --iters N FIXED-count fallback: exactly N timed iters/rep\n" + " (disables calibration; pairs with --warmup)\n" + " --warmup N warmup iters/rep in fixed-count mode (default 1000)\n"); +} + +int main(int argc, char **argv) { + const char *kind=NULL, *alg=NULL; + /* fixed-count fallback knobs */ + uint64_t warmup=1000, iters=0, reps=5; /* iters=0 => auto-calibrate */ + /* auto-calibration knobs */ + uint64_t target_time_ms=250, min_samples=30, max_iters=20000; + for (int i=1;i0 => fixed-count mode */ + .target_ns = target_time_ms * 1000000ull, + .min_samples = min_samples, + .max_iters = max_iters, + .warmup = warmup, + .reps = reps, + }; + if (iters>0) + fprintf(stderr,"[bench_pq] mode=fixed-count reps=%llu warmup=%llu iters=%llu\n", + (unsigned long long)reps,(unsigned long long)warmup,(unsigned long long)iters); + else + fprintf(stderr,"[bench_pq] mode=auto-calibrate reps=%llu target=%llums min_samples=%llu max_iters=%llu\n", + (unsigned long long)reps,(unsigned long long)target_time_ms, + (unsigned long long)min_samples,(unsigned long long)max_iters); + + /* PMU cycle availability probe (reported once via stderr-free channel: + * embedded into the JSON header line below). */ + const char *pmu_reason=NULL; + int pmu_ok = probe_pmu(&pmu_reason); + fprintf(stderr,"[bench_pq] cycles_available=%d (%s)\n", pmu_ok, pmu_reason); + + OQS_init(); + int rc; + if(!strcmp(kind,"kem")){ + if(!strcmp(alg,"X25519")) rc=run_x25519(&cfg); + else rc=run_kem(alg,&cfg); + } else if(!strcmp(kind,"sig")){ + if(!strcmp(alg,"Ed25519")) rc=run_ed25519(&cfg); + else rc=run_sig(alg,&cfg); + } else { usage(); rc=2; } + OQS_destroy(); + return rc; +} diff --git a/tools/benchmarks/pqc/bench/lib/assemble.py b/tools/benchmarks/pqc/bench/lib/assemble.py new file mode 100644 index 0000000..e368bb6 --- /dev/null +++ b/tools/benchmarks/pqc/bench/lib/assemble.py @@ -0,0 +1,625 @@ +#!/usr/bin/env python3 +"""assemble.py — merge harness outputs + thermal trace + environment metadata +into one results JSON with full provenance. + +Inputs (all paths): + --meta meta.env KEY=VALUE run/host facts collected by run.sh + --lock versions.lock toolchain provenance from setup.sh + --features cpu_features.json CPU/crypto-extension detection (from run.sh) + --kemsig kemsig.jsonl one JSON object per algorithm from bench_pq + --tls tls.json output of the TLS harness (optional) + --thermal thermal.csv epoch_s,arm_clock_hz,temp_c,throttled_hex samples + --out results/-.json + +The single most important output field is `is_baseline_grade`: true ONLY on a +real RPi5 with performance governor, core pinning, A76-targeted flags, and no +thermal throttling. Everything else (notably macOS smoke runs) is false, with +reasons recorded — so smoke output can never be mistaken for the baseline. +""" +from __future__ import annotations +import argparse +import json +import os +import statistics +import sys + +# 2.0.0: per-row `backend` renamed to `implementation` (which library produced +# the measurement — vocabulary: liboqs, openssl, rustcrypto, oqs-provider, +# openssl-native, rustls-awslc); KEM/sig rows gained a `total` aggregate; TLS +# matrix cells gained `phase` / `implementation` / `sig_alg` and a +# `handshake_primitive_sum` block relating handshake latency to the primitive +# operations it performs. +SCHEMA_VERSION = "2.0.0" + +# Shared honesty note for every aggregate we compute from per-op medians. +DERIVED_NOTE = ("sum of per-operation medians; a derived figure " + "(a sum of medians is not the median of a sum), " + "not a measured latency") + + +def parse_envfile(path: str) -> dict: + """Parse KEY=VALUE / KEY="value" lines (shared format of meta.env + versions.lock).""" + out = {} + if not path or not os.path.exists(path): + return out + with open(path) as f: + for line in f: + line = line.strip() + if not line or line.startswith("#") or "=" not in line: + continue + k, v = line.split("=", 1) + v = v.strip() + if len(v) >= 2 and v[0] == v[-1] and v[0] in "\"'": + v = v[1:-1] + out[k.strip()] = v + return out + + +def load_jsonl(path: str) -> list: + items = [] + if not path or not os.path.exists(path): + return items + with open(path) as f: + for line in f: + line = line.strip() + if line: + try: + items.append(json.loads(line)) + except json.JSONDecodeError as e: + print(f"[assemble] skipping bad JSONL line: {e}", file=sys.stderr) + return items + + +def load_json(path: str): + if path and os.path.exists(path): + with open(path) as f: + return json.load(f) + return None + + +def parse_thermal(path: str) -> dict: + """Reduce the raw CSV trace to a compact embedded record + summary.""" + cols = ["epoch_s", "arm_clock_hz", "temp_c", "throttled_hex"] + samples, temps, clocks = [], [], [] + throttling_detected = False + if path and os.path.exists(path): + with open(path) as f: + for line in f: + parts = line.strip().split(",") + if len(parts) != 4: + continue + ep, clk, temp, thr = parts + samples.append([ + int(ep) if ep else None, + int(clk) if clk else None, + float(temp) if temp else None, + thr or None, + ]) + if temp: + temps.append(float(temp)) + if clk: + clocks.append(int(clk)) + if thr: + try: + v = int(thr, 16) + # bit2 = throttling now, bit18 = throttling has occurred + if v & 0x4 or v & 0x40000: + throttling_detected = True + except ValueError: + pass + + def summarize(vals): + if not vals: + return None + return { + "min": min(vals), "max": max(vals), + "mean": round(statistics.fmean(vals), 3), + "samples": len(vals), + } + + clock_summary = summarize(clocks) + # Detect frequency droop as a secondary throttling signal. + if clock_summary and clocks: + spread = (max(clocks) - min(clocks)) / max(clocks) + clock_summary["spread_frac"] = round(spread, 4) + + return { + "columns": cols, + "samples": samples, + "temp_c": summarize(temps), + "arm_clock_hz": clock_summary, + "throttling_detected": throttling_detected, + } + + +def to_int(s, default=None): + try: + return int(s) + except (TypeError, ValueError): + return default + + +# ---- schema v2 helpers ------------------------------------------------------ + +def normalize_kemsig_row(row: dict) -> dict: + """v1 compat: rows emitted by pre-2.0 harness builds carry `backend`; the + field is now `implementation` (same meaning). Lets assemble re-run on old + work dirs without rewriting them.""" + if "implementation" not in row and "backend" in row: + row["implementation"] = row.pop("backend") + return row + + +# The canonical one-full-cycle operations per row kind. Auxiliary operations +# (e.g. the rustcrypto rows' `verify_cached_key` variant) are deliberately NOT +# part of the total — the cycle contains one verify, priced at the wire-bytes +# (`verify`) shape. +TOTAL_OPS = ("keygen", "encaps", "decaps", "derive", "sign", "verify") + + +def add_row_total(row: dict) -> None: + """Aggregate one row's full operation cycle (KEM: keygen+encaps+decaps; + sig: keygen+sign+verify; the X25519 KEM-analog: keygen+derive).""" + ops = row.get("operations") or {} + medians = {op: (st or {}).get("median") + for op, st in ops.items() if op in TOTAL_OPS} + if not medians or any(v is None for v in medians.values()): + return + row["total"] = { + "sum_of_medians_ns": round(sum(medians.values()), 2), + "operations": list(medians.keys()), + "note": DERIVED_NOTE, + } + + +def norm_alg(name: str) -> str: + """Case/punctuation-insensitive algorithm key: 'ML-DSA-44' -> 'mldsa44', + 'SPHINCS+-SHA2-128f-simple' -> 'sphincssha2128fsimple' (the oqs-provider + spelling), so TLS names and primitive names meet without a lookup table.""" + return "".join(ch for ch in (name or "").lower() if ch.isalnum()) + + +PQ_KEM_TOKENS = ("mlkem", "kyber", "frodo", "hqc", "bike", "ntru", "mceliece") +CLASSICAL_SIG_PREFIXES = ("ed25519", "ed448", "ecdsa", "rsa") + + +def infer_phase(group: str, sig_alg: str) -> str: + """Migration-framework phase of a TLS cell (fallback for rows produced + before the harness emitted `phase` itself; keep in sync with + bench/tls/run_tls.sh phase_for()).""" + g, s = (group or "").lower(), (sig_alg or "").lower() + pq_kem = any(t in g for t in PQ_KEM_TOKENS) + classical_sig = s.startswith(CLASSICAL_SIG_PREFIXES) + if classical_sig: + return "phase0" if pq_kem else "baseline" + return "phase2" + + +# Primitive operations one TLS 1.3 handshake performs, per component. +# KEM framing: client generates the keyshare (keygen), server encapsulates, +# client decapsulates. ECDH framing (X25519 rows measure keygen+derive): both +# sides generate a keyshare and both sides derive, hence count 2 + 2. +KEM_OPS = (("keygen", 1, "client KEM keyshare generation"), + ("encaps", 1, "server encapsulation"), + ("decaps", 1, "client decapsulation")) +ECDH_OPS = (("keygen", 2, "client + server ECDH keyshare generation"), + ("derive", 2, "shared-secret derivation on both sides")) +SIG_OPS = (("sign", 1, "server CertificateVerify signature"), + ("verify", 2, "client verifies CertificateVerify + the CA signature " + "over the server certificate")) + +HANDSHAKE_SUM_NOTE = ( + "sum over the primitive operations one TLS 1.3 handshake performs with " + "this configuration, priced at the per-operation medians from this run's " + "KEM/sig sweep. Derived, not measured (" + DERIVED_NOTE + "); excludes " + "KDF/record-layer/X.509-parsing and all protocol overhead — the gap to " + "handshake_latency_ns.median is exactly that overhead. verify count 2 " + "assumes the client checks the CertificateVerify and the CA signature on " + "the leaf certificate (OpenSSL does not verify the trust anchor's " + "self-signature by default).") + + +def kem_group_components(group: str): + """Map a TLS group to its measured KEM-side components. + Returns ([(normalized_alg, ops_spec), ...], [missing_descriptions]).""" + g = norm_alg(group) + if g == "x25519": + return [("x25519", ECDH_OPS)], [] + if g in ("mlkem512", "mlkem768", "mlkem1024"): + return [(g, KEM_OPS)], [] + if g == "x25519mlkem768": + return [("x25519", ECDH_OPS), ("mlkem768", KEM_OPS)], [] + if g == "x448mlkem1024": + return [("x448", ECDH_OPS), ("mlkem1024", KEM_OPS)], [] + if g == "secp256r1mlkem768": + return [("secp256r1", ECDH_OPS), ("mlkem768", KEM_OPS)], [] + if g == "secp384r1mlkem1024": + return [("secp384r1", ECDH_OPS), ("mlkem1024", KEM_OPS)], [] + return [], [f"no primitive mapping defined for TLS group '{group}'"] + + +# ---- acceleration provenance (per-row, empirically determined) ------------- +# Two independent axes, recorded in the JSON so the companion document's +# classification cannot drift from reality: +# arithmetic — hand-written asm vs portable code (derived from build +# provenance: liboqs' *_aarch64 enable defines / the Rust provenance). +# symmetric — which primitive(s) the hot loop uses, where that +# implementation comes from, and whether it reaches hardware instructions +# on this CPU (combined with the run's cpu_features). +# Sources for liboqs rows were established by DIFFERENTIAL BUILDS on +# 2026-07-19/20 (liboqs 0.15.0 @97f6b86, Apple M3): toggling +# OQS_USE_{SHA2,AES,SHA3}_OPENSSL and measuring which rows move. Key results: +# SPHINCS+-SHA2 moved ~54% when SHA-2 left OpenSSL -> OQS SHA-2 layer (EVP) +# SLH-DSA moved 0% on every toggle -> bundles its own +# portable SHA-2/SHA-3 (verified in slh_dsa_c source) +# FrodoKEM-AES moved 8-13% when AES left OpenSSL -> OQS AES layer (EVP) +# ML-KEM moved 15-24% when SHA-3 moved to EVP -> OQS SHA-3 layer +# (liboqs-internal xkcp in the shipped config) +# ML-DSA/Falcon <=2% on the SHA-3 toggle (differential inconclusive); the +# pqclean fips202 shim routes them to the OQS SHA-3 layer +# (source inspection), their dominant SHAKE path is simply +# insensitive to the toggle. +# McEliece encaps/decaps flat on every toggle; keygen medians too +# unstable (rejection sampling) for the differential to +# resolve — SHAKE via the fips202 shim per source inspection. + +DIFF = "differential-build" +SRC_INSP = "source-inspection" + + +def _sym(primitive, source, hw, determined_by, note=None): + d = {"primitive": primitive, "source": source, + "hw_instructions": bool(hw), "determined_by": determined_by} + if note: + d["note"] = note + return d + + +def acceleration_for(row: dict, features: dict, opt_defines: str, + rust_prov: dict) -> dict: + impl = row.get("implementation") + n = norm_alg(row.get("alg")) + aes_hw = features.get("aes") + sha2_hw = features.get("sha2") + sha3_hw = features.get("sha3") + + if impl == "openssl": # classical EVP baselines + return {"arithmetic": {"path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)"}, + "symmetric": [], + "determined_by": SRC_INSP} + + if impl == "aws-lc-rs": # pricing rows for the rustls-awslc TLS group + return {"arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper — " + "measured to price rustls-awslc handshakes, NOT an " + "independent implementation"}, + "symmetric": [ + {"primitive": "internal", "source": "AWS-LC internal", + "hw_instructions": None, + "determined_by": "not separately characterised"}], + "determined_by": SRC_INSP} + + if impl == "rustcrypto": + arith = {"path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only"} + if n in ("x25519", "ed25519"): + arith["detail"] = "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + sym = [] + elif n.startswith("mlkem") or n.startswith("mldsa"): + sym = [_sym("sha3-shake", "rust keccak crate (cpufeatures runtime dispatch)", + sha3_hw, SRC_INSP, + "reaches ARMv8.2 SHA3 instructions only where the CPU has them " + "(Apple M-series yes, Cortex-A76 no)")] + elif "slhdsa" in n or "sha2" in n: + sym = [_sym("sha2", "rust sha2 crate (cpufeatures runtime dispatch)", + sha2_hw, SRC_INSP)] + else: + sym = [] + return {"arithmetic": arith, "symmetric": sym, "determined_by": SRC_INSP} + + # ---- liboqs rows -------------------------------------------------------- + defines = opt_defines or "" + + def asm_enabled(token): + return f"{token} 1" in defines + + arith = {"path": "portable-c"} + if n.startswith("mlkem"): + size = n.replace("mlkem", "") + if asm_enabled(f"OQS_ENABLE_KEM_ml_kem_{size}_aarch64"): + arith = {"path": "aarch64-asm", "detail": "mlkem-native aarch64 backend"} + sym = [_sym("sha3-shake", "OQS SHA-3 layer (liboqs-internal xkcp)", sha3_hw, + DIFF + " (+15-24% when redirected to OpenSSL EVP)")] + elif n.startswith("falcon"): + size = "512" if "512" in n else "1024" + if asm_enabled(f"OQS_ENABLE_SIG_falcon_{size}_aarch64"): + arith = {"path": "aarch64-asm", "detail": "falcon aarch64 backend"} + sym = [_sym("sha3-shake", "OQS SHA-3 layer (liboqs-internal xkcp)", sha3_hw, + SRC_INSP + " (fips202 shim; differential <=2% — minor SHAKE share)")] + elif n.startswith("mldsa"): + sym = [_sym("sha3-shake", "OQS SHA-3 layer (liboqs-internal xkcp)", sha3_hw, + SRC_INSP + " (fips202 shim; differential inconclusive at <=2%)")] + elif n.startswith("slhdsa"): + prim = "sha2" if "sha2" in n else "sha3-shake" + sym = [_sym(prim, "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + False, DIFF + " (0% on every toggle) + " + SRC_INSP)] + elif n.startswith("sphincs"): + prim = "sha2" if "sha2" in n else "sha3-shake" + src = "OQS SHA-2 layer (OpenSSL EVP)" if prim == "sha2" \ + else "OQS SHA-3 layer (liboqs-internal xkcp)" + hw = sha2_hw if prim == "sha2" else sha3_hw + det = DIFF + " (~54% slower with liboqs-internal SHA-2)" if prim == "sha2" else SRC_INSP + sym = [_sym(prim, src, hw, det)] + elif n.startswith("frodokem"): + sym = [_sym("aes", "OQS AES layer (OpenSSL EVP)", aes_hw, + DIFF + " (+8-13% with liboqs-internal AES)")] + if "shake" in n: + sym = [_sym("sha3-shake", "OQS SHA-3 layer (liboqs-internal xkcp)", sha3_hw, SRC_INSP)] + elif n.startswith("classicmceliece"): + sym = [_sym("sha3-shake", "fips202 shim -> OQS SHA-3 layer", sha3_hw, + SRC_INSP + " (differential flat on encaps/decaps; keygen medians " + "too unstable — rejection sampling — to resolve)")] + else: + sym = [] + return {"arithmetic": arith, "symmetric": sym, + "determined_by": "; ".join(sorted({s["determined_by"].split(" (")[0] for s in sym}) or [SRC_INSP])} + + +def annotate_acceleration(kem_rows, sig_rows, features, opt_defines, rust_prov): + for row in kem_rows + sig_rows: + if row.get("enabled"): + row["acceleration"] = acceleration_for(row, features or {}, + opt_defines, rust_prov or {}) + + +def cross_check_sizes(kem_rows: list, sig_rows: list, warnings: list) -> None: + """When the same algorithm is measured by more than one implementation + (liboqs vs rustcrypto), their reported sizes MUST agree on every field + they both carry — a mismatch means a bug or a spec disagreement, not a + benchmarking result. Reported loudly: warnings array + stderr.""" + for rows in (kem_rows, sig_rows): + by_alg = {} + for r in rows: + if r.get("enabled"): + by_alg.setdefault(norm_alg(r.get("alg")), []).append(r) + for group in by_alg.values(): + base = group[0] + bs = base.get("sizes") or {} + for other in group[1:]: + os_ = other.get("sizes") or {} + for key in sorted(set(bs) & set(os_)): + if bs[key] != os_[key]: + msg = (f"SIZE MISMATCH for {base['alg']} .{key}: " + f"{base.get('implementation')}={bs[key]} vs " + f"{other.get('implementation')}={os_[key]} — " + "bug or spec disagreement, NOT a benchmark result") + warnings.append(msg) + print(f"[assemble] {msg}", file=sys.stderr) + + +def annotate_tls(tls: dict, kem_rows: list, sig_rows: list) -> None: + """Stamp phase/implementation/sig_alg defaults and compute the + handshake_primitive_sum block for every enabled matrix cell.""" + # Sums must be priced from the primitives the handshake ACTUALLY executes: + # C-stack cells (openssl-native / oqs-provider) strictly from liboqs and + # openssl rows; rustls-awslc cells strictly from aws-lc-rs rows. A row + # from the wrong implementation (e.g. pure-Rust rustcrypto, ~2x slower + # than the asm paths) must NEVER price a cell, even when it is the only + # row with a matching algorithm name. + idx_c, idx_awslc = {}, {} + for row in kem_rows + sig_rows: + if not row.get("enabled"): + continue + key = (row.get("kind"), norm_alg(row.get("alg"))) + impl = row.get("implementation") + if impl in ("liboqs", "openssl"): + idx_c.setdefault(key, row) + elif impl == "aws-lc-rs": + idx_awslc.setdefault(key, row) + + def component_entries(kind, row, ops_spec, out, missing): + for op, count, role in ops_spec: + st = (row.get("operations") or {}).get(op) or {} + med = st.get("median") + if med is None: + missing.append( + f"operation '{op}' not measured for {kind} primitive " + f"'{row.get('alg')}'") + continue + out.append({ + "kind": kind, "alg": row.get("alg"), + "implementation": row.get("implementation"), + "operation": op, "count": count, + "median_ns_each": med, + "subtotal_ns": round(count * med, 2), + "role": role, + }) + + for cell in (tls.get("matrix") or []): + label = cell.get("label") or "" + sig_alg = cell.get("sig_alg") or \ + (label.split("+", 1)[1] if "+" in label else "") + cell["sig_alg"] = sig_alg + cell.setdefault("implementation", "oqs-provider") + if not cell.get("phase"): + cell["phase"] = infer_phase(cell.get("group"), sig_alg) + if not cell.get("enabled"): + continue + + if cell.get("implementation") == "rustls-awslc": + idx, stack = idx_awslc, "aws-lc-rs" + else: + idx, stack = idx_c, "liboqs/openssl" + + comps_spec, missing = kem_group_components(cell.get("group")) + components = [] + for alg_key, ops_spec in comps_spec: + row = idx.get(("kem", alg_key)) + if row is None: + missing.append( + f"KEM primitive matching '{alg_key}' not measured from the " + f"{stack} implementation in this run") + continue + component_entries("kem", row, ops_spec, components, missing) + srow = idx.get(("sig", norm_alg(sig_alg))) + if srow is None: + missing.append( + f"signature primitive matching '{sig_alg}' not measured from " + f"the {stack} implementation in this run") + else: + component_entries("sig", srow, SIG_OPS, components, missing) + + complete = not missing + cell["handshake_primitive_sum"] = { + "sum_of_medians_ns": + round(sum(c["subtotal_ns"] for c in components), 1) + if complete else None, + "complete": complete, + "components": components, + "missing": missing, + "note": HANDSHAKE_SUM_NOTE, + } + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--meta", required=True) + ap.add_argument("--lock", default="") + ap.add_argument("--features", default="") + ap.add_argument("--kemsig", default="") + ap.add_argument("--tls", default="") + ap.add_argument("--rust-provenance", default="", + help="JSON from pqb-rust --provenance (or an " + "available:false stub explaining why the rustcrypto " + "group did not run)") + ap.add_argument("--rust-tls-provenance", default="", + help="JSON from pqb-rust-tls --provenance (the " + "rustls-awslc TLS group)") + ap.add_argument("--thermal", default="") + ap.add_argument("--config", default="") + ap.add_argument("--out", required=True) + args = ap.parse_args() + + meta = parse_envfile(args.meta) + lock = parse_envfile(args.lock) + features = load_json(args.features) or {} + kemsig = [normalize_kemsig_row(r) for r in load_jsonl(args.kemsig)] + tls = load_json(args.tls) + thermal = parse_thermal(args.thermal) + + rust_toolchain = load_json(args.rust_provenance) or { + "available": False, "reason": "rust harness not run"} + rust_tls_toolchain = load_json(args.rust_tls_provenance) or { + "available": False, "reason": "rustls harness not run"} + + for row in kemsig: + if row.get("enabled"): + add_row_total(row) + kem_rows = [r for r in kemsig if r.get("kind") == "kem"] + sig_rows = [r for r in kemsig if r.get("kind") == "sig"] + annotate_acceleration(kem_rows, sig_rows, features, + lock.get("LIBOQS_OPT_DEFINES", ""), rust_toolchain) + if isinstance(tls, dict): + annotate_tls(tls, kem_rows, sig_rows) + + is_rpi = meta.get("IS_RPI") == "1" + governor = meta.get("GOVERNOR_AFTER") or meta.get("GOVERNOR_BEFORE") or "unknown" + pinned = meta.get("PINNED") == "1" + cflags_target = lock.get("CFLAGS_TARGET", "unknown") + + # ---- the anti-confusion gate ----------------------------------------- + baseline_reasons = [] + if not is_rpi: + baseline_reasons.append( + f"host is not a Raspberry Pi (model='{meta.get('RPI_MODEL','')}', os={meta.get('OS')})") + if governor != "performance": + baseline_reasons.append(f"CPU governor is '{governor}', not 'performance'") + if not pinned: + baseline_reasons.append("benchmark was not pinned to a dedicated core (no taskset)") + if cflags_target != "cortex-a76": + baseline_reasons.append(f"build flags targeted '{cflags_target}', not cortex-a76") + if thermal.get("throttling_detected"): + baseline_reasons.append("thermal throttling was detected during the run") + is_baseline_grade = len(baseline_reasons) == 0 + + warnings = [] + raw_warn = meta.get("WARNINGS", "") + if raw_warn: + warnings.extend([w for w in raw_warn.split("||") if w]) + if not is_baseline_grade: + warnings.append("NOT RPi5-baseline-grade: " + "; ".join(baseline_reasons)) + cross_check_sizes(kem_rows, sig_rows, warnings) + + result = { + "schema_version": SCHEMA_VERSION, + "tool_version": meta.get("TOOL_VERSION", "0.1.0"), + "generated_utc": meta.get("TS_END_UTC", ""), + "is_baseline_grade": is_baseline_grade, + "baseline_grade_reasons": baseline_reasons, + "host": { + "hostname": meta.get("HOSTNAME", ""), + "os": meta.get("OS", ""), + "os_pretty": meta.get("OS_PRETTY", ""), + "arch": meta.get("ARCH", ""), + "kernel": meta.get("KERNEL", ""), + "is_rpi": is_rpi, + "rpi_model": meta.get("RPI_MODEL", ""), + "cpu_brand": meta.get("CPU_BRAND", ""), + "ncpu": to_int(meta.get("NCPU")), + "ram_bytes": to_int(meta.get("RAM_BYTES")), + }, + "cpu_features": features, + "run": { + "timestamp_start_utc": meta.get("TS_START_UTC", ""), + "timestamp_end_utc": meta.get("TS_END_UTC", ""), + "duration_s": to_int(meta.get("DURATION_S")), + "governor_requested": meta.get("GOVERNOR_REQUESTED", ""), + "governor_before": meta.get("GOVERNOR_BEFORE", ""), + "governor_after": meta.get("GOVERNOR_AFTER", ""), + "bench_core": to_int(meta.get("BENCH_CORE")), + "pinned": pinned, + "taskset_cmd": meta.get("TASKSET_CMD", ""), + # Per-op sizing. In auto-calibration mode warmup_iters/timed_iters are + # chosen per operation (see each entry under kem/sig "operations"); + # the run-level target/min/max below describe how they were derived. + "calibration_mode": meta.get("CALIB_MODE", "auto"), + "target_time_ms": to_int(meta.get("TARGET_TIME_MS")), + "min_samples": to_int(meta.get("MIN_SAMPLES")), + "max_iters": to_int(meta.get("MAX_ITERS")), + "warmup_iters": to_int(meta.get("WARMUP")), + "timed_iters": to_int(meta.get("ITERS")), + "repetitions": to_int(meta.get("REPS")), + "cycles_mode": meta.get("CYCLES_MODE", ""), + "cycles_available": meta.get("CYCLES_AVAILABLE") == "1", + "cycles_reason": meta.get("CYCLES_REASON", ""), + }, + "toolchain": { + "cc_version": lock.get("CC_VERSION", ""), + "bench_cflags": lock.get("BENCH_CFLAGS", ""), + "cflags_target": cflags_target, + "liboqs_ref": lock.get("LIBOQS_REF", ""), + "liboqs_commit": lock.get("LIBOQS_COMMIT", ""), + "liboqs_opt_defines": lock.get("LIBOQS_OPT_DEFINES", ""), + "openssl": lock.get("OPENSSL_COMMIT", ""), + "oqsprovider_ref": lock.get("OQSPROVIDER_REF", ""), + "oqsprovider_commit": lock.get("OQSPROVIDER_COMMIT", ""), + "rust": rust_toolchain, + "rust_tls": rust_tls_toolchain, + }, + "thermal_trace": thermal, + "warnings": warnings, + "kem": kem_rows, + "sig": sig_rows, + "tls": tls, + } + + os.makedirs(os.path.dirname(args.out) or ".", exist_ok=True) + with open(args.out, "w") as f: + json.dump(result, f, indent=2) + print(args.out) + + +if __name__ == "__main__": + main() diff --git a/tools/benchmarks/pqc/bench/lib/list_algs.py b/tools/benchmarks/pqc/bench/lib/list_algs.py new file mode 100644 index 0000000..5dcbc63 --- /dev/null +++ b/tools/benchmarks/pqc/bench/lib/list_algs.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""list_algs.py — expand config.yaml into shell-consumable lines for run.sh. + +Modes: + measurement -> KEY=VALUE lines (auto-calib: target/min_samples/max_iters/ + reps/cycles_mode; plus warmup/iters fixed-count fallback) + kemsig -> one "kindalgis_classical" line per algorithm, + baselines first (so charts always have the reference point) + tls -> emits the TLS matrix as JSON on one line + +Uses the dependency-free miniyaml parser so no PyYAML is required. +""" +import os +import sys +import json + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import miniyaml # noqa: E402 + + +def main(): + mode = sys.argv[1] if len(sys.argv) > 1 else "kemsig" + cfg_path = sys.argv[2] if len(sys.argv) > 2 else "config.yaml" + cfg = miniyaml.load_file(cfg_path) + + if mode == "measurement": + m = cfg.get("measurement", {}) or {} + # auto-calibration knobs (default path) + print(f"TARGET_TIME_MS={m.get('target_time_ms', 250)}") + print(f"MIN_SAMPLES={m.get('min_samples', 30)}") + print(f"MAX_ITERS={m.get('max_iters', 20000)}") + print(f"REPS={m.get('repetitions', 5)}") + print(f"CYCLES_MODE={m.get('cycles_mode', 'auto')}") + # fixed-count fallback knobs (used only with ./run.sh --iters) + print(f"WARMUP={m.get('warmup_iters', 1000)}") + print(f"ITERS={m.get('timed_iters', 10000)}") + + elif mode == "kemsig": + for kind in ("kem", "sig"): + section = cfg.get(kind, {}) or {} + for grp in ("baseline", "candidates"): + for item in (section.get(grp) or []): + if isinstance(item, dict): + name = item.get("name") + classical = "1" if item.get("classical") else "0" + else: + name, classical = item, "0" + if name: + print(f"{kind}\t{name}\t{classical}") + + elif mode == "tls": + print(json.dumps(cfg.get("tls", {}))) + + else: + sys.exit(f"unknown mode: {mode}") + + +if __name__ == "__main__": + main() diff --git a/tools/benchmarks/pqc/bench/lib/miniyaml.py b/tools/benchmarks/pqc/bench/lib/miniyaml.py new file mode 100644 index 0000000..03ee6be --- /dev/null +++ b/tools/benchmarks/pqc/bench/lib/miniyaml.py @@ -0,0 +1,151 @@ +"""miniyaml — a dependency-free parser for the restricted YAML subset used by +config.yaml. + +We deliberately avoid a PyYAML runtime dependency so the core pipeline runs on a +stock Python 3 (the RPi5 / Mac smoke box both have only stdlib by default). + +Supported subset (sufficient for config.yaml): + - nested mappings via indentation (2 spaces per level by convention) + - lists of scalars: "- value" + - lists of mappings: "- key: value" then indented "key: value" + - scalars: int, float, bool (true/false), null/~, quoted or bare strings + - "# comment" to end of line (outside quotes) + +It is NOT a general YAML implementation. If a user needs full YAML they can +install PyYAML and set PQB_USE_PYYAML=1. +""" +from __future__ import annotations +import os +import re + + +def _scalar(tok: str): + s = tok.strip() + if s == "" or s in ("~", "null", "Null", "NULL"): + return None + if (s[0] == '"' and s[-1] == '"') or (s[0] == "'" and s[-1] == "'"): + return s[1:-1] + low = s.lower() + if low in ("true", "yes"): + return True + if low in ("false", "no"): + return False + if re.fullmatch(r"[+-]?\d+", s): + return int(s) + if re.fullmatch(r"[+-]?\d*\.\d+([eE][+-]?\d+)?", s): + return float(s) + return s + + +def _strip_comment(line: str) -> str: + out, q = [], None + for ch in line: + if q: + out.append(ch) + if ch == q: + q = None + elif ch in ("'", '"'): + q = ch + out.append(ch) + elif ch == "#": + break + else: + out.append(ch) + return "".join(out).rstrip() + + +def _indent(line: str) -> int: + return len(line) - len(line.lstrip(" ")) + + +def loads(text: str): + # Tokenize into (indent, content) ignoring blank/comment-only lines. + lines = [] + for raw in text.splitlines(): + c = _strip_comment(raw) + if c.strip() == "": + continue + lines.append((_indent(c), c.strip(), c)) + pos = [0] + + def parse_block(min_indent: int): + if pos[0] >= len(lines): + return None + indent = lines[pos[0]][0] + if lines[pos[0]][1].startswith("- "): + return parse_list(indent) + return parse_map(indent) + + def parse_map(indent: int): + obj = {} + while pos[0] < len(lines): + ind, stripped, _ = lines[pos[0]] + if ind < indent or stripped.startswith("- "): + break + if ind > indent: # malformed; skip + pos[0] += 1 + continue + m = re.match(r"^([^:]+):\s*(.*)$", stripped) + if not m: + pos[0] += 1 + continue + key, val = m.group(1).strip(), m.group(2) + pos[0] += 1 + if val == "": + # nested block or empty + if pos[0] < len(lines) and lines[pos[0]][0] > indent: + obj[key] = parse_block(indent + 1) + else: + obj[key] = None + else: + obj[key] = _scalar(val) + return obj + + def parse_list(indent: int): + arr = [] + while pos[0] < len(lines): + ind, stripped, _ = lines[pos[0]] + if ind < indent or not stripped.startswith("- "): + break + if ind > indent: + break + item = stripped[2:].strip() + pos[0] += 1 + if ":" in item and not (item[0] in "'\""): + # list of mappings — first pair is inline, rest are indented deeper + sub = {} + m = re.match(r"^([^:]+):\s*(.*)$", item) + key, val = m.group(1).strip(), m.group(2) + sub[key] = _scalar(val) if val != "" else None + child_indent = indent + 2 + while pos[0] < len(lines) and lines[pos[0]][0] >= child_indent \ + and not lines[pos[0]][1].startswith("- "): + ind2, strip2, _ = lines[pos[0]] + m2 = re.match(r"^([^:]+):\s*(.*)$", strip2) + if not m2: + pos[0] += 1 + continue + k2, v2 = m2.group(1).strip(), m2.group(2) + pos[0] += 1 + sub[k2] = _scalar(v2) if v2 != "" else None + arr.append(sub) + else: + arr.append(_scalar(item)) + return arr + + return parse_block(0) or {} + + +def load_file(path: str): + if os.environ.get("PQB_USE_PYYAML") == "1": + import yaml # type: ignore + with open(path) as f: + return yaml.safe_load(f) + with open(path) as f: + return loads(f.read()) + + +if __name__ == "__main__": + import json + import sys + print(json.dumps(load_file(sys.argv[1]), indent=2)) diff --git a/tools/benchmarks/pqc/bench/rust-tls/Cargo.lock b/tools/benchmarks/pqc/bench/rust-tls/Cargo.lock new file mode 100644 index 0000000..e501e66 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust-tls/Cargo.lock @@ -0,0 +1,325 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aws-lc-rs" +version = "1.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" +dependencies = [ + "aws-lc-sys", + "untrusted 0.7.1", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", + "pkg-config", +] + +[[package]] +name = "cc" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "pqb-rust-tls" +version = "0.1.0" +dependencies = [ + "aws-lc-rs", + "libc", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "rustls-post-quantum", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted 0.9.0", + "windows-sys", +] + +[[package]] +name = "rustls" +version = "0.23.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-post-quantum" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da3cd9229bac4fae1f589c8f875b3c891a058ddaa26eb3bde16b5e43dc174ce" +dependencies = [ + "aws-lc-rs", + "rustls", + "rustls-webpki", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" diff --git a/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml b/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml new file mode 100644 index 0000000..74fdec7 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "pqb-rust-tls" +version = "0.1.0" +edition = "2021" +description = "pq-bench-rpi5 rustls + aws-lc-rs TLS 1.3 handshake harness — mirrors bench/tls/bench_tls.c, emitting the same schema-2.0.0 rows with implementation:\"rustls-awslc\"" +publish = false + +[dependencies] +rustls = { version = "=0.23.42", default-features = false, features = ["aws_lc_rs", "std", "prefer-post-quantum"] } +rustls-post-quantum = { version = "=0.2.4", features = ["aws-lc-rs-unstable"] } +rustls-pemfile = "2" +rustls-pki-types = "1" +# Direct dep for the aws-lc-rs PRICING rows (implementation:"aws-lc-rs"): +# the primitives the rustls handshakes actually execute. NOT an independent +# implementation (wraps the AWS-LC C library). "unstable" gates ML-DSA. +aws-lc-rs = { version = "=1.17.3", features = ["unstable"] } +libc = "0.2" + +[profile.release] +opt-level = 3 +codegen-units = 1 +lto = false diff --git a/tools/benchmarks/pqc/bench/rust-tls/build.rs b/tools/benchmarks/pqc/bench/rust-tls/build.rs new file mode 100644 index 0000000..d789a5d --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust-tls/build.rs @@ -0,0 +1,53 @@ +// Capture build-time provenance for --provenance (same pattern as bench/rust). +use std::env; +use std::process::Command; + +fn main() { + let set = |k: &str, v: &str| println!("cargo:rustc-env={k}={v}"); + + set("PQB_TARGET", &env::var("TARGET").unwrap_or_default()); + set("PQB_PROFILE", &env::var("PROFILE").unwrap_or_default()); + set("PQB_OPT_LEVEL", &env::var("OPT_LEVEL").unwrap_or_default()); + let rustflags = env::var("CARGO_ENCODED_RUSTFLAGS") + .unwrap_or_default() + .replace('\u{1f}', " "); + set("PQB_RUSTFLAGS", &rustflags); + + let rustc = env::var("RUSTC").unwrap_or_else(|_| "rustc".into()); + let ver = Command::new(&rustc) + .arg("-V") + .output() + .ok() + .map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string()) + .unwrap_or_default(); + set("PQB_RUSTC_VERSION", &ver); + + let lock = std::fs::read_to_string( + std::path::Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("Cargo.lock"), + ) + .unwrap_or_default(); + for want in ["rustls", "rustls-post-quantum", "aws-lc-rs", "aws-lc-sys"] { + let mut version = String::from("unknown"); + let mut in_pkg = false; + for line in lock.lines() { + let line = line.trim(); + if line == "[[package]]" { + in_pkg = false; + } else if line == format!("name = \"{want}\"") { + in_pkg = true; + } else if in_pkg && line.starts_with("version = ") { + version = line + .trim_start_matches("version = ") + .trim_matches('"') + .to_string(); + break; + } + } + set( + &format!("PQB_CRATE_{}", want.replace('-', "_").to_uppercase()), + &version, + ); + } + println!("cargo:rerun-if-changed=Cargo.lock"); + println!("cargo:rerun-if-env-changed=CARGO_ENCODED_RUSTFLAGS"); +} diff --git a/tools/benchmarks/pqc/bench/rust-tls/src/bench.rs b/tools/benchmarks/pqc/bench/rust-tls/src/bench.rs new file mode 100644 index 0000000..67ee098 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust-tls/src/bench.rs @@ -0,0 +1,269 @@ +//! Measurement engine — VERBATIM COPY of bench/rust/src/bench.rs (the +//! line-for-line replication of bench/kem_sig/bench_pq.c timing, calibration +//! and statistics). Kept in sync by hand; any change there must be mirrored +//! here. See that file for the C line references. + +use std::process::exit; + +/// bench_pq.c now_ns() (:44-48): clock_gettime(CLOCK_MONOTONIC). We call the +/// same clock via libc — std::time::Instant would use mach_absolute_time on +/// macOS, a different timebase than the C harness. +pub fn now_ns() -> u64 { + let mut ts = libc::timespec { + tv_sec: 0, + tv_nsec: 0, + }; + unsafe { + libc::clock_gettime(libc::CLOCK_MONOTONIC, &mut ts); + } + ts.tv_sec as u64 * 1_000_000_000 + ts.tv_nsec as u64 +} + +/// bench_pq.c die() (:303-307): a broken build must NEVER silently emit +/// timing numbers. stderr + exit(3), no stdout. +pub fn die(alg: &str, what: &str) -> ! { + eprintln!("[pqb-rust] FATAL: {alg}: {what} — aborting so no numbers are emitted"); + exit(3); +} + +/// bench_pq.c bench_cfg (:163-170). +pub struct BenchCfg { + pub fixed_iters: u64, // >0 => fixed-count mode; 0 => auto-calibrate + pub target_ns: u64, + pub min_samples: u64, + pub max_iters: u64, + pub warmup: u64, + pub reps: u64, +} + +/// bench_pq.c measure_out (:172-182). +pub struct MeasureOut { + pub all: Vec, + pub per_rep_median: Vec, // capped at 64, like the C array + pub timed_iters: u64, + pub warmup_iters: u64, + pub reps: u64, + pub calibrated: bool, + pub est_ns: f64, +} + +/// bench_pq.c pct_sorted() (:100-109): percentile with linear interpolation +/// on an already-sorted slice. +fn pct_sorted(s: &[u64], p: f64) -> f64 { + let n = s.len(); + if n == 0 { + return 0.0; + } + if n == 1 { + return s[0] as f64; + } + let idx = p * (n - 1) as f64; + let lo = idx as usize; + let frac = idx - lo as f64; + if lo + 1 >= n { + return s[n - 1] as f64; + } + s[lo] as f64 + frac * (s[lo + 1] as f64 - s[lo] as f64) +} + +/// bench_pq.c stats_t + compute_stats() (:89-146). Consumes the sample vec +/// (sorts in place, like the C qsort). +pub struct Stats { + pub median: f64, + pub mad: f64, + pub iqr: f64, + pub q1: f64, + pub q3: f64, + pub min: f64, + pub max: f64, + pub mean: f64, + pub stddev: f64, + pub ops_per_sec: f64, + pub n: u64, +} + +pub fn compute_stats(samples: &mut Vec) -> Stats { + let n = samples.len(); + if n == 0 { + return Stats { + median: 0.0, + mad: 0.0, + iqr: 0.0, + q1: 0.0, + q3: 0.0, + min: 0.0, + max: 0.0, + mean: 0.0, + stddev: 0.0, + ops_per_sec: 0.0, + n: 0, + }; + } + samples.sort_unstable(); + let median = pct_sorted(samples, 0.5); + let q1 = pct_sorted(samples, 0.25); + let q3 = pct_sorted(samples, 0.75); + let sum: f64 = samples.iter().map(|&x| x as f64).sum(); + let mean = sum / n as f64; + let ss: f64 = samples + .iter() + .map(|&x| { + let d = x as f64 - mean; + d * d + }) + .sum(); + let stddev = if n > 1 { + (ss / (n - 1) as f64).sqrt() + } else { + 0.0 + }; + // MAD = median(|x - median|). The C code truncates each deviation to + // uint64_t before sorting (:134-142); replicate that cast exactly. + let mut dev: Vec = samples + .iter() + .map(|&x| { + let d = x as f64 - median; + (if d < 0.0 { -d } else { d }) as u64 + }) + .collect(); + dev.sort_unstable(); + let mad = pct_sorted(&dev, 0.5); + Stats { + median, + mad, + iqr: q3 - q1, + q1, + q3, + min: samples[0] as f64, + max: samples[n - 1] as f64, + mean, + stddev, + ops_per_sec: if median > 0.0 { 1e9 / median } else { 0.0 }, + n: n as u64, + } +} + +/// bench_pq.c calibrate_op() (:209-250): doubling calibration (which also +/// warms caches) -> per-op cost estimate -> timed count clamped to +/// [min_samples, max_iters], per-rep re-warm ~20% of the timed budget. +fn calibrate_op( + f: &mut dyn FnMut() -> Result<(), ()>, + cfg: &BenchCfg, +) -> Result<(u64, u64, f64, bool), ()> { + if cfg.fixed_iters > 0 { + return Ok((cfg.fixed_iters, cfg.warmup, 0.0, false)); + } + const CALIB_BUDGET_NS: u64 = 30_000_000; // 30 ms, same as C (:221) + let (mut cops, mut cel, mut batch) = (0u64, 0u64, 1u64); + while cel < CALIB_BUDGET_NS && cops < cfg.max_iters { + let t0 = now_ns(); + for _ in 0..batch { + f()?; + } + cel += now_ns() - t0; + cops += batch; + batch *= 2; + } + let mut est_ns = if cops > 0 { + cel as f64 / cops as f64 + } else { + 1.0 + }; + if est_ns < 1.0 { + est_ns = 1.0; + } + let want = cfg.target_ns as f64 / est_ns; + let mut n = (want + 0.5) as u64; + n = n.clamp(cfg.min_samples, cfg.max_iters); + let w = (cfg.target_ns as f64 * 0.2) / est_ns; + let mut warm = (w + 0.5) as u64; + if warm < 1 { + warm = 1; + } + if warm > cfg.max_iters { + warm = cfg.max_iters; + } + Ok((n, warm, est_ns, true)) +} + +/// bench_pq.c measure_op() (:253-294): per-rep re-warm, then each op timed +/// individually; per-rep medians recorded (up to 64), all samples pooled. +pub fn measure_op(f: &mut dyn FnMut() -> Result<(), ()>, cfg: &BenchCfg) -> Result { + let (iters, warmup, est_ns, calibrated) = calibrate_op(f, cfg)?; + let mut out = MeasureOut { + all: Vec::with_capacity((iters * cfg.reps) as usize), + per_rep_median: Vec::new(), + timed_iters: iters, + warmup_iters: warmup, + reps: cfg.reps, + calibrated, + est_ns, + }; + let mut rep_buf: Vec = Vec::with_capacity(iters as usize); + for _ in 0..cfg.reps { + for _ in 0..warmup { + f()?; + } + rep_buf.clear(); + for _ in 0..iters { + let t0 = now_ns(); + let rc = f(); + let dt = now_ns() - t0; + rc?; + rep_buf.push(dt); + out.all.push(dt); + } + let mut copy = rep_buf.clone(); + copy.sort_unstable(); + if out.per_rep_median.len() < 64 { + out.per_rep_median.push(pct_sorted(©, 0.5)); + } + } + Ok(out) +} + +/// measure_op wrapper mirroring must_measure() (:311-315). +pub fn must_measure( + alg: &str, + op: &str, + f: &mut dyn FnMut() -> Result<(), ()>, + cfg: &BenchCfg, +) -> MeasureOut { + match measure_op(f, cfg) { + Ok(m) => m, + Err(()) => die(alg, op), + } +} + +/// bench_pq.c print_stats_json() (:184-203) — identical field set and +/// formatting (%.2f) so rows are diffable against liboqs rows. +pub fn stats_json(name: &str, st: &Stats, m: &MeasureOut) -> String { + let mut s = format!("\"{name}\":{{"); + s += &format!( + "\"unit\":\"ns\",\"warmup_iters\":{},\"timed_iters\":{},\"repetitions\":{},", + m.warmup_iters, m.timed_iters, m.reps + ); + s += &format!("\"calibrated\":{},", m.calibrated); + if m.calibrated { + s += &format!("\"calib_est_ns\":{:.2},", m.est_ns); + } + s += &format!("\"samples\":{},", st.n); + s += &format!( + "\"median\":{:.2},\"mad\":{:.2},\"iqr\":{:.2},\"q1\":{:.2},\"q3\":{:.2},", + st.median, st.mad, st.iqr, st.q1, st.q3 + ); + s += &format!( + "\"min\":{:.2},\"max\":{:.2},\"mean\":{:.2},\"stddev\":{:.2},", + st.min, st.max, st.mean, st.stddev + ); + s += &format!("\"ops_per_sec\":{:.2},", st.ops_per_sec); + s += "\"per_rep_median\":["; + for (i, v) in m.per_rep_median.iter().enumerate() { + if i > 0 { + s += ","; + } + s += &format!("{v:.2}"); + } + s += "]}"; + s +} diff --git a/tools/benchmarks/pqc/bench/rust-tls/src/main.rs b/tools/benchmarks/pqc/bench/rust-tls/src/main.rs new file mode 100644 index 0000000..f16d743 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust-tls/src/main.rs @@ -0,0 +1,481 @@ +//! pqb-rust-tls — rustls + aws-lc-rs TLS 1.3 handshake harness. +//! +//! Deliberately mirrors bench/tls/bench_tls.c: full TLS 1.3 handshakes +//! entirely in-process over in-memory buffers (no sockets), the same clock +//! (clock_gettime(CLOCK_MONOTONIC)), the same fixed connections+warmup loop, +//! the same statistics (median/p95/min/max/mean/sample-stddev, hs/sec), the +//! same bytes-on-wire and first-flight ClientHello accounting, and the same +//! row shape — with implementation:"rustls-awslc". +//! +//! Caveat recorded here and in the README: rustls-vs-OpenSSL is two protocol +//! implementations AND two crypto backends (aws-lc-rs vs OpenSSL native); +//! this comparison cannot separate those variables, and it is NOT a +//! language comparison. +//! +//! Phase-2 rows ride UNSTABLE cargo features (rustls-post-quantum's +//! aws-lc-rs-unstable -> aws-lc-rs "unstable" ML-DSA); such rows carry +//! "unstable_features": true. + +mod bench; +mod primitives; + +use std::fmt::Write as _; +use std::process::exit; +use std::sync::Arc; + +use rustls::crypto::CryptoProvider; +use rustls::pki_types::{CertificateDer, PrivateKeyDer, ServerName}; +use rustls::{ClientConfig, ClientConnection, RootCertStore, ServerConfig, ServerConnection}; + +const TYPICAL_MSS: usize = 1400; // same fragmentation note threshold as C + +/// bench_tls.c now_ns(): clock_gettime(CLOCK_MONOTONIC) via libc (same clock). +fn now_ns() -> u64 { + let mut ts = libc::timespec { + tv_sec: 0, + tv_nsec: 0, + }; + unsafe { + libc::clock_gettime(libc::CLOCK_MONOTONIC, &mut ts); + } + ts.tv_sec as u64 * 1_000_000_000 + ts.tv_nsec as u64 +} + +/// bench_tls.c pct(): percentile with linear interpolation on sorted samples. +fn pct(s: &[u64], p: f64) -> f64 { + let n = s.len(); + if n == 0 { + return 0.0; + } + if n == 1 { + return s[0] as f64; + } + let idx = p * (n - 1) as f64; + let lo = idx as usize; + let f = idx - lo as f64; + if lo + 1 >= n { + return s[n - 1] as f64; + } + s[lo] as f64 + f * (s[lo + 1] as f64 - s[lo] as f64) +} + +struct Cell<'a> { + label: &'a str, + group: &'a str, + sig_alg: &'a str, + phase: &'a str, + unstable: bool, +} + +fn disabled_row(c: &Cell, reason: &str) { + println!( + "{{\"label\":\"{}\",\"group\":\"{}\",\"sig_alg\":\"{}\",\"phase\":\"{}\",\ + \"implementation\":\"rustls-awslc\",\"unstable_features\":{},\"enabled\":false,\ + \"have_oqs_provider\":false,\"reason\":\"{}\"}}", + c.label, c.group, c.sig_alg, c.phase, c.unstable, reason + ); +} + +/// Map a group name (native-OpenSSL spelling, case-insensitive) to the rustls +/// aws-lc-rs kx group. None => not supported by this stack (a finding, emitted +/// as an enabled:false row, never papered over). +fn kx_for(name: &str) -> Option<&'static dyn rustls::crypto::SupportedKxGroup> { + use rustls::crypto::aws_lc_rs::kx_group as kx; + match name.to_lowercase().replace(['-', '_'], "").as_str() { + "x25519" => Some(kx::X25519), + "secp256r1" => Some(kx::SECP256R1), + "x25519mlkem768" => Some(kx::X25519MLKEM768), + "secp256r1mlkem768" => Some(kx::SECP256R1MLKEM768), + "mlkem768" => Some(kx::MLKEM768), + "mlkem1024" => Some(kx::MLKEM1024), + _ => None, + } +} + +fn load_pem_certs(path: &str) -> Result>, String> { + let data = std::fs::read(path).map_err(|e| format!("read {path}: {e}"))?; + rustls_pemfile::certs(&mut &data[..]) + .collect::, _>>() + .map_err(|e| format!("parse certs {path}: {e}")) +} + +fn load_pem_key(path: &str) -> Result, String> { + let data = std::fs::read(path).map_err(|e| format!("read {path}: {e}"))?; + rustls_pemfile::private_key(&mut &data[..]) + .map_err(|e| format!("parse key {path}: {e}"))? + .ok_or_else(|| format!("no private key in {path}")) +} + +/// One full handshake, mirroring bench_tls.c one_handshake(): connection +/// construction inside the timed region, bytes shuttled through in-memory +/// buffers, first client flight recorded as the ClientHello size. +fn one_handshake( + cc: &Arc, + sc: &Arc, + c2s: &mut usize, + s2c: &mut usize, + chello: &mut usize, +) -> Result<(), ()> { + let name = ServerName::try_from("localhost").map_err(|_| ())?; + let mut cli = ClientConnection::new(cc.clone(), name).map_err(|_| ())?; + let mut srv = ServerConnection::new(sc.clone()).map_err(|_| ())?; + *c2s = 0; + *s2c = 0; + *chello = 0; + let mut first_flight = true; + for i in 0..64 { + let mut buf: Vec = Vec::new(); + while cli.wants_write() { + cli.write_tls(&mut buf).map_err(|_| ())?; + } + if first_flight && !buf.is_empty() { + *chello = buf.len(); + first_flight = false; + } + *c2s += buf.len(); + let mut rd = &buf[..]; + while !rd.is_empty() { + if srv.read_tls(&mut rd).map_err(|_| ())? == 0 { + break; + } + } + srv.process_new_packets().map_err(|_| ())?; + + let mut sbuf: Vec = Vec::new(); + while srv.wants_write() { + srv.write_tls(&mut sbuf).map_err(|_| ())?; + } + *s2c += sbuf.len(); + let mut rd2 = &sbuf[..]; + while !rd2.is_empty() { + if cli.read_tls(&mut rd2).map_err(|_| ())? == 0 { + break; + } + } + cli.process_new_packets().map_err(|_| ())?; + + if !cli.is_handshaking() && !srv.is_handshaking() { + return Ok(()); + } + if buf.is_empty() && sbuf.is_empty() && i > 4 { + return Err(()); // both stalled with nothing to transfer + } + } + Err(()) +} + +fn provenance() { + println!( + "{{\"available\":true,\"rustc_version\":\"{}\",\"target\":\"{}\",\ + \"profile\":\"{}\",\"opt_level\":\"{}\",\"codegen_units\":1,\"lto\":false,\ + \"rustflags\":\"{}\",\ + \"crate_versions\":{{\"rustls\":\"{}\",\"rustls-post-quantum\":\"{}\",\"aws-lc-rs\":\"{}\",\"aws-lc-sys\":\"{}\"}},\ + \"unstable_features\":[\"rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)\"],\ + \"note\":\"rustls-vs-OpenSSL compares two protocol implementations AND two \ +crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are \ +not separable from these rows and this is not a language comparison. \ +aws-lc-rs wraps the AWS-LC C library - this TLS group makes no \ +pure-Rust/independence claim (unlike bench/rust).\"}}", + env!("PQB_RUSTC_VERSION"), + env!("PQB_TARGET"), + env!("PQB_PROFILE"), + env!("PQB_OPT_LEVEL"), + env!("PQB_RUSTFLAGS"), + env!("PQB_CRATE_RUSTLS"), + env!("PQB_CRATE_RUSTLS_POST_QUANTUM"), + env!("PQB_CRATE_AWS_LC_RS"), + env!("PQB_CRATE_AWS_LC_SYS"), + ); +} + +fn main() { + let args: Vec = std::env::args().collect(); + let (mut group, mut ca, mut cert, mut key, mut label) = ( + String::from("X25519"), + String::new(), + String::new(), + String::new(), + String::new(), + ); + let (mut phase, mut sig_alg) = (String::new(), String::new()); + let (mut connections, mut warmup) = (1000u64, 20u64); + // primitive mode (aws-lc-rs pricing rows): --kind/--alg + bench_pq sizing + let (mut kind, mut alg) = (String::new(), String::new()); + let (mut p_warmup, mut p_iters, mut p_reps) = (1000u64, 0u64, 5u64); + let (mut target_time_ms, mut min_samples, mut max_iters) = (250u64, 30u64, 20000u64); + let mut i = 1; + while i < args.len() { + let need = |i: usize| -> &str { + if i + 1 < args.len() { + &args[i + 1] + } else { + eprintln!("missing value for {}", args[i]); + exit(2); + } + }; + match args[i].as_str() { + "--provenance" => { + provenance(); + return; + } + "--list-primitives" => { + for (k, a) in primitives::PRIMS { + println!("{k}\t{a}"); + } + return; + } + "--kind" => { + kind = need(i).into(); + i += 1; + } + "--alg" => { + alg = need(i).into(); + i += 1; + } + "--iters" => { + p_iters = need(i).parse().unwrap_or(0); + i += 1; + } + "--reps" => { + p_reps = need(i).parse().unwrap_or(5); + i += 1; + } + "--target-time-ms" => { + target_time_ms = need(i).parse().unwrap_or(250); + i += 1; + } + "--min-samples" => { + min_samples = need(i).parse().unwrap_or(30); + i += 1; + } + "--max-iters" => { + max_iters = need(i).parse().unwrap_or(20000); + i += 1; + } + "--group" => { + group = need(i).into(); + i += 1; + } + "--ca" => { + ca = need(i).into(); + i += 1; + } + "--cert" => { + cert = need(i).into(); + i += 1; + } + "--key" => { + key = need(i).into(); + i += 1; + } + "--connections" => { + connections = need(i).parse().unwrap_or(1000); + i += 1; + } + "--warmup" => { + let v: u64 = need(i).parse().unwrap_or(20); + warmup = v; + p_warmup = v; + i += 1; + } + "--label" => { + label = need(i).into(); + i += 1; + } + "--phase" => { + phase = need(i).into(); + i += 1; + } + "--sig-alg" => { + sig_alg = need(i).into(); + i += 1; + } + "--implementation" => { + i += 1; // accepted for CLI parity; always rustls-awslc + } + other => { + eprintln!("bad arg {other}"); + exit(2); + } + } + i += 1; + } + // primitive mode: aws-lc-rs pricing rows, same engine as bench_pq + if !kind.is_empty() || !alg.is_empty() { + if kind.is_empty() || alg.is_empty() { + eprintln!("--kind and --alg must be given together"); + exit(2); + } + let cfg = bench::BenchCfg { + fixed_iters: p_iters, + target_ns: target_time_ms * 1_000_000, + min_samples: min_samples.max(1), + max_iters: max_iters.max(min_samples.max(1)), + warmup: p_warmup, + reps: p_reps.max(1), + }; + exit(primitives::run(&kind, &alg, &cfg)); + } + if cert.is_empty() || key.is_empty() { + eprintln!("--cert and --key required"); + exit(2); + } + // phase-2 (ML-DSA) rows ride the unstable aws-lc-rs path + let sl = sig_alg.to_lowercase(); + let unstable = sl.contains("dsa") && !sl.contains("ed25519"); + let cell = Cell { + label: &label, + group: &group, + sig_alg: &sig_alg, + phase: &phase, + unstable, + }; + + let Some(kx) = kx_for(&group) else { + disabled_row(&cell, "kex group not supported by rustls 0.23 / aws-lc-rs"); + return; + }; + + // provider: rustls-post-quantum's aws-lc-rs provider (adds ML-DSA + // signing/verification behind the unstable feature), restricted to + // exactly the one kx group under test. + let base = rustls_post_quantum::provider(); + let provider = Arc::new(CryptoProvider { + kx_groups: vec![kx], + ..base + }); + + let (chain, key_der, ca_ders) = + match (load_pem_certs(&cert), load_pem_key(&key), load_pem_certs(&ca)) { + (Ok(c), Ok(k), Ok(a)) if !c.is_empty() && !a.is_empty() => (c, k, a), + (c, k, a) => { + let mut why = String::new(); + for e in [c.err(), a.err()].into_iter().flatten() { + why += &e; + } + if let Err(e) = k { + why += &e; + } + disabled_row(&cell, &format!("cert-load-failed {}", why.replace('"', "'"))); + return; + } + }; + + let mut roots = RootCertStore::empty(); + for der in ca_ders { + if roots.add(der).is_err() { + disabled_row(&cell, "ca-load-failed"); + return; + } + } + + // NB: rustls clients RESUME by default (in-memory ticket store on the + // ClientConfig) — with a shared config the warmup handshakes would seed + // tickets and every timed handshake would be a PSK resumption with no + // certificate at all (caught via bytes_on_wire: phase2 rows measured + // byte-identical to phase0). bench_tls.c's OpenSSL clients never resume + // (no SSL_set_session), so resumption must be OFF for parity: every + // timed handshake is a full handshake that transfers and verifies the + // certificate chain. + let cconf = ClientConfig::builder_with_provider(provider.clone()) + .with_protocol_versions(&[&rustls::version::TLS13]) + .map(|b| { + let mut c = b.with_root_certificates(roots).with_no_client_auth(); + c.resumption = rustls::client::Resumption::disabled(); + c + }); + let sconf = ServerConfig::builder_with_provider(provider) + .with_protocol_versions(&[&rustls::version::TLS13]) + .map_err(|e| e.to_string()) + .and_then(|b| { + b.with_no_client_auth() + .with_single_cert(chain, key_der) + .map_err(|e| e.to_string()) + }); + let (cconf, sconf) = match (cconf, sconf) { + (Ok(c), Ok(s)) => (Arc::new(c), Arc::new(s)), + (c, s) => { + let mut why = String::new(); + if let Err(e) = c { + why += &e.to_string(); + } + if let Err(e) = s { + why += &e; + } + disabled_row(&cell, &format!("config-setup-failed {}", why.replace('"', "'"))); + return; + } + }; + + // warmup (mirrors bench_tls.c: any warmup failure -> disabled row) + let (mut c2s, mut s2c, mut ch) = (0usize, 0usize, 0usize); + for _ in 0..warmup { + if one_handshake(&cconf, &sconf, &mut c2s, &mut s2c, &mut ch).is_err() { + disabled_row(&cell, "handshake failed"); + return; + } + } + + let mut lat: Vec = Vec::with_capacity(connections as usize); + let (mut ch_last, mut c2s_last, mut s2c_last) = (0usize, 0usize, 0usize); + for _ in 0..connections { + let t0 = now_ns(); + let rc = one_handshake(&cconf, &sconf, &mut c2s, &mut s2c, &mut ch); + let dt = now_ns() - t0; + if rc.is_ok() { + lat.push(dt); + ch_last = ch; + c2s_last = c2s; + s2c_last = s2c; + } + } + if lat.is_empty() { + eprintln!("all handshakes failed"); + exit(1); + } + lat.sort_unstable(); + let ok = lat.len(); + let median = pct(&lat, 0.5); + let p95 = pct(&lat, 0.95); + let (mn, mx) = (lat[0] as f64, lat[ok - 1] as f64); + let mean = lat.iter().map(|&x| x as f64).sum::() / ok as f64; + let ss: f64 = lat.iter().map(|&x| (x as f64 - mean).powi(2)).sum(); + let stddev = if ok > 1 { + (ss / (ok - 1) as f64).sqrt() + } else { + 0.0 + }; + let hs_per_sec = if median > 0.0 { 1e9 / median } else { 0.0 }; + + let mut row = String::new(); + write!( + row, + "{{\"label\":\"{}\",\"group\":\"{}\",\"sig_alg\":\"{}\",\"phase\":\"{}\",\ + \"implementation\":\"rustls-awslc\",\"unstable_features\":{},\"enabled\":true,\ + \"have_oqs_provider\":false,", + cell.label, cell.group, cell.sig_alg, cell.phase, cell.unstable + ) + .unwrap(); + write!(row, "\"connections\":{connections},\"succeeded\":{ok},").unwrap(); + write!( + row, + "\"handshake_latency_ns\":{{\"median\":{median:.1},\"p95\":{p95:.1},\"min\":{mn:.1},\ + \"max\":{mx:.1},\"mean\":{mean:.1},\"stddev\":{stddev:.1}}}," + ) + .unwrap(); + write!(row, "\"handshakes_per_sec\":{hs_per_sec:.1},").unwrap(); + write!( + row, + "\"bytes_on_wire\":{{\"client_to_server\":{c2s_last},\"server_to_client\":{s2c_last},\ + \"total\":{}}},", + c2s_last + s2c_last + ) + .unwrap(); + write!( + row, + "\"client_hello_bytes\":{ch_last},\"client_hello_fragmented\":{},\"mss_assumed\":{TYPICAL_MSS}}}", + ch_last > TYPICAL_MSS + ) + .unwrap(); + println!("{row}"); +} diff --git a/tools/benchmarks/pqc/bench/rust-tls/src/primitives.rs b/tools/benchmarks/pqc/bench/rust-tls/src/primitives.rs new file mode 100644 index 0000000..2f23f11 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust-tls/src/primitives.rs @@ -0,0 +1,267 @@ +//! aws-lc-rs primitive rows (implementation:"aws-lc-rs") — measured to PRICE +//! the rustls-awslc handshake primitive sums, NOT as an independent +//! implementation: aws-lc-rs wraps the AWS-LC C library, which is exactly why +//! Stage 3 excluded it from the pure-Rust group. Same bench_pq methodology +//! (bench.rs), same row shape, same algorithm identifiers. +//! +//! Semantics: verify is FROM-BYTES by construction (aws-lc-rs +//! UnparsedPublicKey parses the key per call), matching OQS_SIG_verify and +//! the per-handshake TLS pattern. ML-DSA signing is hedged (FIPS 204 default +//! inside AWS-LC). X25519/P-256 derive parses the peer key per call, matching +//! bench_pq.c's per-call EVP_PKEY_derive_set_peer. + +use crate::bench::{compute_stats, die, must_measure, stats_json, BenchCfg, MeasureOut}; +use aws_lc_rs::unstable::signature as pq; +use aws_lc_rs::{agreement, kem, signature}; +use std::hint::black_box; + +const MSG: [u8; 32] = [0xA5; 32]; + +pub const PRIMS: &[(&str, &str)] = &[ + ("kem", "X25519"), + ("kem", "secp256r1"), + ("kem", "ML-KEM-768"), + ("kem", "ML-KEM-1024"), + ("sig", "Ed25519"), + ("sig", "ML-DSA-44"), + ("sig", "ML-DSA-65"), + ("sig", "ML-DSA-87"), +]; + +fn sink(v: T) { + black_box(v); +} + +fn check_size(alg: &str, what: &str, got: usize, want: usize) { + if got != want { + die( + alg, + &format!("size mismatch: {what} is {got} bytes, expected {want} (FIPS/liboqs)"), + ); + } +} + +fn print_row(alg: &str, kind: &str, level: u32, classical: bool, sizes: &str, ops: &[String]) { + let mut row = format!( + "{{\"alg\":\"{alg}\",\"kind\":\"{kind}\",\"implementation\":\"aws-lc-rs\"," + ); + if classical { + row += "\"classical\":true,"; + } + row += &format!("\"enabled\":true,\"claimed_nist_level\":{level},"); + row += &format!("\"sizes\":{{{sizes}}},"); + row += "\"operations\":{"; + for (i, block) in ops.iter().enumerate() { + if i > 0 { + row += ","; + } + row += block; + } + row += "}}"; + println!("{row}"); +} + +fn render(ops: Vec<(&str, MeasureOut)>) -> Vec { + ops.into_iter() + .map(|(name, mut m)| { + let st = compute_stats(&mut m.all); + stats_json(name, &st, &m) + }) + .collect() +} + +fn run_mlkem(alg_name: &str, alg: &'static kem::Algorithm, level: u32, pk: usize, ct: usize, cfg: &BenchCfg) -> i32 { + // correctness gate (mirrors bench_pq.c) + let dk = kem::DecapsulationKey::generate(alg).unwrap_or_else(|_| die(alg_name, "keygen failed")); + let ek = dk.encapsulation_key().unwrap_or_else(|_| die(alg_name, "encapsulation key failed")); + let (ct0, ss_e) = ek.encapsulate().unwrap_or_else(|_| die(alg_name, "encaps failed")); + let ss_d = dk + .decapsulate(ct0.as_ref().into()) + .unwrap_or_else(|_| die(alg_name, "decaps failed")); + if ss_e.as_ref() != ss_d.as_ref() { + die(alg_name, "KEM shared-secret mismatch (ss_encaps != ss_decaps)"); + } + check_size(alg_name, "public_key", + ek.key_bytes().map(|b| b.as_ref().len()).unwrap_or(0), pk); + check_size(alg_name, "ciphertext", ct0.as_ref().len(), ct); + check_size(alg_name, "shared_secret", ss_e.as_ref().len(), 32); + let ct_bytes = ct0.as_ref().to_vec(); + + let mut keygen = || -> Result<(), ()> { + sink(kem::DecapsulationKey::generate(alg).map_err(|_| ())?); + Ok(()) + }; + let mut encaps = || -> Result<(), ()> { + sink(ek.encapsulate().map_err(|_| ())?); + Ok(()) + }; + let mut decaps = || -> Result<(), ()> { + sink(dk.decapsulate(ct_bytes.as_slice().into()).map_err(|_| ())?); + Ok(()) + }; + let kg = must_measure(alg_name, "keygen", &mut keygen, cfg); + let en = must_measure(alg_name, "encaps", &mut encaps, cfg); + let de = must_measure(alg_name, "decaps", &mut decaps, cfg); + // aws-lc-rs does not expose the expanded FIPS secret key; secret_key is + // omitted (never guessed) so the cross-implementation size check compares + // only fields both sides actually report. + let sizes = format!("\"public_key\":{pk},\"ciphertext\":{ct},\"shared_secret\":32"); + print_row(alg_name, "kem", level, false, &sizes, + &render(vec![("keygen", kg), ("encaps", en), ("decaps", de)])); + 0 +} + +fn run_mldsa(alg_name: &str, signing: &'static pq::PqdsaSigningAlgorithm, + verif: &'static pq::PqdsaVerificationAlgorithm, level: u32, + pk: usize, sig_len: usize, cfg: &BenchCfg) -> i32 { + use aws_lc_rs::signature::KeyPair as _; + let kp = pq::PqdsaKeyPair::generate(signing).unwrap_or_else(|_| die(alg_name, "keygen failed")); + let pk_bytes = kp.public_key().as_ref().to_vec(); + let mut sig_buf = vec![0u8; sig_len + 64]; + let n = kp.sign(&MSG, &mut sig_buf).unwrap_or_else(|_| die(alg_name, "sign failed")); + sig_buf.truncate(n); + if signature::UnparsedPublicKey::new(verif, &pk_bytes) + .verify(&MSG, &sig_buf) + .is_err() + { + die(alg_name, "verify failed on a valid signature (broken build)"); + } + check_size(alg_name, "public_key", pk_bytes.len(), pk); + check_size(alg_name, "signature", sig_buf.len(), sig_len); + + let mut keygen = || -> Result<(), ()> { + sink(pq::PqdsaKeyPair::generate(signing).map_err(|_| ())?); + Ok(()) + }; + let mut buf = vec![0u8; sig_len + 64]; + let mut sign = || -> Result<(), ()> { + // hedged per FIPS 204 (AWS-LC's default signing mode) + let n = kp.sign(&MSG, &mut buf).map_err(|_| ())?; + sink(buf[..n].first().copied()); + Ok(()) + }; + let mut verify = || -> Result<(), ()> { + // from-bytes per call: UnparsedPublicKey parses + verifies + signature::UnparsedPublicKey::new(verif, &pk_bytes) + .verify(&MSG, &sig_buf) + .map_err(|_| ())?; + sink(1u8); + Ok(()) + }; + let kg = must_measure(alg_name, "keygen", &mut keygen, cfg); + let sg = must_measure(alg_name, "sign", &mut sign, cfg); + let vf = must_measure(alg_name, "verify", &mut verify, cfg); + let sizes = format!("\"public_key\":{pk},\"signature\":{sig_len}"); + print_row(alg_name, "sig", level, false, &sizes, + &render(vec![("keygen", kg), ("sign", sg), ("verify", vf)])); + 0 +} + +fn run_ecdh(alg_name: &str, alg: &'static agreement::Algorithm, pk_len: usize, cfg: &BenchCfg) -> i32 { + let sk = agreement::PrivateKey::generate(alg).unwrap_or_else(|_| die(alg_name, "keygen failed")); + let peer = agreement::PrivateKey::generate(alg).unwrap_or_else(|_| die(alg_name, "peer keygen failed")); + let my_pub = sk.compute_public_key().unwrap_or_else(|_| die(alg_name, "pubkey failed")); + let peer_pub = peer + .compute_public_key() + .unwrap_or_else(|_| die(alg_name, "peer pubkey failed")); + check_size(alg_name, "public_key", my_pub.as_ref().len(), pk_len); + // ECDH must agree (mirrors bench_pq.c:498-504) + let s1 = agreement::agree(&sk, agreement::UnparsedPublicKey::new(alg, peer_pub.as_ref()), + (), |s| Ok::, ()>(s.to_vec())) + .unwrap_or_else(|_| die(alg_name, "derive(self,peer) failed")); + let s2 = agreement::agree(&peer, agreement::UnparsedPublicKey::new(alg, my_pub.as_ref()), + (), |s| Ok::, ()>(s.to_vec())) + .unwrap_or_else(|_| die(alg_name, "derive(peer,self) failed")); + if s1 != s2 { + die(alg_name, "ECDH shared-secret mismatch"); + } + let peer_bytes = peer_pub.as_ref().to_vec(); + + let mut keygen = || -> Result<(), ()> { + let k = agreement::PrivateKey::generate(alg).map_err(|_| ())?; + sink(k.compute_public_key().map_err(|_| ())?); + Ok(()) + }; + let mut derive = || -> Result<(), ()> { + // peer key parsed per call, matching bench_pq.c's per-call set_peer + agreement::agree(&sk, agreement::UnparsedPublicKey::new(alg, &peer_bytes), + (), |s| { + sink(s[0]); + Ok::<(), ()>(()) + }) + }; + let kg = must_measure(alg_name, "keygen", &mut keygen, cfg); + let dv = must_measure(alg_name, "derive", &mut derive, cfg); + let ss_len = s1.len(); + let sizes = format!( + "\"public_key\":{pk_len},\"ciphertext\":null,\"shared_secret\":{ss_len}" + ); + print_row(alg_name, "kem", 1, true, &sizes, &render(vec![("keygen", kg), ("derive", dv)])); + 0 +} + +fn run_ed25519(cfg: &BenchCfg) -> i32 { + use aws_lc_rs::signature::KeyPair as _; + let alg_name = "Ed25519"; + let kp = signature::Ed25519KeyPair::generate().unwrap_or_else(|_| die(alg_name, "keygen failed")); + let pk_bytes = kp.public_key().as_ref().to_vec(); + let sig = kp.sign(&MSG); + if signature::UnparsedPublicKey::new(&signature::ED25519, &pk_bytes) + .verify(&MSG, sig.as_ref()) + .is_err() + { + die(alg_name, "verify failed on a valid signature (broken build)"); + } + check_size(alg_name, "public_key", pk_bytes.len(), 32); + check_size(alg_name, "signature", sig.as_ref().len(), 64); + let sig_bytes = sig.as_ref().to_vec(); + + let mut keygen = || -> Result<(), ()> { + sink(signature::Ed25519KeyPair::generate().map_err(|_| ())?); + Ok(()) + }; + let mut sign = || -> Result<(), ()> { + sink(kp.sign(&MSG)); + Ok(()) + }; + let mut verify = || -> Result<(), ()> { + signature::UnparsedPublicKey::new(&signature::ED25519, &pk_bytes) + .verify(&MSG, &sig_bytes) + .map_err(|_| ())?; + sink(1u8); + Ok(()) + }; + let kg = must_measure(alg_name, "keygen", &mut keygen, cfg); + let sg = must_measure(alg_name, "sign", &mut sign, cfg); + let vf = must_measure(alg_name, "verify", &mut verify, cfg); + print_row(alg_name, "sig", 1, true, + "\"public_key\":32,\"secret_key\":32,\"signature\":64", + &render(vec![("keygen", kg), ("sign", sg), ("verify", vf)])); + 0 +} + +pub fn run(kind: &str, alg: &str, cfg: &BenchCfg) -> i32 { + match (kind, alg) { + ("kem", "X25519") => run_ecdh("X25519", &agreement::X25519, 32, cfg), + ("kem", "secp256r1") => run_ecdh("secp256r1", &agreement::ECDH_P256, 65, cfg), + ("kem", "ML-KEM-768") => run_mlkem("ML-KEM-768", &kem::ML_KEM_768, 3, 1184, 1088, cfg), + ("kem", "ML-KEM-1024") => run_mlkem("ML-KEM-1024", &kem::ML_KEM_1024, 5, 1568, 1568, cfg), + ("sig", "Ed25519") => run_ed25519(cfg), + ("sig", "ML-DSA-44") => { + run_mldsa("ML-DSA-44", &pq::ML_DSA_44_SIGNING, &pq::ML_DSA_44, 2, 1312, 2420, cfg) + } + ("sig", "ML-DSA-65") => { + run_mldsa("ML-DSA-65", &pq::ML_DSA_65_SIGNING, &pq::ML_DSA_65, 3, 1952, 3309, cfg) + } + ("sig", "ML-DSA-87") => { + run_mldsa("ML-DSA-87", &pq::ML_DSA_87_SIGNING, &pq::ML_DSA_87, 5, 2592, 4627, cfg) + } + _ => { + println!( + "{{\"alg\":\"{alg}\",\"kind\":\"{kind}\",\"implementation\":\"aws-lc-rs\",\ + \"enabled\":false,\"reason\":\"not measured in the aws-lc-rs pricing set\"}}" + ); + 0 + } + } +} diff --git a/tools/benchmarks/pqc/bench/rust/Cargo.lock b/tools/benchmarks/pqc/bench/rust/Cargo.lock new file mode 100644 index 0000000..ed1b9be --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust/Cargo.lock @@ -0,0 +1,469 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "getrandom", + "hybrid-array", + "rand_core", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + +[[package]] +name = "curve25519-dalek" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rand_core", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "der" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer", + "crypto-common", + "ctutils", +] + +[[package]] +name = "ed25519" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "sha2", + "signature", + "subtle", + "zeroize", +] + +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "rand_core", +] + +[[package]] +name = "hmac" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" +dependencies = [ + "digest", +] + +[[package]] +name = "hybrid-array" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +dependencies = [ + "ctutils", + "typenum", +] + +[[package]] +name = "keccak" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +dependencies = [ + "cfg-if", + "cpufeatures", +] + +[[package]] +name = "kem" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" +dependencies = [ + "crypto-common", + "rand_core", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "ml-dsa" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add6b9d92e496f16f4526d68ff29da1483aba4b119baeab8bed3b9e3544a6f3d" +dependencies = [ + "const-oid", + "crypto-common", + "ctutils", + "hybrid-array", + "module-lattice", + "pkcs8", + "shake", + "signature", +] + +[[package]] +name = "ml-kem" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" +dependencies = [ + "hybrid-array", + "kem", + "module-lattice", + "pkcs8", + "rand_core", + "sha3", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "pkcs8" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pqb-rust" +version = "0.1.0" +dependencies = [ + "ed25519-dalek", + "getrandom", + "libc", + "ml-dsa", + "ml-kem", + "rand_core", + "slh-dsa", + "x25519-dalek", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "shake" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + +[[package]] +name = "signature" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "slh-dsa" +version = "0.2.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "371c02fe34044d8866ddf7cb0e8204a87ef31a39f0408bed41c4253ea9dd61ed" +dependencies = [ + "const-oid", + "digest", + "hmac", + "hybrid-array", + "pkcs8", + "rand_core", + "sha2", + "sha3", + "signature", + "typenum", + "zerocopy", +] + +[[package]] +name = "spki" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sponge-cursor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "x25519-dalek" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" +dependencies = [ + "curve25519-dalek", + "rand_core", + "zeroize", +] + +[[package]] +name = "zerocopy" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" diff --git a/tools/benchmarks/pqc/bench/rust/Cargo.toml b/tools/benchmarks/pqc/bench/rust/Cargo.toml new file mode 100644 index 0000000..e64c40d --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "pqb-rust" +version = "0.1.0" +edition = "2021" +description = "pq-bench-rpi5 pure-Rust (RustCrypto) KEM/signature harness — same methodology as bench/kem_sig/bench_pq.c, emitting the same schema-2.0.0 JSONL rows with implementation:\"rustcrypto\"" +publish = false + +[dependencies] +# The three measured crates — EXACT pins (documented in setup/versions.env). +# Pure Rust; pre-1.0 and unaudited (fine for benchmarking, stated in README). +ml-kem = "=0.3.2" +ml-dsa = "=0.1.1" +slh-dsa = "=0.2.0-rc.5" +# System RNG (getrandom-backed), analogous to liboqs' system OQS_randombytes. +# These match the rand_core/getrandom generation the three crates use. +rand_core = "0.10" +getrandom = { version = "0.4", features = ["sys_rng"] } +# Only for clock_gettime(CLOCK_MONOTONIC) — the exact clock bench_pq.c uses. +# (std::time::Instant uses a different timebase on macOS.) +libc = "0.2" +x25519-dalek = { version = "=3.0.0", features = ["static_secrets"] } +ed25519-dalek = { version = "=3.0.0", features = ["rand_core"] } + +[profile.release] +# Parity with the C harness build (-O3, one translation unit). LTO stays off: +# the C side does not LTO either. All of this is recorded in the provenance. +opt-level = 3 +codegen-units = 1 +lto = false diff --git a/tools/benchmarks/pqc/bench/rust/build.rs b/tools/benchmarks/pqc/bench/rust/build.rs new file mode 100644 index 0000000..a22c419 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust/build.rs @@ -0,0 +1,61 @@ +// Capture build-time provenance so the binary can emit it with --provenance: +// the Rust-side equivalent of the LIBOQS_OPT_DEFINES we record for C. +use std::env; +use std::process::Command; + +fn main() { + let set = |k: &str, v: &str| println!("cargo:rustc-env={k}={v}"); + + set("PQB_TARGET", &env::var("TARGET").unwrap_or_default()); + set("PQB_PROFILE", &env::var("PROFILE").unwrap_or_default()); + set("PQB_OPT_LEVEL", &env::var("OPT_LEVEL").unwrap_or_default()); + set( + "PQB_TARGET_FEATURES", + &env::var("CARGO_CFG_TARGET_FEATURE").unwrap_or_default(), + ); + // RUSTFLAGS as cargo actually applied them (0x1f-separated encoding). + let rustflags = env::var("CARGO_ENCODED_RUSTFLAGS") + .unwrap_or_default() + .replace('\u{1f}', " "); + set("PQB_RUSTFLAGS", &rustflags); + + // rustc version string (the same compiler cargo is driving). + let rustc = env::var("RUSTC").unwrap_or_else(|_| "rustc".into()); + let ver = Command::new(&rustc) + .arg("-V") + .output() + .ok() + .map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string()) + .unwrap_or_default(); + set("PQB_RUSTC_VERSION", &ver); + + // Resolved versions of the measured crates, from the committed Cargo.lock. + let lock = std::fs::read_to_string( + std::path::Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("Cargo.lock"), + ) + .unwrap_or_default(); + for want in ["ml-kem", "ml-dsa", "slh-dsa", "x25519-dalek", "ed25519-dalek"] { + let mut version = String::from("unknown"); + let mut in_pkg = false; + for line in lock.lines() { + let line = line.trim(); + if line == "[[package]]" { + in_pkg = false; + } else if line == format!("name = \"{want}\"") { + in_pkg = true; + } else if in_pkg && line.starts_with("version = ") { + version = line + .trim_start_matches("version = ") + .trim_matches('"') + .to_string(); + break; + } + } + set( + &format!("PQB_CRATE_{}", want.replace('-', "_").to_uppercase()), + &version, + ); + } + println!("cargo:rerun-if-changed=Cargo.lock"); + println!("cargo:rerun-if-env-changed=CARGO_ENCODED_RUSTFLAGS"); +} diff --git a/tools/benchmarks/pqc/bench/rust/src/algs.rs b/tools/benchmarks/pqc/bench/rust/src/algs.rs new file mode 100644 index 0000000..bf8b70b --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust/src/algs.rs @@ -0,0 +1,484 @@ +//! Algorithm drivers. Structure mirrors bench_pq.c run_kem()/run_sig(): +//! correctness gate ONCE outside timing, then keygen / encaps|sign / +//! decaps|verify measured on canonical, pre-validated inputs. Output rows are +//! schema-2.0.0 JSONL with implementation:"rustcrypto" and the SAME algorithm +//! identifiers liboqs uses, so rows join across implementations by (kind, alg). +//! +//! Signing mode: HEDGED (randomized) for both ML-DSA and SLH-DSA, matching +//! liboqs 0.15.0 — verified in its vendored source: DILITHIUM_RANDOMIZED_SIGNING +//! is defined (src/sig/ml_dsa/*/config.h) and the SLH-DSA pure wrappers draw a +//! fresh addrnd via OQS_randombytes per signature (src/sig/slh_dsa/wrappers/). +//! +//! Secret-key sizes: the ml-kem/ml-dsa crates prefer SEED serialization (64/32 +//! bytes) where liboqs reports the expanded FIPS encoding. `sizes.secret_key` +//! reports the EXPANDED form so the cross-implementation size check stays +//! apples-to-apples; the row carries `sk_seed_bytes` for the crate-native form. + +// ExpandedKeyEncoding is deprecated upstream (seed serialization preferred); +// we use it deliberately, once, in the size gate to verify the expanded FIPS +// encoding length against liboqs. +#![allow(deprecated)] + +use crate::bench::{die, must_measure, stats_json, BenchCfg}; +use std::hint::black_box; + +use ml_dsa::signature::{Keypair, RandomizedSigner, Verifier}; +use ml_dsa::{ExpandedSigningKeyBytes, MlDsa44, MlDsa65, MlDsa87}; +use ml_kem::{ + Decapsulate, Encapsulate, ExpandedKeyEncoding, Generate, Kem, KeyExport, MlKem1024, MlKem512, + MlKem768, +}; +use slh_dsa::{Sha2_128f, Sha2_128s, Sha2_192f, Sha2_256f, SigningKey as SlhSigningKey}; +use ed25519_dalek::Signer as _; + +/// The pure-Rust classical baselines (dalek crates), mirroring the C side's +/// OpenSSL X25519/Ed25519 rows: every implementation gets an in-family anchor +/// so cross-implementation comparisons can be expressed as ratios ("ML-KEM +/// keygen costs Nx X25519 here") that normalise whole-implementation effects. +fn run_x25519(cfg: &BenchCfg) -> i32 { + let alg = "X25519"; + let mut rng = os_rng(); + + // ---- correctness gate: ECDH must agree (bench_pq.c:498-504) ---- + let a = x25519_dalek::StaticSecret::random_from_rng(&mut rng); + let b = x25519_dalek::StaticSecret::random_from_rng(&mut rng); + let pa = x25519_dalek::PublicKey::from(&a); + let pb = x25519_dalek::PublicKey::from(&b); + if a.diffie_hellman(&pb).as_bytes() != b.diffie_hellman(&pa).as_bytes() { + die(alg, "ECDH shared-secret mismatch"); + } + + // keygen = secret + public derivation, same work as the C EVP keygen + let mut kg_rng = os_rng(); + let mut keygen = || -> Result<(), ()> { + let s = x25519_dalek::StaticSecret::random_from_rng(&mut kg_rng); + sink(x25519_dalek::PublicKey::from(&s)); + Ok(()) + }; + let mut derive = || -> Result<(), ()> { + sink(a.diffie_hellman(&pb)); + Ok(()) + }; + + let kg = must_measure(alg, "keygen", &mut keygen, cfg); + let dv = must_measure(alg, "derive", &mut derive, cfg); + + let ops = render_ops(vec![("keygen", kg), ("derive", dv)]); + // classical:true, like the C openssl baseline rows + let mut row = String::from( + "{\"alg\":\"X25519\",\"kind\":\"kem\",\"implementation\":\"rustcrypto\",\ + \"classical\":true,\"enabled\":true,\"claimed_nist_level\":1,\ + \"sizes\":{\"public_key\":32,\"secret_key\":32,\"ciphertext\":null,\"shared_secret\":32},\ + \"operations\":{", + ); + for (i, block) in ops.iter().enumerate() { + if i > 0 { + row += ","; + } + row += block; + } + row += "}}"; + println!("{row}"); + 0 +} + +fn run_ed25519(cfg: &BenchCfg) -> i32 { + let alg = "Ed25519"; + let mut rng = os_rng(); + + // ---- correctness gate (bench_pq.c:561-564) ---- + let sk = ed25519_dalek::SigningKey::generate(&mut rng); + let vk = sk.verifying_key(); + let sig = sk.sign(&MSG); // deterministic RFC 8032, same as OpenSSL + if vk.verify(&MSG, &sig).is_err() { + die(alg, "verify failed on a valid signature (broken build)"); + } + + let vk_bytes = vk.to_bytes(); + + let mut kg_rng = os_rng(); + let mut keygen = || -> Result<(), ()> { + sink(ed25519_dalek::SigningKey::generate(&mut kg_rng)); + Ok(()) + }; + let mut sign = || -> Result<(), ()> { + sink(sk.sign(&MSG)); + Ok(()) + }; + // verify = pk from wire bytes + verify (incl. point decompression) — the + // TLS/OQS call shape; verify_cached_key = pre-parsed key (validator). + let mut verify = || -> Result<(), ()> { + match ed25519_dalek::VerifyingKey::from_bytes(&vk_bytes) { + Ok(v) => { + if v.verify(&MSG, &sig).is_ok() { + sink(1u8); + Ok(()) + } else { + Err(()) + } + } + Err(_) => Err(()), + } + }; + let mut verify_cached = || -> Result<(), ()> { + if vk.verify(&MSG, &sig).is_ok() { + sink(1u8); + Ok(()) + } else { + Err(()) + } + }; + + let kg = must_measure(alg, "keygen", &mut keygen, cfg); + let sg = must_measure(alg, "sign", &mut sign, cfg); + let vf = must_measure(alg, "verify", &mut verify, cfg); + let vc = must_measure(alg, "verify_cached_key", &mut verify_cached, cfg); + + let ops = render_ops(vec![ + ("keygen", kg), + ("sign", sg), + ("verify", vf), + ("verify_cached_key", vc), + ]); + let mut row = String::from( + "{\"alg\":\"Ed25519\",\"kind\":\"sig\",\"implementation\":\"rustcrypto\",\ + \"classical\":true,\"enabled\":true,\"claimed_nist_level\":1,\ + \"sizes\":{\"public_key\":32,\"secret_key\":32,\"signature\":64},\ + \"operations\":{", + ); + for (i, block) in ops.iter().enumerate() { + if i > 0 { + row += ","; + } + row += block; + } + row += "}}"; + println!("{row}"); + 0 +} + +/// bench_pq.c MSGLEN (=32) and the 0xA5 fill (:426). +const MSG: [u8; 32] = [0xA5; 32]; + +/// System RNG (getrandom-backed) — analogous to liboqs' default system +/// OQS_randombytes; both sides pay the system-entropy cost inside keygen/sign. +fn os_rng() -> rand_core::UnwrapErr { + rand_core::UnwrapErr(getrandom::SysRng) +} + +/// The anti-DCE sink. C uses a file-scope volatile store per op (g_sink, +/// bench_pq.c:296-300); the Rust equivalent is std::hint::black_box, which +/// forces the value to be materialized so the crypto call cannot be optimized +/// away. Applied to every timed op's output. +fn sink(v: T) { + black_box(v); +} + +/// Expected sizes = the FIPS encodings, which are exactly what liboqs reports. +/// A mismatch means a bug or a spec disagreement, NOT a benchmarking result — +/// so, like the C correctness gate, it aborts with no stdout (die/exit 3). +fn check_size(alg: &str, what: &str, got: usize, want: usize) { + if got != want { + die( + alg, + &format!("size mismatch: {what} is {got} bytes, expected {want} (FIPS/liboqs)"), + ); + } +} + +pub const ALGS: &[(&str, &str)] = &[ + // classical baselines first, like the C sweep (config.yaml order) + ("kem", "X25519"), + ("sig", "Ed25519"), + ("kem", "ML-KEM-512"), + ("kem", "ML-KEM-768"), + ("kem", "ML-KEM-1024"), + ("sig", "ML-DSA-44"), + ("sig", "ML-DSA-65"), + ("sig", "ML-DSA-87"), + ("sig", "SLH_DSA_PURE_SHA2_128F"), + ("sig", "SLH_DSA_PURE_SHA2_128S"), + ("sig", "SLH_DSA_PURE_SHA2_192F"), + ("sig", "SLH_DSA_PURE_SHA2_256F"), +]; + +fn print_row(alg: &str, kind: &str, level: u32, sizes: &str, extra: &str, ops: &[String]) { + let mut row = format!( + "{{\"alg\":\"{alg}\",\"kind\":\"{kind}\",\"implementation\":\"rustcrypto\",\"enabled\":true," + ); + row += &format!("\"claimed_nist_level\":{level},"); + row += &format!("\"sizes\":{{{sizes}}},"); + row += extra; // e.g. "\"sk_seed_bytes\":64," or "" + row += "\"operations\":{"; + for (i, block) in ops.iter().enumerate() { + if i > 0 { + row += ","; + } + row += block; + } + row += "}}"; + println!("{row}"); +} + +fn render_ops(alg_ops: Vec<(&str, crate::bench::MeasureOut)>) -> Vec { + alg_ops + .into_iter() + .map(|(name, mut m)| { + let st = crate::bench::compute_stats(&mut m.all); + stats_json(name, &st, &m) + }) + .collect() +} + +macro_rules! run_mlkem { + ($K:ty, $name:expr, $level:expr, $pk:expr, $sk:expr, $ct:expr, $cfg:expr) => {{ + let alg = $name; + let mut rng = os_rng(); + + // ---- correctness gate ONCE outside timing (bench_pq.c:357-363) ---- + let (dk, ek) = <$K>::generate_keypair_from_rng(&mut rng); + let (ct, ss_e) = ek.encapsulate_with_rng(&mut rng); + let ss_d = dk.decapsulate(&ct); + if ss_e != ss_d { + die(alg, "KEM shared-secret mismatch (ss_encaps != ss_decaps)"); + } + check_size(alg, "public_key", ek.to_bytes().len(), $pk); + check_size(alg, "secret_key (expanded)", dk.to_expanded_bytes().len(), $sk); + check_size(alg, "ciphertext", ct.len(), $ct); + check_size(alg, "shared_secret", ss_e.len(), 32); + let sk_seed = dk.to_bytes().len(); + + // ---- timed ops on canonical validated inputs ---- + let mut kg_rng = os_rng(); + let mut keygen = || -> Result<(), ()> { + sink(<$K>::generate_keypair_from_rng(&mut kg_rng)); + Ok(()) + }; + let mut en_rng = os_rng(); + let mut encaps = || -> Result<(), ()> { + sink(ek.encapsulate_with_rng(&mut en_rng)); + Ok(()) + }; + let mut decaps = || -> Result<(), ()> { + sink(dk.decapsulate(&ct)); + Ok(()) + }; + + let kg = must_measure(alg, "keygen", &mut keygen, $cfg); + let en = must_measure(alg, "encaps", &mut encaps, $cfg); + let de = must_measure(alg, "decaps", &mut decaps, $cfg); + + let ops = render_ops(vec![("keygen", kg), ("encaps", en), ("decaps", de)]); + let sizes = format!( + "\"public_key\":{},\"secret_key\":{},\"ciphertext\":{},\"shared_secret\":32", + $pk, $sk, $ct + ); + let extra = format!("\"sk_seed_bytes\":{sk_seed},"); + print_row(alg, "kem", $level, &sizes, &extra, &ops); + 0 + }}; +} + +macro_rules! run_mldsa { + ($P:ty, $name:expr, $level:expr, $pk:expr, $sk:expr, $sig:expr, $cfg:expr) => {{ + let alg = $name; + let mut rng = os_rng(); + + // ---- correctness gate (bench_pq.c:428-434) ---- + let sk = ml_dsa::SigningKey::<$P>::generate_from_rng(&mut rng); + let vk = sk.verifying_key(); + let sig = match sk.expanded_key().try_sign_with_rng(&mut rng, &MSG) { + Ok(s) => s, + Err(_) => die(alg, "sign failed"), + }; + if vk.verify(&MSG, &sig).is_err() { + die(alg, "signature verify failed on a valid signature (broken build)"); + } + check_size(alg, "public_key", vk.encode().len(), $pk); + check_size( + alg, + "secret_key (expanded)", + core::mem::size_of::>(), + $sk, + ); + check_size(alg, "signature", sig.encode().len(), $sig); + let sk_seed = sk.to_bytes().len(); + let vk_enc = vk.encode(); + + let mut kg_rng = os_rng(); + let mut keygen = || -> Result<(), ()> { + sink(ml_dsa::SigningKey::<$P>::generate_from_rng(&mut kg_rng)); + Ok(()) + }; + let mut sg_rng = os_rng(); + let mut sign = || -> Result<(), ()> { + // hedged signing, matching liboqs (DILITHIUM_RANDOMIZED_SIGNING) + match sk.expanded_key().try_sign_with_rng(&mut sg_rng, &MSG) { + Ok(s) => { + sink(s); + Ok(()) + } + Err(_) => Err(()), + } + }; + // verify = decode pk from wire bytes + verify: the shape OQS_SIG_verify + // measures (it re-expands from pk bytes per call) and the shape TLS + // pays per handshake. For ML-DSA the decode expands A_hat, so this is + // materially more work than verifying with a cached key object. + let mut verify = || -> Result<(), ()> { + let v = ml_dsa::VerifyingKey::<$P>::decode(&vk_enc); + if v.verify(&MSG, &sig).is_ok() { + sink(1u8); + Ok(()) + } else { + Err(()) + } + }; + // verify_cached_key = pre-parsed key object, expansion amortised: the + // long-lived-peer (validator) pattern. verify - verify_cached_key = + // the pk parse/expansion cost. + let mut verify_cached = || -> Result<(), ()> { + if vk.verify(&MSG, &sig).is_ok() { + sink(1u8); + Ok(()) + } else { + Err(()) + } + }; + + let kg = must_measure(alg, "keygen", &mut keygen, $cfg); + let sg = must_measure(alg, "sign", &mut sign, $cfg); + let vf = must_measure(alg, "verify", &mut verify, $cfg); + let vc = must_measure(alg, "verify_cached_key", &mut verify_cached, $cfg); + + let ops = render_ops(vec![ + ("keygen", kg), + ("sign", sg), + ("verify", vf), + ("verify_cached_key", vc), + ]); + let sizes = format!( + "\"public_key\":{},\"secret_key\":{},\"signature\":{}", + $pk, $sk, $sig + ); + let extra = format!("\"sk_seed_bytes\":{sk_seed},"); + print_row(alg, "sig", $level, &sizes, &extra, &ops); + 0 + }}; +} + +macro_rules! run_slhdsa { + ($P:ty, $name:expr, $level:expr, $pk:expr, $sk:expr, $sig:expr, $cfg:expr) => {{ + let alg = $name; + let mut rng = os_rng(); + + // ---- correctness gate ---- + let sk = SlhSigningKey::<$P>::new(&mut rng); + let vk: &slh_dsa::VerifyingKey<$P> = sk.as_ref(); + let sig = match sk.try_sign_with_rng(&mut rng, &MSG) { + Ok(s) => s, + Err(_) => die(alg, "sign failed"), + }; + if vk.verify(&MSG, &sig).is_err() { + die(alg, "signature verify failed on a valid signature (broken build)"); + } + check_size(alg, "public_key", vk.to_bytes().len(), $pk); + check_size(alg, "secret_key", sk.to_bytes().len(), $sk); + check_size(alg, "signature", sig.to_bytes().len(), $sig); + let vk_bytes = vk.to_bytes(); + + let mut kg_rng = os_rng(); + let mut keygen = || -> Result<(), ()> { + sink(SlhSigningKey::<$P>::new(&mut kg_rng)); + Ok(()) + }; + let mut sg_rng = os_rng(); + let mut sign = || -> Result<(), ()> { + // hedged signing, matching liboqs (fresh addrnd per signature) + match sk.try_sign_with_rng(&mut sg_rng, &MSG) { + Ok(s) => { + sink(s); + Ok(()) + } + Err(_) => Err(()), + } + }; + // verify = pk from wire bytes + verify (OQS/TLS call shape); for + // SLH-DSA the key is two small seeds so the decode is near-free — + // both shapes are still emitted for row-shape consistency. + let mut verify = || -> Result<(), ()> { + match slh_dsa::VerifyingKey::<$P>::try_from(&vk_bytes[..]) { + Ok(v) => { + if v.verify(&MSG, &sig).is_ok() { + sink(1u8); + Ok(()) + } else { + Err(()) + } + } + Err(_) => Err(()), + } + }; + let mut verify_cached = || -> Result<(), ()> { + if vk.verify(&MSG, &sig).is_ok() { + sink(1u8); + Ok(()) + } else { + Err(()) + } + }; + + let kg = must_measure(alg, "keygen", &mut keygen, $cfg); + let sg = must_measure(alg, "sign", &mut sign, $cfg); + let vf = must_measure(alg, "verify", &mut verify, $cfg); + let vc = must_measure(alg, "verify_cached_key", &mut verify_cached, $cfg); + + let ops = render_ops(vec![ + ("keygen", kg), + ("sign", sg), + ("verify", vf), + ("verify_cached_key", vc), + ]); + let sizes = format!( + "\"public_key\":{},\"secret_key\":{},\"signature\":{}", + $pk, $sk, $sig + ); + print_row(alg, "sig", $level, &sizes, "", &ops); + 0 + }}; +} + +pub fn run(kind: &str, alg: &str, cfg: &BenchCfg) -> i32 { + match (kind, alg) { + ("kem", "X25519") => run_x25519(cfg), + ("sig", "Ed25519") => run_ed25519(cfg), + ("kem", "ML-KEM-512") => run_mlkem!(MlKem512, "ML-KEM-512", 1, 800, 1632, 768, cfg), + ("kem", "ML-KEM-768") => run_mlkem!(MlKem768, "ML-KEM-768", 3, 1184, 2400, 1088, cfg), + ("kem", "ML-KEM-1024") => run_mlkem!(MlKem1024, "ML-KEM-1024", 5, 1568, 3168, 1568, cfg), + ("sig", "ML-DSA-44") => run_mldsa!(MlDsa44, "ML-DSA-44", 2, 1312, 2560, 2420, cfg), + ("sig", "ML-DSA-65") => run_mldsa!(MlDsa65, "ML-DSA-65", 3, 1952, 4032, 3309, cfg), + ("sig", "ML-DSA-87") => run_mldsa!(MlDsa87, "ML-DSA-87", 5, 2592, 4896, 4627, cfg), + ("sig", "SLH_DSA_PURE_SHA2_128F") => { + run_slhdsa!(Sha2_128f, "SLH_DSA_PURE_SHA2_128F", 1, 32, 64, 17088, cfg) + } + ("sig", "SLH_DSA_PURE_SHA2_128S") => { + run_slhdsa!(Sha2_128s, "SLH_DSA_PURE_SHA2_128S", 1, 32, 64, 7856, cfg) + } + ("sig", "SLH_DSA_PURE_SHA2_192F") => { + run_slhdsa!(Sha2_192f, "SLH_DSA_PURE_SHA2_192F", 3, 48, 96, 35664, cfg) + } + ("sig", "SLH_DSA_PURE_SHA2_256F") => { + run_slhdsa!(Sha2_256f, "SLH_DSA_PURE_SHA2_256F", 5, 64, 128, 49856, cfg) + } + _ => { + // Same shape as the C harness's not-enabled row (bench_pq.c:344): + // an algorithm this implementation cannot provide is recorded as + // unavailable, never faked. + println!( + "{{\"alg\":\"{alg}\",\"kind\":\"{kind}\",\"implementation\":\"rustcrypto\",\ + \"enabled\":false,\"reason\":\"no mature pure-Rust implementation\"}}" + ); + 0 + } + } +} diff --git a/tools/benchmarks/pqc/bench/rust/src/bench.rs b/tools/benchmarks/pqc/bench/rust/src/bench.rs new file mode 100644 index 0000000..00d29af --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust/src/bench.rs @@ -0,0 +1,269 @@ +//! Measurement engine — a deliberate, line-for-line replication of the timing, +//! auto-calibration and statistics logic in bench/kem_sig/bench_pq.c, so that +//! rustcrypto rows are methodologically comparable to liboqs rows. Any change +//! here must be mirrored there (and vice versa). C references cite bench_pq.c. + +use std::process::exit; + +/// bench_pq.c now_ns() (:44-48): clock_gettime(CLOCK_MONOTONIC). We call the +/// same clock via libc — std::time::Instant would use mach_absolute_time on +/// macOS, a different timebase than the C harness. +pub fn now_ns() -> u64 { + let mut ts = libc::timespec { + tv_sec: 0, + tv_nsec: 0, + }; + unsafe { + libc::clock_gettime(libc::CLOCK_MONOTONIC, &mut ts); + } + ts.tv_sec as u64 * 1_000_000_000 + ts.tv_nsec as u64 +} + +/// bench_pq.c die() (:303-307): a broken build must NEVER silently emit +/// timing numbers. stderr + exit(3), no stdout. +pub fn die(alg: &str, what: &str) -> ! { + eprintln!("[pqb-rust] FATAL: {alg}: {what} — aborting so no numbers are emitted"); + exit(3); +} + +/// bench_pq.c bench_cfg (:163-170). +pub struct BenchCfg { + pub fixed_iters: u64, // >0 => fixed-count mode; 0 => auto-calibrate + pub target_ns: u64, + pub min_samples: u64, + pub max_iters: u64, + pub warmup: u64, + pub reps: u64, +} + +/// bench_pq.c measure_out (:172-182). +pub struct MeasureOut { + pub all: Vec, + pub per_rep_median: Vec, // capped at 64, like the C array + pub timed_iters: u64, + pub warmup_iters: u64, + pub reps: u64, + pub calibrated: bool, + pub est_ns: f64, +} + +/// bench_pq.c pct_sorted() (:100-109): percentile with linear interpolation +/// on an already-sorted slice. +fn pct_sorted(s: &[u64], p: f64) -> f64 { + let n = s.len(); + if n == 0 { + return 0.0; + } + if n == 1 { + return s[0] as f64; + } + let idx = p * (n - 1) as f64; + let lo = idx as usize; + let frac = idx - lo as f64; + if lo + 1 >= n { + return s[n - 1] as f64; + } + s[lo] as f64 + frac * (s[lo + 1] as f64 - s[lo] as f64) +} + +/// bench_pq.c stats_t + compute_stats() (:89-146). Consumes the sample vec +/// (sorts in place, like the C qsort). +pub struct Stats { + pub median: f64, + pub mad: f64, + pub iqr: f64, + pub q1: f64, + pub q3: f64, + pub min: f64, + pub max: f64, + pub mean: f64, + pub stddev: f64, + pub ops_per_sec: f64, + pub n: u64, +} + +pub fn compute_stats(samples: &mut Vec) -> Stats { + let n = samples.len(); + if n == 0 { + return Stats { + median: 0.0, + mad: 0.0, + iqr: 0.0, + q1: 0.0, + q3: 0.0, + min: 0.0, + max: 0.0, + mean: 0.0, + stddev: 0.0, + ops_per_sec: 0.0, + n: 0, + }; + } + samples.sort_unstable(); + let median = pct_sorted(samples, 0.5); + let q1 = pct_sorted(samples, 0.25); + let q3 = pct_sorted(samples, 0.75); + let sum: f64 = samples.iter().map(|&x| x as f64).sum(); + let mean = sum / n as f64; + let ss: f64 = samples + .iter() + .map(|&x| { + let d = x as f64 - mean; + d * d + }) + .sum(); + let stddev = if n > 1 { + (ss / (n - 1) as f64).sqrt() + } else { + 0.0 + }; + // MAD = median(|x - median|). The C code truncates each deviation to + // uint64_t before sorting (:134-142); replicate that cast exactly. + let mut dev: Vec = samples + .iter() + .map(|&x| { + let d = x as f64 - median; + (if d < 0.0 { -d } else { d }) as u64 + }) + .collect(); + dev.sort_unstable(); + let mad = pct_sorted(&dev, 0.5); + Stats { + median, + mad, + iqr: q3 - q1, + q1, + q3, + min: samples[0] as f64, + max: samples[n - 1] as f64, + mean, + stddev, + ops_per_sec: if median > 0.0 { 1e9 / median } else { 0.0 }, + n: n as u64, + } +} + +/// bench_pq.c calibrate_op() (:209-250): doubling calibration (which also +/// warms caches) -> per-op cost estimate -> timed count clamped to +/// [min_samples, max_iters], per-rep re-warm ~20% of the timed budget. +fn calibrate_op( + f: &mut dyn FnMut() -> Result<(), ()>, + cfg: &BenchCfg, +) -> Result<(u64, u64, f64, bool), ()> { + if cfg.fixed_iters > 0 { + return Ok((cfg.fixed_iters, cfg.warmup, 0.0, false)); + } + const CALIB_BUDGET_NS: u64 = 30_000_000; // 30 ms, same as C (:221) + let (mut cops, mut cel, mut batch) = (0u64, 0u64, 1u64); + while cel < CALIB_BUDGET_NS && cops < cfg.max_iters { + let t0 = now_ns(); + for _ in 0..batch { + f()?; + } + cel += now_ns() - t0; + cops += batch; + batch *= 2; + } + let mut est_ns = if cops > 0 { + cel as f64 / cops as f64 + } else { + 1.0 + }; + if est_ns < 1.0 { + est_ns = 1.0; + } + let want = cfg.target_ns as f64 / est_ns; + let mut n = (want + 0.5) as u64; + n = n.clamp(cfg.min_samples, cfg.max_iters); + let w = (cfg.target_ns as f64 * 0.2) / est_ns; + let mut warm = (w + 0.5) as u64; + if warm < 1 { + warm = 1; + } + if warm > cfg.max_iters { + warm = cfg.max_iters; + } + Ok((n, warm, est_ns, true)) +} + +/// bench_pq.c measure_op() (:253-294): per-rep re-warm, then each op timed +/// individually; per-rep medians recorded (up to 64), all samples pooled. +pub fn measure_op(f: &mut dyn FnMut() -> Result<(), ()>, cfg: &BenchCfg) -> Result { + let (iters, warmup, est_ns, calibrated) = calibrate_op(f, cfg)?; + let mut out = MeasureOut { + all: Vec::with_capacity((iters * cfg.reps) as usize), + per_rep_median: Vec::new(), + timed_iters: iters, + warmup_iters: warmup, + reps: cfg.reps, + calibrated, + est_ns, + }; + let mut rep_buf: Vec = Vec::with_capacity(iters as usize); + for _ in 0..cfg.reps { + for _ in 0..warmup { + f()?; + } + rep_buf.clear(); + for _ in 0..iters { + let t0 = now_ns(); + let rc = f(); + let dt = now_ns() - t0; + rc?; + rep_buf.push(dt); + out.all.push(dt); + } + let mut copy = rep_buf.clone(); + copy.sort_unstable(); + if out.per_rep_median.len() < 64 { + out.per_rep_median.push(pct_sorted(©, 0.5)); + } + } + Ok(out) +} + +/// measure_op wrapper mirroring must_measure() (:311-315). +pub fn must_measure( + alg: &str, + op: &str, + f: &mut dyn FnMut() -> Result<(), ()>, + cfg: &BenchCfg, +) -> MeasureOut { + match measure_op(f, cfg) { + Ok(m) => m, + Err(()) => die(alg, op), + } +} + +/// bench_pq.c print_stats_json() (:184-203) — identical field set and +/// formatting (%.2f) so rows are diffable against liboqs rows. +pub fn stats_json(name: &str, st: &Stats, m: &MeasureOut) -> String { + let mut s = format!("\"{name}\":{{"); + s += &format!( + "\"unit\":\"ns\",\"warmup_iters\":{},\"timed_iters\":{},\"repetitions\":{},", + m.warmup_iters, m.timed_iters, m.reps + ); + s += &format!("\"calibrated\":{},", m.calibrated); + if m.calibrated { + s += &format!("\"calib_est_ns\":{:.2},", m.est_ns); + } + s += &format!("\"samples\":{},", st.n); + s += &format!( + "\"median\":{:.2},\"mad\":{:.2},\"iqr\":{:.2},\"q1\":{:.2},\"q3\":{:.2},", + st.median, st.mad, st.iqr, st.q1, st.q3 + ); + s += &format!( + "\"min\":{:.2},\"max\":{:.2},\"mean\":{:.2},\"stddev\":{:.2},", + st.min, st.max, st.mean, st.stddev + ); + s += &format!("\"ops_per_sec\":{:.2},", st.ops_per_sec); + s += "\"per_rep_median\":["; + for (i, v) in m.per_rep_median.iter().enumerate() { + if i > 0 { + s += ","; + } + s += &format!("{v:.2}"); + } + s += "]}"; + s +} diff --git a/tools/benchmarks/pqc/bench/rust/src/main.rs b/tools/benchmarks/pqc/bench/rust/src/main.rs new file mode 100644 index 0000000..4e7e4d9 --- /dev/null +++ b/tools/benchmarks/pqc/bench/rust/src/main.rs @@ -0,0 +1,186 @@ +//! pqb-rust — pure-Rust (RustCrypto) KEM/signature harness. +//! +//! One algorithm per invocation (fresh process keeps cache state clean), same +//! CLI, same auto-calibration and same statistics as bench/kem_sig/bench_pq.c +//! (see bench.rs for the line-by-line mapping). Emits one schema-2.0.0 JSONL +//! row with implementation:"rustcrypto" to stdout. +//! +//! pqb-rust --kind kem --alg ML-KEM-768 --target-time-ms 250 \ +//! --min-samples 30 --max-iters 20000 --reps 5 +//! pqb-rust --list # kindalg lines for run.sh +//! pqb-rust --provenance # Rust toolchain/code-path provenance JSON + +mod algs; +mod bench; + +use bench::BenchCfg; +use std::process::exit; + +fn provenance_json() -> String { + let compiled: Vec = env!("PQB_TARGET_FEATURES") + .split(',') + .filter(|s| !s.is_empty()) + .map(|s| format!("\"{s}\"")) + .collect(); + + #[cfg(target_arch = "aarch64")] + let runtime = format!( + "{{\"neon\":{},\"aes\":{},\"sha2\":{},\"sha3\":{}}}", + std::arch::is_aarch64_feature_detected!("neon"), + std::arch::is_aarch64_feature_detected!("aes"), + std::arch::is_aarch64_feature_detected!("sha2"), + std::arch::is_aarch64_feature_detected!("sha3"), + ); + #[cfg(not(target_arch = "aarch64"))] + let runtime = "null".to_string(); + + format!( + concat!( + "{{\"available\":true,", + "\"rustc_version\":\"{}\",", + "\"target\":\"{}\",", + "\"profile\":\"{}\",", + "\"opt_level\":\"{}\",", + "\"codegen_units\":1,", + "\"lto\":false,", + "\"rustflags\":\"{}\",", + "\"target_features_compiled\":[{}],", + "\"cpu_features_runtime\":{},", + "\"crate_versions\":{{\"ml-kem\":\"{}\",\"ml-dsa\":\"{}\",\"slh-dsa\":\"{}\",", + "\"x25519-dalek\":\"{}\",\"ed25519-dalek\":\"{}\"}},", + "\"signing_mode\":\"hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA\",", + "\"verify_semantics\":\"verify = decode public key from wire bytes + verify \ + (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the \ + per-handshake TLS pattern); verify_cached_key = pre-parsed key object with \ + expansion amortised (long-lived-peer/validator pattern); the difference is \ + the pk parse/expansion cost\",", + "\"code_path_note\":\"{}\"}}" + ), + env!("PQB_RUSTC_VERSION"), + env!("PQB_TARGET"), + env!("PQB_PROFILE"), + env!("PQB_OPT_LEVEL"), + env!("PQB_RUSTFLAGS"), + compiled.join(","), + runtime, + env!("PQB_CRATE_ML_KEM"), + env!("PQB_CRATE_ML_DSA"), + env!("PQB_CRATE_SLH_DSA"), + env!("PQB_CRATE_X25519_DALEK"), + env!("PQB_CRATE_ED25519_DALEK"), + // Kept factual and verified against the crate sources in the resolved + // dependency tree; the Rust-side analogue of toolchain.liboqs_opt_defines. + "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no \ + hand-written assembly and no explicit SIMD intrinsics (compiler \ + autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike \ + liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); \ + hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of \ + which dispatch to aarch64 hardware hash instructions via cpufeatures \ + runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak \ + where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - \ + symmetric with liboqs' hardware-hashing behaviour on both targets", + ) +} + +fn usage() { + eprintln!( + "usage: pqb-rust --kind kem|sig --alg NAME [options]\n\ + \x20 same sizing options as bench_pq: --target-time-ms N --min-samples N\n\ + \x20 --max-iters N --reps N | fixed: --iters N --warmup N\n\ + \x20 also: --list | --provenance" + ); +} + +fn main() { + let args: Vec = std::env::args().collect(); + let mut kind = String::new(); + let mut alg = String::new(); + let (mut warmup, mut iters, mut reps) = (1000u64, 0u64, 5u64); + let (mut target_time_ms, mut min_samples, mut max_iters) = (250u64, 30u64, 20000u64); + + let mut i = 1; + while i < args.len() { + let need = |i: usize| -> &str { + if i + 1 < args.len() { + &args[i + 1] + } else { + usage(); + exit(2); + } + }; + match args[i].as_str() { + "--list" => { + for (k, a) in algs::ALGS { + println!("{k}\t{a}"); + } + return; + } + "--provenance" => { + println!("{}", provenance_json()); + return; + } + "--kind" => { + kind = need(i).to_string(); + i += 1; + } + "--alg" => { + alg = need(i).to_string(); + i += 1; + } + "--warmup" => { + warmup = need(i).parse().unwrap_or(1000); + i += 1; + } + "--iters" => { + iters = need(i).parse().unwrap_or(0); + i += 1; + } + "--reps" => { + reps = need(i).parse().unwrap_or(5); + i += 1; + } + "--target-time-ms" => { + target_time_ms = need(i).parse().unwrap_or(250); + i += 1; + } + "--min-samples" => { + min_samples = need(i).parse().unwrap_or(30); + i += 1; + } + "--max-iters" => { + max_iters = need(i).parse().unwrap_or(20000); + i += 1; + } + _ => { + usage(); + exit(2); + } + } + i += 1; + } + if kind.is_empty() || alg.is_empty() { + usage(); + exit(2); + } + let reps = reps.max(1); + let min_samples = min_samples.max(1); + let max_iters = max_iters.max(min_samples); + + let cfg = BenchCfg { + fixed_iters: iters, + target_ns: target_time_ms * 1_000_000, + min_samples, + max_iters, + warmup, + reps, + }; + if iters > 0 { + eprintln!("[pqb-rust] mode=fixed-count reps={reps} warmup={warmup} iters={iters}"); + } else { + eprintln!( + "[pqb-rust] mode=auto-calibrate reps={reps} target={target_time_ms}ms \ + min_samples={min_samples} max_iters={max_iters}" + ); + } + exit(algs::run(&kind, &alg, &cfg)); +} diff --git a/tools/benchmarks/pqc/bench/tls/Makefile b/tools/benchmarks/pqc/bench/tls/Makefile new file mode 100644 index 0000000..c3e56b8 --- /dev/null +++ b/tools/benchmarks/pqc/bench/tls/Makefile @@ -0,0 +1,17 @@ +# Build the TLS handshake harness against the OpenSSL that has oqs-provider. +# make OPENSSL_PREFIX=... (defaults to Homebrew openssl@3.5, else system) + +OPENSSL_PREFIX ?= $(shell brew --prefix openssl@3.5 2>/dev/null || echo /usr) + +CC ?= cc +CFLAGS := -O3 -std=c11 -Wall -Wextra -I$(OPENSSL_PREFIX)/include +LDFLAGS := -L$(OPENSSL_PREFIX)/lib -Wl,-rpath,$(OPENSSL_PREFIX)/lib +LDLIBS := -lssl -lcrypto -lm + +bench_tls: bench_tls.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS) + +clean: + rm -f bench_tls + +.PHONY: clean diff --git a/tools/benchmarks/pqc/bench/tls/bench_tls.c b/tools/benchmarks/pqc/bench/tls/bench_tls.c new file mode 100644 index 0000000..a3c63d6 --- /dev/null +++ b/tools/benchmarks/pqc/bench/tls/bench_tls.c @@ -0,0 +1,233 @@ +/* =========================================================================== + * bench_tls.c — TLS 1.3 handshake benchmark via the OpenSSL API. + * + * Performs full TLS 1.3 handshakes entirely in-process over a pair of memory + * BIOs (no sockets, no CLI scraping). This gives: + * - clean per-handshake wall-clock latency (no socket/scheduler noise) + * - exact bytes-on-the-wire each direction + * - the precise ClientHello flight size (with a fragmentation note vs MSS) + * - real server-cert signature verification cost (client verifies the chain), + * which is the whole point of sweeping PQ signature algorithms. + * + * bench_tls --group X25519MLKEM768 --ca ca.pem \ + * --cert server.pem --key server.key --connections 1000 \ + * --label "X25519MLKEM768+mldsa65" \ + * --sig-alg mldsa65 --phase phase2 --implementation oqs-provider + * + * Emits one JSON object. The caller (run_tls.sh) supplies the row's schema + * annotations verbatim: `phase` (baseline | phase0 | phase2 — the migration + * framework), `implementation` (which TLS stack produced the number), and + * `sig_alg` (the certificate signature algorithm, separate from the label so + * downstream code never has to parse labels). PQ groups/sigs require + * oqs-provider to be loadable (point OPENSSL_MODULES at its directory); if it + * cannot load, we say so. + * ===========================================================================*/ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define TYPICAL_MSS 1400 /* note fragmentation when ClientHello exceeds this */ + +static inline uint64_t now_ns(void) { + struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t)ts.tv_sec * 1000000000ull + (uint64_t)ts.tv_nsec; +} + +static int cmp_u64(const void *a, const void *b) { + uint64_t x = *(const uint64_t *)a, y = *(const uint64_t *)b; + return (x > y) - (x < y); +} +static double pct(const uint64_t *s, uint64_t n, double p) { + if (!n) return 0; if (n == 1) return (double)s[0]; + double idx = p * (double)(n - 1); uint64_t lo = (uint64_t)idx; double f = idx - lo; + if (lo + 1 >= n) return (double)s[n - 1]; + return (double)s[lo] + f * ((double)s[lo + 1] - (double)s[lo]); +} + +/* OSSL_PROVIDER_do_all callback: flag any active provider whose name looks + * like an OQS provider (native-mode assertion). */ +static int check_no_oqs_provider(OSSL_PROVIDER *prov, void *cbdata) { + const char *name = OSSL_PROVIDER_get0_name(prov); + if (name && strstr(name, "oqs") != NULL) + *(int *)cbdata = 1; + return 1; +} + +/* Shuttle all pending bytes from src's mem BIO into dst's mem BIO. + * Returns bytes moved. */ +static size_t pump(BIO *src, BIO *dst) { + char buf[16384]; size_t total = 0; int n; + while ((n = BIO_read(src, buf, sizeof buf)) > 0) { + BIO_write(dst, buf, n); + total += (size_t)n; + } + return total; +} + +/* One full handshake. Records bytes each way and ClientHello size (first flight). + * Returns 0 on success. */ +static int one_handshake(SSL_CTX *cctx, SSL_CTX *sctx, + size_t *c2s_bytes, size_t *s2c_bytes, size_t *chello) { + SSL *cli = SSL_new(cctx), *srv = SSL_new(sctx); + if (!cli || !srv) { if (cli) SSL_free(cli); if (srv) SSL_free(srv); return -1; } + BIO *cli_rb = BIO_new(BIO_s_mem()), *cli_wb = BIO_new(BIO_s_mem()); + BIO *srv_rb = BIO_new(BIO_s_mem()), *srv_wb = BIO_new(BIO_s_mem()); + SSL_set_bio(cli, cli_rb, cli_wb); /* takes ownership */ + SSL_set_bio(srv, srv_rb, srv_wb); + SSL_set_connect_state(cli); + SSL_set_accept_state(srv); + + *c2s_bytes = *s2c_bytes = *chello = 0; + int first_flight = 1, rc = 0; + for (int i = 0; i < 64; i++) { + int r_c = SSL_do_handshake(cli); + size_t moved = pump(cli_wb, srv_rb); + if (first_flight && moved > 0) { *chello = moved; first_flight = 0; } + *c2s_bytes += moved; + (void)r_c; + + int r_s = SSL_do_handshake(srv); + *s2c_bytes += pump(srv_wb, cli_rb); + (void)r_s; + + if (SSL_is_init_finished(cli) && SSL_is_init_finished(srv)) break; + /* if both stalled with nothing to transfer, it's a failure */ + if (BIO_ctrl_pending(cli_wb) == 0 && BIO_ctrl_pending(srv_wb) == 0 && + !SSL_is_init_finished(cli) && i > 4) { rc = -2; break; } + } + if (!SSL_is_init_finished(cli) || !SSL_is_init_finished(srv)) rc = -2; + SSL_free(cli); SSL_free(srv); + return rc; +} + +int main(int argc, char **argv) { + const char *group = "X25519", *ca = NULL, *cert = NULL, *key = NULL, *label = ""; + const char *phase = "", *implementation = "oqs-provider", *sig_alg = ""; + uint64_t connections = 1000, warmup = 20; + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--group") && i+1 exercises PQ signature verify cost */ + int verify_setup = 1; + if (ca) { + if (SSL_CTX_load_verify_locations(cctx, ca, NULL) != 1) verify_setup = 0; + SSL_CTX_set_verify(cctx, SSL_VERIFY_PEER, NULL); + } else { + SSL_CTX_set_verify(cctx, SSL_VERIFY_NONE, NULL); + } + + if (!group_ok || !cert_ok || !verify_setup) { + printf("{\"label\":\"%s\",\"group\":\"%s\",\"sig_alg\":\"%s\",\"phase\":\"%s\"," + "\"implementation\":\"%s\",\"enabled\":false,\"have_oqs_provider\":%s," + "\"reason\":\"%s%s%s\"}\n", + label, group, sig_alg, phase, implementation, have_oqs?"true":"false", + group_ok?"":"group-not-supported ", + cert_ok?"":"cert-load-failed ", + verify_setup?"":"ca-load-failed"); + ERR_print_errors_fp(stderr); + return 0; + } + + /* warmup */ + size_t c2s, s2c, ch; + for (uint64_t i = 0; i < warmup; i++) { + if (one_handshake(cctx, sctx, &c2s, &s2c, &ch) != 0) { + printf("{\"label\":\"%s\",\"group\":\"%s\",\"sig_alg\":\"%s\",\"phase\":\"%s\"," + "\"implementation\":\"%s\",\"enabled\":false," + "\"have_oqs_provider\":%s,\"reason\":\"handshake failed\"}\n", + label, group, sig_alg, phase, implementation, have_oqs?"true":"false"); + ERR_print_errors_fp(stderr); + return 0; + } + } + + uint64_t *lat = malloc(connections * sizeof(uint64_t)); + size_t ch_last = 0, c2s_last = 0, s2c_last = 0; + uint64_t ok = 0; + for (uint64_t i = 0; i < connections; i++) { + uint64_t t0 = now_ns(); + int rc = one_handshake(cctx, sctx, &c2s, &s2c, &ch); + uint64_t dt = now_ns() - t0; + if (rc == 0) { lat[ok++] = dt; ch_last = ch; c2s_last = c2s; s2c_last = s2c; } + } + if (ok == 0) { fprintf(stderr,"all handshakes failed\n"); return 1; } + qsort(lat, ok, sizeof(uint64_t), cmp_u64); + double median = pct(lat, ok, 0.5); + double p95 = pct(lat, ok, 0.95); + double mn = (double)lat[0], mx = (double)lat[ok-1]; + double sum=0; for (uint64_t i=0;i1?sqrt(ss/(ok-1)):0; + double hs_per_sec = median>0 ? 1e9/median : 0; + + printf("{\"label\":\"%s\",\"group\":\"%s\",\"sig_alg\":\"%s\",\"phase\":\"%s\"," + "\"implementation\":\"%s\",\"enabled\":true,\"have_oqs_provider\":%s,", + label, group, sig_alg, phase, implementation, have_oqs?"true":"false"); + printf("\"connections\":%llu,\"succeeded\":%llu,", (unsigned long long)connections,(unsigned long long)ok); + printf("\"handshake_latency_ns\":{\"median\":%.1f,\"p95\":%.1f,\"min\":%.1f,\"max\":%.1f,\"mean\":%.1f,\"stddev\":%.1f},", + median,p95,mn,mx,mean,stddev); + printf("\"handshakes_per_sec\":%.1f,", hs_per_sec); + printf("\"bytes_on_wire\":{\"client_to_server\":%zu,\"server_to_client\":%zu,\"total\":%zu},", + c2s_last, s2c_last, c2s_last+s2c_last); + printf("\"client_hello_bytes\":%zu,\"client_hello_fragmented\":%s,\"mss_assumed\":%d}\n", + ch_last, ch_last>TYPICAL_MSS?"true":"false", TYPICAL_MSS); + free(lat); + return 0; +} diff --git a/tools/benchmarks/pqc/bench/tls/run_tls.sh b/tools/benchmarks/pqc/bench/tls/run_tls.sh new file mode 100755 index 0000000..b27b230 --- /dev/null +++ b/tools/benchmarks/pqc/bench/tls/run_tls.sh @@ -0,0 +1,292 @@ +#!/usr/bin/env bash +# ============================================================================= +# run_tls.sh — generate PKI and run the TLS 1.3 (KEM-group x signature) matrix. +# +# Always benchmarks the classical Logos baseline (X25519 key exchange + Ed25519 +# server auth) using stock OpenSSL. PQ rows additionally require oqs-provider to +# be loadable; if it is not present we record those rows as unavailable (with a +# reason) rather than failing — so this still smoke-tests cleanly on a dev box. +# +# ./run_tls.sh --out tls.json --connections 1000 +# +# Honors $PQB_TASKSET (a taskset/numactl prefix) to pin bench_tls to a core. +# ============================================================================= +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT="$(cd "$HERE/../.." && pwd)" +# shellcheck source=setup/lib_platform.sh +source "$ROOT/setup/lib_platform.sh" +LOCK="$ROOT/setup/versions.lock" +# shellcheck disable=SC1090 +[ -f "$LOCK" ] && source "$LOCK" || true +pqb_detect_platform +# set -e deaths must never be silent (see run.sh) +set -E # errtrace: without it the ERR trap does not fire inside functions +trap 'pqb_err "run_tls.sh aborted at line $LINENO while running: $BASH_COMMAND"' ERR + +OUT=""; CONNS=1000; WARMUP=20 +while [ $# -gt 0 ]; do + case "$1" in + --out) OUT="$2"; shift ;; + --connections) CONNS="$2"; shift ;; + --warmup) WARMUP="$2"; shift ;; + *) pqb_err "unknown arg: $1"; exit 2 ;; + esac + shift +done +[ -n "$OUT" ] || { pqb_err "--out required"; exit 2; } + +TASKSET="${PQB_TASKSET:-}" + +# ---- choose the OpenSSL that has the provider ------------------------------ +OSSL="${OPENSSL_BIN:-$(command -v openssl)}" +OSSL_PREFIX="${OPENSSL_PREFIX:-$(brew --prefix openssl@3.5 2>/dev/null || echo /usr)}" +PROV_MODULE="${OQSPROVIDER_MODULE:-}" +PROV_ARGS="" +HAVE_OQS=0 +if [ -n "$PROV_MODULE" ] && [ -f "$PROV_MODULE" ]; then + export OPENSSL_MODULES="$(dirname "$PROV_MODULE")" + if "$OSSL" list -providers -provider oqsprovider -provider default >/dev/null 2>&1; then + PROV_ARGS="-provider oqsprovider -provider default" + HAVE_OQS=1 + pqb_log "oqs-provider available: $PROV_MODULE" + fi +fi +[ "$HAVE_OQS" = 0 ] && pqb_warn "oqs-provider not available — PQ TLS rows will be marked unavailable (classical baseline still runs)" + +# ---- build the harness ----------------------------------------------------- +make -C "$HERE" OPENSSL_PREFIX="$OSSL_PREFIX" >/dev/null +BENCH="$HERE/bench_tls" +[ -n "$TASKSET" ] && export OPENSSL_MODULES="${OPENSSL_MODULES:-}" + +# ---- PKI workspace --------------------------------------------------------- +PKI="$HERE/pki"; rm -rf "$PKI"; mkdir -p "$PKI" + +# gen_cert [provider] -> CA + server cert/key of that alg +gen_cert() { + local alg="$1" pfx="$2" prov="${3:-}" + local ca_key="$PKI/${pfx}_ca.key" ca_crt="$PKI/${pfx}_ca.pem" + local sv_key="$PKI/${pfx}_server.key" sv_csr="$PKI/${pfx}_server.csr" sv_crt="$PKI/${pfx}_server.pem" + # CA + "$OSSL" req -x509 -new -newkey "$alg" -nodes $prov \ + -keyout "$ca_key" -out "$ca_crt" -days 3650 \ + -subj "/CN=PQB Test CA ($alg)" >/dev/null 2>&1 || return 1 + # server key + CSR + cert signed by CA. SAN is REQUIRED by webpki (the + # rustls verifier rejects CN-only certs); OpenSSL doesn't mind, so the same + # certs serve every stack. -copy_extensions carries the SAN into the cert. + "$OSSL" genpkey -algorithm "$alg" $prov -out "$sv_key" >/dev/null 2>&1 || return 1 + "$OSSL" req -new -key "$sv_key" $prov -out "$sv_csr" -subj "/CN=localhost" \ + -addext "subjectAltName = DNS:localhost" >/dev/null 2>&1 || return 1 + "$OSSL" x509 -req -in "$sv_csr" -CA "$ca_crt" -CAkey "$ca_key" $prov \ + -copy_extensions copyall \ + -out "$sv_crt" -days 3650 -CAcreateserial >/dev/null 2>&1 || return 1 + return 0 +} + +# ---- read config ----------------------------------------------------------- +TLS_JSON="$(python3 "$ROOT/bench/lib/list_algs.py" tls "$ROOT/config.yaml")" +read_list() { python3 -c "import json,sys; print('\n'.join(json.loads(sys.argv[1]).get(sys.argv[2],[]) or []))" "$TLS_JSON" "$1"; } +read_native_list() { python3 -c "import json,sys; print('\n'.join(((json.loads(sys.argv[1]).get('native') or {}).get(sys.argv[2])) or []))" "$TLS_JSON" "$1"; } +BASE_KEM="$(python3 -c "import json,sys;print(json.loads(sys.argv[1])['baseline']['kem_group'])" "$TLS_JSON")" +BASE_SIG="$(python3 -c "import json,sys;print(json.loads(sys.argv[1])['baseline']['sig_alg'])" "$TLS_JSON")" + +# ---- native PQC availability probe ----------------------------------------- +# The openssl-native matrix needs OpenSSL's own ML-KEM TLS groups (>= 3.5). +NATIVE_OK=0 +if "$OSSL" list -tls-groups 2>/dev/null | tr ':' '\n' | grep -qi '^mlkem'; then + NATIVE_OK=1 + pqb_log "native PQC TLS available in $("$OSSL" version | awk '{print $1, $2}')" +else + pqb_warn "this OpenSSL exposes no native MLKEM TLS groups — openssl-native matrix skipped" +fi + +# ---- generate certs -------------------------------------------------------- +declare -a SIG_OK_ALGS=() # oqs-provider PQ sig algs with a working cert +declare -a NATIVE_SIG_OK=() # native PQ sig algs with a working cert +# classical baseline cert (always; generated by the native openssl, used by the +# baseline + every phase0 cell) +if gen_cert "$BASE_SIG" "base_$BASE_SIG"; then + pqb_log "generated baseline cert ($BASE_SIG)" +else + pqb_err "failed to generate classical baseline cert ($BASE_SIG) — TLS layer cannot run" + echo '{"available":false,"reason":"baseline cert generation failed"}' > "$OUT"; exit 0 +fi +# native PQ certs: generated by native OpenSSL >= 3.5 itself (NOT oqs-provider — +# different code path, potentially different encodings; phase2-native must be +# native end to end) +if [ "$NATIVE_OK" = 1 ]; then + while IFS= read -r s; do + [ -z "$s" ] && continue + if gen_cert "$s" "native_$s"; then + NATIVE_SIG_OK+=("$s"); pqb_log "generated native PQ cert ($s)" + else + pqb_warn "could not generate NATIVE cert for sig alg '$s' (skipping)" + fi + done < <(read_native_list pq_sigs) +fi +if [ "$HAVE_OQS" = 1 ]; then + while IFS= read -r s; do + [ -z "$s" ] && continue + if gen_cert "$s" "pq_$s" "$PROV_ARGS"; then + SIG_OK_ALGS+=("$s"); pqb_log "generated PQ cert ($s)" + else + pqb_warn "could not generate cert for sig alg '$s' (skipping)" + fi + done < <(read_list sig_algs) +fi + +# Migration-phase classification for a (kem_group, sig_alg) cell: +# baseline = classical KEM group + classical signature (what Logos runs today) +# phase0 = PQ or hybrid KEM group + CLASSICAL signature (HNDL protection) +# phase2 = PQ signature (regardless of group) +phase_for() { + local kem_l sig_l pq_kem=0 + kem_l="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')" + sig_l="$(printf '%s' "$2" | tr '[:upper:]' '[:lower:]')" + case "$kem_l" in + *mlkem*|*kyber*|*frodo*|*hqc*|*bike*|*ntru*|*mceliece*) pq_kem=1 ;; + esac + case "$sig_l" in + ed25519|ed448|ecdsa*|rsa*|ecdsap*) + if [ "$pq_kem" = 1 ]; then echo phase0; else echo baseline; fi ;; + *) echo phase2 ;; + esac +} + +# run one matrix cell -> appends JSON object to $ROWS file +# run_cell +run_cell() { + local impl="$1" pfx="$2" kem="$3" sig="$4" + local label="${kem}+${sig}" + # shellcheck disable=SC2086 + $TASKSET "$BENCH" --group "$kem" --ca "$PKI/${pfx}_ca.pem" \ + --cert "$PKI/${pfx}_server.pem" --key "$PKI/${pfx}_server.key" \ + --connections "$CONNS" --warmup "$WARMUP" --label "$label" \ + --sig-alg "$sig" --phase "$(phase_for "$kem" "$sig")" \ + --implementation "$impl" 2>>"$PKI/bench_tls.err" +} + +ROWS="$PKI/rows.jsonl"; : > "$ROWS" + +# ---- baseline: classical pair, measured NATIVE (no provider involved) ------ +pqb_log "TLS baseline (openssl-native): $BASE_KEM + $BASE_SIG ($CONNS handshakes)" +run_cell openssl-native "base_$BASE_SIG" "$BASE_KEM" "$BASE_SIG" >> "$ROWS" \ + || pqb_warn "baseline TLS cell failed" + +# ---- openssl-native matrix ------------------------------------------------- +if [ "$NATIVE_OK" = 1 ]; then + NATIVE_CLASSICAL="$(python3 -c "import json,sys;print((json.loads(sys.argv[1]).get('native') or {}).get('classical_sig',''))" "$TLS_JSON")" + # phase0: hybrid + pure PQ groups with the CLASSICAL certificate (HNDL) + while IFS= read -r kem; do + [ -z "$kem" ] && continue + pqb_log "TLS native phase0: $kem + $NATIVE_CLASSICAL" + run_cell openssl-native "base_$NATIVE_CLASSICAL" "$kem" "$NATIVE_CLASSICAL" >> "$ROWS" \ + || pqb_warn "native cell $kem+$NATIVE_CLASSICAL failed" + done < <(read_native_list hybrid_groups; read_native_list pure_groups) + # phase2: X25519MLKEM768 + pure groups x native PQ sigs + if [ "${#NATIVE_SIG_OK[@]}" -gt 0 ]; then + while IFS= read -r kem; do + [ -z "$kem" ] && continue + for sig in "${NATIVE_SIG_OK[@]}"; do + pqb_log "TLS native phase2: $kem + $sig" + run_cell openssl-native "native_$sig" "$kem" "$sig" >> "$ROWS" \ + || pqb_warn "native cell $kem+$sig failed" + done + done < <(echo X25519MLKEM768; read_native_list pure_groups) + fi +fi + +# ---- oqs-provider matrix: (kem_groups x sig_algs) — only cells whose cert +# exists. Overlapping ML-DSA cells are deliberate (native-vs-provider delta); +# the falcon/sphincs cells exist ONLY here (draft TLS codepoints). +if [ "$HAVE_OQS" = 1 ] && [ "${#SIG_OK_ALGS[@]}" -gt 0 ]; then + while IFS= read -r kem; do + [ -z "$kem" ] && continue + for sig in "${SIG_OK_ALGS[@]}"; do + pqb_log "TLS cell (oqs-provider): $kem + $sig" + run_cell oqs-provider "pq_$sig" "$kem" "$sig" >> "$ROWS" \ + || pqb_warn "cell $kem+$sig failed" + done + done < <(read_list kem_groups) +fi + +# ---- rustls + aws-lc-rs matrix (implementation: rustls-awslc) --------------- +# Same phase structure, same in-memory methodology (pqb-rust-tls mirrors +# bench_tls.c). Reuses the SAME PEM certs: base_* for baseline/phase0 and the +# NATIVE OpenSSL-generated ML-DSA certs for phase2 (webpki needs the SAN that +# gen_cert now adds). Skipped gracefully without cargo. +RUSTLS_BIN="$ROOT/bench/rust-tls/target/release/pqb-rust-tls" +if command -v cargo >/dev/null 2>&1; then + pqb_log "building rustls harness (cargo build --release --locked)" + if (cd "$ROOT/bench/rust-tls" && cargo build --release --locked) >"$PKI/rustls_build.log" 2>&1; then + : + else + pqb_warn "rustls harness build failed (see $PKI/rustls_build.log) — rustls-awslc matrix skipped" + RUSTLS_BIN="" + fi +else + pqb_warn "cargo not installed — rustls-awslc TLS matrix skipped" + RUSTLS_BIN="" +fi +if [ -n "$RUSTLS_BIN" ] && [ -x "$RUSTLS_BIN" ]; then + [ -n "${PQB_RUSTLS_PROV:-}" ] && "$RUSTLS_BIN" --provenance > "$PQB_RUSTLS_PROV" + read_rustls_list() { python3 -c "import json,sys; print('\n'.join(((json.loads(sys.argv[1]).get('rustls') or {}).get(sys.argv[2])) or []))" "$TLS_JSON" "$1"; } + RUSTLS_CLASSICAL="$(python3 -c "import json,sys;print((json.loads(sys.argv[1]).get('rustls') or {}).get('classical_sig',''))" "$TLS_JSON")" + run_rustls_cell() { # + local pfx="$1" kem="$2" sig="$3" + local label="${kem}+${sig}" + # shellcheck disable=SC2086 + $TASKSET "$RUSTLS_BIN" --group "$kem" --ca "$PKI/${pfx}_ca.pem" \ + --cert "$PKI/${pfx}_server.pem" --key "$PKI/${pfx}_server.key" \ + --connections "$CONNS" --warmup "$WARMUP" --label "$label" \ + --sig-alg "$sig" --phase "$(phase_for "$kem" "$sig")" 2>>"$PKI/bench_tls.err" + } + pqb_log "TLS rustls baseline: X25519 + $BASE_SIG" + run_rustls_cell "base_$BASE_SIG" X25519 "$BASE_SIG" >> "$ROWS" \ + || pqb_warn "rustls baseline cell failed" + while IFS= read -r kem; do + [ -z "$kem" ] && continue + pqb_log "TLS rustls phase0: $kem + $RUSTLS_CLASSICAL" + run_rustls_cell "base_$RUSTLS_CLASSICAL" "$kem" "$RUSTLS_CLASSICAL" >> "$ROWS" \ + || pqb_warn "rustls cell $kem+$RUSTLS_CLASSICAL failed" + done < <(read_rustls_list hybrid_groups; read_rustls_list pure_groups) + if [ "${#NATIVE_SIG_OK[@]}" -gt 0 ]; then + while IFS= read -r kem; do + [ -z "$kem" ] && continue + for sig in "${NATIVE_SIG_OK[@]}"; do + pqb_log "TLS rustls phase2: $kem + $sig" + run_rustls_cell "native_$sig" "$kem" "$sig" >> "$ROWS" \ + || pqb_warn "rustls cell $kem+$sig failed" + done + done < <(echo X25519MLKEM768; read_rustls_list pure_groups) + else + pqb_warn "no native ML-DSA certs — rustls phase2 cells skipped" + fi + # SLH-DSA's absence from this stack is a FINDING, recorded in-data: across + # both production stacks (rustls/aws-lc-rs here, native OpenSSL above — + # draft TLS codepoints), SLH-DSA in TLS 1.3 exists only in the experimental + # oqs-provider. + printf '%s\n' '{"label":"X25519MLKEM768+SLH-DSA-SHA2-128f","group":"X25519MLKEM768","sig_alg":"SLH-DSA-SHA2-128f","phase":"phase2","implementation":"rustls-awslc","unstable_features":false,"enabled":false,"have_oqs_provider":false,"reason":"SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider"}' >> "$ROWS" +fi + +# ---- assemble tls.json ----------------------------------------------------- +python3 - "$ROWS" "$OUT" "$HAVE_OQS" "$BASE_KEM" "$BASE_SIG" <<'PY' +import json,sys +rows_path, out_path, have_oqs, base_kem, base_sig = sys.argv[1:6] +rows=[] +with open(rows_path) as f: + for line in f: + line=line.strip() + if line: + try: rows.append(json.loads(line)) + except json.JSONDecodeError: pass +out={ + "available": True, + "have_oqs_provider": have_oqs=="1", + "baseline": {"kem_group": base_kem, "sig_alg": base_sig, "label": f"{base_kem}+{base_sig}"}, + "matrix": rows, +} +json.dump(out, open(out_path,"w"), indent=2) +print(f"wrote {out_path}: {len(rows)} cells (have_oqs={have_oqs})") +PY diff --git a/tools/benchmarks/pqc/config.yaml b/tools/benchmarks/pqc/config.yaml new file mode 100644 index 0000000..3f58a43 --- /dev/null +++ b/tools/benchmarks/pqc/config.yaml @@ -0,0 +1,245 @@ +# ============================================================================= +# pqc-bench candidate configuration +# +# This file is the single place users edit to extend the benchmark. The harness +# reads it with a dependency-free YAML subset parser (bench/lib/miniyaml.py), so +# keep to the simple shape used below: top-level maps, lists of scalars, and +# lists of "- key: value" maps. Comments (#) and quotes are fine. +# +# Algorithm names must match liboqs / oqs-provider identifiers exactly. To see +# what your built liboqs supports: ./vendor/liboqs/build/tests/test_kem (lists) +# or check the dashboard's "available algorithms" note after a run. +# ============================================================================= + +# ---- measurement knobs ------------------------------------------------------ +# Default sizing is PER-OPERATION AUTO-CALIBRATION: each op (keygen/encaps/sign/ +# ...) is timed long enough to accumulate ~target_time_ms of work, clamped to +# [min_samples, max_iters]. This makes an 18 us ML-KEM keygen and a ~750 ms +# SLH-DSA sign both yield a stable median without a hand-tuned per-alg count: +# - fast ops are bounded by max_iters +# - slow ops are bounded by min_samples (so even ~1 op per target still gets +# enough samples for a stable median/MAD) +# To force FIXED counts instead, pass `./run.sh --iters N` — that disables +# calibration and uses the warmup_iters/timed_iters fallback below. +measurement: + target_time_ms: 250 # auto: aggregate timed work to put on each op + min_samples: 30 # auto: floor on timed iters/rep (stable median+MAD) + max_iters: 20000 # auto: ceiling on timed iters/rep (caps fast ops) + repetitions: 5 # independent repetitions (fresh process each time) + cycles_mode: auto # auto | on | off (PMU userspace cycle counting) + # ---- fixed-count fallback (only used when ./run.sh --iters is given) ---- + warmup_iters: 1000 # untimed iterations to settle caches/branch predictors + timed_iters: 10000 # timed iterations per repetition + +# ---- security_level (NIST category) ---------------------------------------- +# Every candidate carries `security_level: N` — the NIST PQC category the +# parameter set targets (1/2/3/5) — used only to group algorithms on the charts. +# The mapping is PER-SCHEME, so different schemes reach the same security target +# with different-looking sets: a level 1 sitting next to a level 2 is the real +# NIST categorization, not a typo. Notably: +# - ML-KEM-512, Falcon-512, X25519 -> Category 1 +# - ML-DSA-44 -> Category 2 (FIPS 204 defines NO +# Category-1 ML-DSA; -44 is its +# smallest set and lands at Cat 2) +# - ML-KEM-768 / ML-DSA-65 -> Category 3 +# - ML-KEM-1024 / ML-DSA-87 / Falcon-1024 -> Category 5 +# (NIST levels: 1 ~ AES-128, 2 ~ SHA-256 collision, 3 ~ AES-192, 5 ~ AES-256.) + +# ---- KEMs ------------------------------------------------------------------ +# baseline = the classical reference Logos uses TODAY (drawn on every chart). +kem: + baseline: + - name: X25519 + classical: true + security_level: 1 # NIST category (see "security_level" note above) + candidates: + - name: ML-KEM-512 + security_level: 1 + - name: ML-KEM-768 + security_level: 3 + - name: ML-KEM-1024 + security_level: 5 + # Hybrids (classical + PQ) — these are oqs-provider TLS group names; for the + # raw KEM bench they are skipped unless liboqs exposes them as a KEM. + - name: X25519MLKEM768 + security_level: 3 + hybrid: true + - name: SecP256r1MLKEM768 + security_level: 3 + hybrid: true + # --- Code-based + conservative-LWE backup candidates (added 2026-06) ------- + # Verified enabled in the linked liboqs 0.15.0 build via OQS_KEM_alg_is_enabled + # (oqsconfig.h + runtime cross-check). Keygen/encaps/decaps are reported as + # separate ops so the docs' "keygen is a one-time setup cost" argument can show + # the (slow) McEliece keygen explicitly next to its tiny ciphertext. + # + # Classic McEliece — code-based. Huge public key, TINY ciphertext, very slow + # keygen on the Pi (auto-calibration clamps keygen to min_samples=30, like + # SLH-DSA sign); encaps/decaps are fast and calibrate normally. Standard sets, + # plus the 460896f fast-keygen variant directly next to standard 460896: same + # params and same tiny ciphertext but a faster keygen, so the pair gives the + # keygen trade-off directly (the most useful McEliece data point for the + # migration doc). Other f-variants omitted as redundant. + - name: Classic-McEliece-348864 + security_level: 1 + - name: Classic-McEliece-460896 + security_level: 3 + - name: Classic-McEliece-460896f + security_level: 3 + - name: Classic-McEliece-6688128 + security_level: 5 + - name: Classic-McEliece-6960119 + security_level: 5 + - name: Classic-McEliece-8192128 + security_level: 5 + # FrodoKEM — conservative (unstructured) LWE. ~100x slower encaps/decaps than + # ML-KEM and ~15x larger ciphertext. AES variant (uses ARM AES instructions, + # which this build compiles in); SHAKE variants also available if needed. + - name: FrodoKEM-640-AES + security_level: 1 + - name: FrodoKEM-976-AES + security_level: 3 + - name: FrodoKEM-1344-AES + security_level: 5 + # FrodoKEM SHAKE variants — same algorithm and arithmetic as the AES rows, + # different symmetric primitive (SHAKE via the OQS SHA-3 layer instead of + # AES via OpenSSL EVP). Added as the controlled test of the companion + # document's claim that the M3's FrodoKEM lead comes from hardware AES: + # if the AES rows show a large cross-platform gap while these SHAKE rows + # sit near the portable-C norm, the AES attribution is isolated; if both + # move together, the cause is elsewhere. + - name: FrodoKEM-640-SHAKE + security_level: 1 + - name: FrodoKEM-976-SHAKE + security_level: 3 + - name: FrodoKEM-1344-SHAKE + security_level: 5 + # HQC-128/192/256: NOT enabled in this liboqs 0.15.0 build (disabled upstream + # after the IND-CCA2 implementation issue; oqsconfig.h has it #undef and the + # runtime OQS_KEM_alg_is_enabled returns 0). Intentionally omitted rather than + # listed-and-disabled. Re-add once linked against a liboqs with HQC re-enabled. + +# ---- Signatures ------------------------------------------------------------ +sig: + baseline: + - name: Ed25519 + classical: true + security_level: 1 + candidates: + - name: ML-DSA-44 + security_level: 2 # Cat 2, not 1 — FIPS 204 has no Cat-1 ML-DSA (see note above) + - name: ML-DSA-65 + security_level: 3 + - name: ML-DSA-87 + security_level: 5 + - name: Falcon-512 + security_level: 1 + - name: Falcon-1024 + security_level: 5 + # Hash-based signatures — BOTH generations measured side by side: + # + # SLH-DSA (FIPS 205 final, "pure" variants) — the standardised algorithm. + # Identifiers verified by instantiating them in the vendored liboqs 0.15.0 + # build (claimed NIST levels 1/1/3/5 confirmed at runtime). liboqs 0.16.0 + # removes SPHINCS+ entirely, so these are also the forward-compatible rows. + - name: SLH_DSA_PURE_SHA2_128F + security_level: 1 + - name: SLH_DSA_PURE_SHA2_128S + security_level: 1 + - name: SLH_DSA_PURE_SHA2_192F + security_level: 3 + - name: SLH_DSA_PURE_SHA2_256F + security_level: 5 + # SPHINCS+ (round-3 "simple" sets) — a DIFFERENT algorithm from FIPS 205 + # SLH-DSA, not a relabelling. Kept alongside so (a) new runs compare + # directly against the three published RPi5 baselines that measured these, + # and (b) the TLS matrix's oqs-provider `sphincssha2128fsimple` cell keeps + # a matching primitive row for its handshake_primitive_sum. Will drop when + # we move to liboqs 0.16.0 (which removes SPHINCS+). + - name: SPHINCS+-SHA2-128f-simple + security_level: 1 + - name: SPHINCS+-SHA2-128s-simple + security_level: 1 + - name: SPHINCS+-SHA2-192f-simple + security_level: 3 + - name: SPHINCS+-SHA2-256f-simple + security_level: 5 + # --- extend here --- + +# ---- TLS 1.3 handshake matrix ---------------------------------------------- +# Two implementations, both full TLS 1.3 handshakes over the same in-process +# harness (bench_tls.c): +# openssl-native : OpenSSL >= 3.5's own PQC (production-relevant path); the +# harness ASSERTS no OQS provider is loaded for these rows. +# oqs-provider : liboqs algorithms via the experimental provider; the only +# way to get an SLH-DSA TLS row today (IETF codepoints for +# SLH-DSA in TLS 1.3 are still draft, so native OpenSSL can +# issue SLH-DSA certs but cannot negotiate them). +# Every cell carries phase: baseline (classical KEM + classical sig), +# phase0 (PQ/hybrid KEM + classical sig — HNDL protection), phase2 (PQ sig). +# The classical baseline pair is ALWAYS included, measured natively. +tls: + baseline: + kem_group: X25519 + sig_alg: ed25519 # OpenSSL classical auth Logos uses today + connections: 1000 # handshakes per cell + + # ---- openssl-native matrix (group/sig names are OpenSSL's own) ---------- + native: + hybrid_groups: + - X25519MLKEM768 + - SecP256r1MLKEM768 + pure_groups: + - MLKEM512 + - MLKEM768 + - MLKEM1024 + classical_sig: ed25519 # phase0 rows (and the baseline cert) + # phase2 = X25519MLKEM768 + pure_groups x pq_sigs. SecP256r1MLKEM768 is + # phase0-only by design (Ed25519 is our classical signature; no ECDSA). + pq_sigs: + - ML-DSA-44 + - ML-DSA-65 + - ML-DSA-87 + + # ---- rustls + aws-lc-rs matrix (implementation: rustls-awslc) ----------- + # The Rust TLS stack, same phase structure. Coverage facts (recorded as + # enabled:false rows, not hidden): rustls 0.23 has no MLKEM512 group, and + # SLH-DSA is absent from rustls/aws-lc-rs entirely — so across BOTH + # production stacks SLH-DSA in TLS exists only in the experimental + # oqs-provider. ML-DSA rows ride UNSTABLE cargo features + # (rustls-post-quantum/aws-lc-rs-unstable) and carry unstable_features:true. + rustls: + hybrid_groups: + - X25519MLKEM768 + - SecP256r1MLKEM768 + pure_groups: + - MLKEM512 + - MLKEM768 + - MLKEM1024 + classical_sig: ed25519 + pq_sigs: + - ML-DSA-44 + - ML-DSA-65 + - ML-DSA-87 + + # ---- oqs-provider matrix (oqs-provider TLS group/sig names) ------------- + # Kept in full: the ML-DSA cells overlap with the native matrix on purpose + # (same protocol + algorithms under two stacks isolates provider overhead), + # and the falcon/sphincs cells exist ONLY here. + kem_groups: + - X25519MLKEM768 + - SecP256r1MLKEM768 + - mlkem512 + - mlkem768 + - mlkem1024 + sig_algs: + - mldsa44 + - mldsa65 + - mldsa87 + - falcon512 + - sphincssha2128fsimple + +# ---- future phase (NOT implemented now — hooks only) ----------------------- +# zk: +# snark: [] # e.g. groth16, plonk, halo2 +# stark: [] # e.g. risc0, winterfell diff --git a/tools/benchmarks/pqc/dashboard/README.md b/tools/benchmarks/pqc/dashboard/README.md new file mode 100644 index 0000000..d2c9e2c --- /dev/null +++ b/tools/benchmarks/pqc/dashboard/README.md @@ -0,0 +1,85 @@ +# Dashboard + +Static, no-backend dashboard (Chart.js) for the merged benchmark dataset. + +## Viewing it — must be served over HTTP + +The page loads `data/merged.json` with `fetch()`. Browsers block that fetch for +pages opened as plain files (`file://` origins have no cross-origin rights), so +**opening `index.html` directly shows empty charts**. Serve the directory over +HTTP instead: + +```sh +cd dashboard +python3 -m http.server 8000 +# open http://localhost:8000 (or http://:8000 from another machine) +``` + +Any static host works the same way (GitHub Pages included — deploy this +directory as-is). + +## What the merged dataset contains + +`data/merged.json` is produced by `analyze/merge.py` (schema `2.0.0`). Run with +no arguments it merges exactly the files pinned in +`analyze/published_runs.txt` — the published Logos snapshot set cited by the +companion document's provenance section: the consolidated baseline-grade RPi5 +run, the consolidated Mac (Apple M3) cross-platform run (not baseline-grade; +hidden by the dashboard's default filter), and the community RPi5 run +(`thomas-pi-*`; merged once its file lands in `results/`). Ad-hoc dev runs in +`results/` never enter the published dataset unless added to that manifest. + +Contents: + +- `runs[]` — one record per source file: host facts, toolchain provenance + (liboqs/OpenSSL/oqs-provider versions + commits, build flags), thermal + summary, and the `is_baseline_grade` verdict with reasons. +- `kem[]` / `sig[]` — flat per-(run, algorithm, operation) rows: median/MAD/ + IQR/min/stddev/ops-per-sec, sizes, NIST level, `classical` flag, + `implementation` (which library produced the measurement — `liboqs`, + `openssl`; later stages add `rustcrypto`), and the per-algorithm + `total_sum_of_medians_ns` aggregate (derived: sum of per-op medians). +- `tls[]` — flat per-(run, matrix-cell) rows: handshake latency median, + handshakes/sec, bytes on wire, ClientHello size + fragmentation flag, plus + `phase` (`baseline` / `phase0` / `phase2` migration phases), `sig_alg`, + `implementation` (`oqs-provider` today; later stages add `openssl-native` + and `rustls-awslc`), and `primitive_sum_of_medians_ns` — the sum of the + primitive operations one handshake performs (with + `primitive_sum_complete=false` when a component, e.g. P-256 ECDH, is not + measured as a primitive). Full per-component breakdowns live in the source + results files under `tls.matrix[].handshake_primitive_sum`. + +Schema-1.0.0 result files are merged compatibly (`backend` → +`implementation`, phase inferred, totals derived) without rewriting them. + +## Views + +- **TLS migration phases** — baseline → phase0 → phase2 for a chosen group + family and stack, latency and bytes-on-wire side by side, **Pi and Mac in + the same chart** (Mac bars translucent), with ×multipliers vs each + platform's own classical baseline. The ◆ marker on latency bars is the + handshake's **sum of primitive-operation medians** (derived, not measured — + labelled as such in the panel); the gap to the bar top is protocol overhead. +- **Full handshake matrix** — every cell of the selected run, colored by + phase, banded by stack; ᵁ marks rows riding unstable cargo features. Plus + the ClientHello chart with the ~1400 B MSS line (orange border = fragments). +- **Cross-implementation primitives** — same algorithm measured by + independent implementations (Pi solid / Mac translucent), log axis by + default. Acceleration context appears three ways: hatched bars = portable + code path (secondary cue), tooltips carry the full per-row acceleration + record, and the **always-visible acceleration table** underneath + (arithmetic path, symmetric path, per-platform hardware-instruction status) + is authoritative — so asm-vs-portable is never mistaken for implementation + quality. +- **Primitives by security level** — the original charts, preserved, with an + implementation filter (classical anchors come from the matching family: + openssl for liboqs, in-family for the Rust groups) and log axes by default + so five orders of magnitude (16 µs ML-KEM keygen … 0.5 s SLH-DSA-128s sign) + are all visible; linear toggle for same-magnitude comparison. +- **Deliberate absences** — disabled rows rendered as cards with their + verbatim reasons (SLH-DSA-in-TLS first: unavailable in both production + stacks, oqs-provider only). Never bars, never zeros, never filtered away. + +Both published runs are **shown by default**: the Pi card is baseline-grade, +the Mac card is labelled "cross-platform reference — not baseline-grade" with +its reasons expandable — a labelling distinction, not a visibility one. diff --git a/tools/benchmarks/pqc/dashboard/app.js b/tools/benchmarks/pqc/dashboard/app.js new file mode 100644 index 0000000..d4f319a --- /dev/null +++ b/tools/benchmarks/pqc/dashboard/app.js @@ -0,0 +1,604 @@ +/* pq-bench-rpi5 dashboard — pure client-side, reads a merged.json produced by + * analyze/merge.py. No backend. + * + * Views (stage-6): TLS migration phases (Pi + Mac side by side), the full + * three-stack handshake matrix, cross-implementation primitive comparison with + * always-visible acceleration context, the original security-level charts + * (preserved), and a deliberate-absences panel. All runs are SHOWN and + * labelled — baseline-grade vs cross-platform-reference is a labelling + * distinction, never a visibility one. */ + +const LEVEL_COLORS = { 1:"#3bd67a", 2:"#46c0c0", 3:"#3a7bff", 5:"#b06bff", 0:"#888" }; +const BASE_COLOR = "#e0533d", PQ_COLOR = "#3a7bff"; +const PHASE_COLORS = { baseline:"#e0533d", phase0:"#3bd67a", phase2:"#b06bff" }; +const IMPL_COLORS = { liboqs:"#3a7bff", "aws-lc-rs":"#2fbfa7", + rustcrypto:"#f28c3b", openssl:"#e0533d" }; +const IMPL_ORDER = ["liboqs", "aws-lc-rs", "rustcrypto", "openssl"]; +const TLS_IMPLS = ["openssl-native", "oqs-provider", "rustls-awslc"]; + +let MERGED = null, CHARTS = []; +const UI = { phaseFamily:"X25519MLKEM768", phaseImpl:"openssl-native", + tlsRun:null, lvlRun:null, lvlImpl:"liboqs", + xKemOp:"keygen", xSigOp:"sign" }; + +const $ = (id) => document.getElementById(id); +const nsToMs = (ns) => (ns || 0) / 1e6; +const norm = (s) => (s||"").toLowerCase().replace(/[^a-z0-9]/g, ""); + +/* compact ms label: more decimals for small values, fewer for large. Guards its + * input — Chart.js may hand a value-label formatter a parsed {x,y} point or a + * non-number. */ +const fmtMs = (v) => { + const ms = typeof v === "number" ? v + : (v && typeof v === "object") ? (typeof v.y === "number" ? v.y : NaN) + : Number(v); + if (!Number.isFinite(ms)) return ""; + return ms>=100?ms.toFixed(0):ms>=10?ms.toFixed(1):ms>=1?ms.toFixed(2):ms.toFixed(3); +}; +/* human tick labels for log axes spanning µs..s (values are in ms) */ +const logTick = (v) => { + const l = Math.log10(v); + if (Math.abs(l - Math.round(l)) > 1e-9) return ""; + if (v < 1) return (v*1000) + " µs"; + if (v < 1000) return v + " ms"; + return (v/1000) + " s"; +}; +const logScale = (label) => ({ type:"logarithmic", + title:{display:true,text:label+" (log)",color:"#9aa3b2"}, + ticks:{color:"#9aa3b2", callback:logTick, autoSkip:false} }); +const linScale = (label) => ({ type:"linear", + title:{display:true,text:label,color:"#9aa3b2"}, ticks:{color:"#9aa3b2"} }); + +/* diagonal-hatch canvas pattern (secondary cue for portable code paths) */ +const PATTERNS = {}; +function hatch(color, alpha=1) { + const key = color + alpha; + if (PATTERNS[key]) return PATTERNS[key]; + const c = document.createElement("canvas"); c.width = c.height = 8; + const x = c.getContext("2d"); + x.globalAlpha = alpha; + x.fillStyle = color; x.fillRect(0,0,8,8); + x.globalAlpha = 1; + x.strokeStyle = "rgba(15,17,21,0.65)"; x.lineWidth = 2; + x.beginPath(); x.moveTo(-2,6); x.lineTo(6,-2); x.moveTo(2,10); x.lineTo(10,2); x.stroke(); + return PATTERNS[key] = x.createPattern(c, "repeat"); +} +function withAlpha(hex, a) { + const n = parseInt(hex.slice(1), 16); + return `rgba(${n>>16},${(n>>8)&255},${n&255},${a})`; +} + +/* Inline plugin: value labels above bars. formatter(value, index, dsIndex). */ +const valueLabels = { + id: "valueLabels", + afterDatasetsDraw(chart) { + /* NB: formatters live on chart.$pqb, NOT in options — Chart.js v4 resolves + * plugin options through a scriptable-options proxy that INVOKES functions + * while resolving them (formatter->valueOf recursion). */ + const opt = chart.$pqb || {}; + if (!opt.formatter) return; + const ctx = chart.ctx; + ctx.save(); + ctx.fillStyle = "#e6e8ee"; ctx.font = "10px sans-serif"; + ctx.textAlign = "center"; ctx.textBaseline = "bottom"; + chart.data.datasets.forEach((ds, di) => { + const meta = chart.getDatasetMeta(di); + if (meta.hidden) return; + meta.data.forEach((el, i) => { + const v = ds.data[i]; + if (v == null) return; + /* opt.stagger: alternate label heights per dataset so side-by-side + * near-equal bars (Pi vs Mac) don't overprint each other */ + const dy = opt.stagger ? (di % 2 ? 14 : 3) : 3; + ctx.fillText(opt.formatter(v, i, di), el.x, el.y - dy); + }); + }); + ctx.restore(); + } +}; +/* Inline plugin: ◆ markers inside bars (the primitive-sum-of-medians overlay). + * options.plugins.sumMarkers.values[dsIndex][i] = value in axis units or null. */ +const sumMarkers = { + id: "sumMarkers", + afterDatasetsDraw(chart) { + const opt = chart.$pqb || {}; + if (!opt.sums) return; + const y = chart.scales.y, ctx = chart.ctx; + ctx.save(); + chart.data.datasets.forEach((ds, di) => { + const meta = chart.getDatasetMeta(di); + if (meta.hidden) return; + meta.data.forEach((el, i) => { + const v = (opt.sums[di]||[])[i]; + if (v == null) return; + const py = y.getPixelForValue(v); + ctx.fillStyle = "#ffe066"; + ctx.beginPath(); + ctx.moveTo(el.x, py-5); ctx.lineTo(el.x+5, py); + ctx.lineTo(el.x, py+5); ctx.lineTo(el.x-5, py); + ctx.closePath(); ctx.fill(); + }); + }); + ctx.restore(); + } +}; +if (window.Chart) { Chart.register(valueLabels); Chart.register(sumMarkers); } + +async function boot() { + $("fileInput").addEventListener("change", onFile); + $("tlsLog").addEventListener("change", render); + $("xLog").addEventListener("change", render); + $("lvlLog").addEventListener("change", render); + try { + const r = await fetch("data/merged.json", { cache: "no-store" }); + if (r.ok) { MERGED = await r.json(); afterLoad(); } + else showEmpty("No data/merged.json yet. Run a benchmark, then: " + + "python3 analyze/merge.py — or load a results file above."); + } catch (e) { + showEmpty("Could not auto-load data/merged.json (open via a local server or use the file picker)."); + } +} + +function onFile(ev) { + const f = ev.target.files[0]; if (!f) return; + const rd = new FileReader(); + rd.onload = () => { + const d = JSON.parse(rd.result); + MERGED = d.merged_schema ? d : wrapSingle(d); + afterLoad(); + }; + rd.readAsText(f); +} + +/* wrap a single results JSON into the merged shape so the picker works too */ +function wrapSingle(d) { + const rid = `${(d.host||{}).hostname}@${d.generated_utc}`; + const meta = { run_id: rid, hostname:(d.host||{}).hostname, cpu_brand:(d.host||{}).cpu_brand, + is_rpi:(d.host||{}).is_rpi, is_baseline_grade:d.is_baseline_grade }; + const kem=[], sig=[], tls=[], kem_absent=[], sig_absent=[], tls_absent=[]; + const prim = (rows, out, absent) => (rows||[]).forEach(k => { + if (!k.enabled) { absent.push({...meta, alg:k.alg, + implementation:k.implementation||k.backend, reason:k.reason||""}); return; } + Object.entries(k.operations||{}).forEach(([op,st]) => + out.push({...meta, alg:k.alg, implementation:k.implementation||k.backend, + classical:!!k.classical, nist_level:k.claimed_nist_level, + operation:op, median_ns:st.median, sizes:k.sizes, + acceleration:k.acceleration})); + }); + prim(d.kem, kem, kem_absent); prim(d.sig, sig, sig_absent); + ((d.tls||{}).matrix||[]).forEach(c => { + const sig_alg = c.sig_alg || ((c.label||"").split("+")[1]||""); + if (!c.enabled) { tls_absent.push({...meta, label:c.label, group:c.group, + sig_alg, phase:c.phase||"", implementation:c.implementation||"oqs-provider", + unstable_features:!!c.unstable_features, reason:c.reason||""}); return; } + tls.push({...meta, label:c.label, group:c.group, sig_alg, + phase:c.phase, implementation:c.implementation||"oqs-provider", + unstable_features:!!c.unstable_features, + is_baseline_pair:c.label===((d.tls||{}).baseline||{}).label, + handshakes_per_sec:c.handshakes_per_sec, median_ns:(c.handshake_latency_ns||{}).median, + primitive_sum_of_medians_ns:((c.handshake_primitive_sum||{}).sum_of_medians_ns), + bytes_total:(c.bytes_on_wire||{}).total, client_hello_bytes:c.client_hello_bytes, + client_hello_fragmented:c.client_hello_fragmented}); + }); + return { merged_schema:"single", n_runs:1, + runs:[{run_id:rid, host:d.host, is_baseline_grade:d.is_baseline_grade, + baseline_grade_reasons:d.baseline_grade_reasons||[], toolchain:d.toolchain, + cpu_features:d.cpu_features, run:d.run, + thermal_summary:{temp_c:(d.thermal_trace||{}).temp_c, + throttling_detected:(d.thermal_trace||{}).throttling_detected}, + generated_utc:d.generated_utc}], + kem, sig, tls, kem_absent, sig_absent, tls_absent }; +} + +/* short platform tag for legends: "Pi 5" / "M3" style, from the host brand */ +function runTag(r) { + const b = ((MERGED.runs.find(x=>x.run_id===r.run_id)||r).host||{}).cpu_brand || + r.cpu_brand || r.hostname || "?"; + if (/raspberry/i.test(b)) return "Pi 5"; + const m = b.match(/Apple (M\d+(?: \w+)?)/i); + if (m) return m[1]; + const clean = b.replace(/\((R|TM)\)/gi, ""); + const x86 = clean.match(/(Ultra \d+|i\d-\w+|Ryzen \d( \w+)?)/i); + return x86 ? x86[1] : clean.split(/\s+/).slice(0,2).join(" "); +} +function runsOrdered() { // baseline-grade first + return MERGED.runs.slice().sort((a,b)=>(b.is_baseline_grade?1:0)-(a.is_baseline_grade?1:0)); +} + +function afterLoad() { + const runs = runsOrdered(); + UI.tlsRun = UI.tlsRun || runs[0].run_id; + UI.lvlRun = UI.lvlRun || runs[0].run_id; + renderRunCards(); + buildPills("phaseFamily", ["X25519MLKEM768","MLKEM768","MLKEM1024"], "phaseFamily"); + buildPills("phaseImpl", TLS_IMPLS, "phaseImpl"); + buildPills("tlsRun", runs.map(r=>({v:r.run_id, t:runTag({run_id:r.run_id})})), "tlsRun"); + buildPills("lvlRun", runs.map(r=>({v:r.run_id, t:runTag({run_id:r.run_id})})), "lvlRun"); + buildPills("lvlImpl", IMPL_ORDER.filter(i=>i!=="openssl"), "lvlImpl"); + buildPills("xKemOp", ["keygen","encaps","decaps"], "xKemOp"); + buildPills("xSigOp", ["keygen","sign","verify"], "xSigOp"); + render(); +} + +function buildPills(elId, items, key) { + const el = $(elId); el.innerHTML = ""; + items.forEach(it => { + const v = typeof it === "string" ? it : it.v; + const t = typeof it === "string" ? it : it.t; + const s = document.createElement("span"); + s.className = "pill" + (UI[key] === v ? " on" : ""); + s.textContent = t; + s.onclick = () => { UI[key] = v; + el.querySelectorAll(".pill").forEach(p=>p.classList.remove("on")); + s.classList.add("on"); render(); }; + el.appendChild(s); + }); +} + +function render() { + if (!MERGED) return; + CHARTS.forEach(c => c.destroy()); CHARTS = []; + phasePanel(); + tlsMatrix(); + clientHello(); + crossImpl("ximpl_kem", MERGED.kem, UI.xKemOp, "KEM — " + UI.xKemOp); + crossImpl("ximpl_sig", MERGED.sig, UI.xSigOp, "Signatures — " + UI.xSigOp); + accelTable(); + levelCharts(); + absencesPanel(); +} + +/* ---- run cards -------------------------------------------------------------- */ +function renderRunCards() { + const el = $("run-cards"); el.innerHTML = ""; + runsOrdered().forEach(r => { + const h = r.host||{}, t = r.toolchain||{}, th = r.thermal_summary||{}; + const good = r.is_baseline_grade; + const card = document.createElement("div"); + card.className = "run-card " + (good ? "good" : "ref"); + const reasons = (r.baseline_grade_reasons||[]).map(x=>`
  • ${x}
  • `).join(""); + card.innerHTML = + `${good ? "✅ baseline-grade (RPi5 reference)" + : "⚠ cross-platform reference — not baseline-grade"}
    ` + + `${h.cpu_brand||"?"} · ${h.os_pretty||h.os||"?"} · ${r.generated_utc||""}` + + (good ? "" : `
    why it doesn't meet the reference bar
      ${reasons}
    `) + + `
    ` + + `flags ${t.cflags_target||"?"}` + + `openssl ${t.openssl||"?"}` + + `liboqs ${(t.liboqs_commit||"").slice(0,8)}` + + `rust ${(t.rust&&t.rust.available)?"✓":"—"}` + + `temp ${th.temp_c?th.temp_c.max+"°C max":"n/a"}${th.throttling_detected?" ⚠":""}` + + `
    `; + el.appendChild(card); + }); +} + +/* ---- TLS phase panel (Pi + Mac side by side) -------------------------------- */ +function tlsCell(rows, rid, impl, group, sig) { + return rows.find(r => r.run_id===rid && r.implementation===impl && + norm(r.group)===norm(group) && norm(r.sig_alg)===norm(sig)); +} +function phaseSteps(family) { + return [ + { name:"baseline", group:"X25519", sig:"ed25519", phase:"baseline" }, + { name:"phase 0", group:family, sig:"ed25519", phase:"phase0" }, + { name:"phase 2 · 44", group:family, sig:"ML-DSA-44", phase:"phase2" }, + { name:"phase 2 · 65", group:family, sig:"ML-DSA-65", phase:"phase2" }, + { name:"phase 2 · 87", group:family, sig:"ML-DSA-87", phase:"phase2" }, + ]; +} +function phasePanel() { + const steps = phaseSteps(UI.phaseFamily); + const runs = runsOrdered(); + const latDs = [], byteDs = [], sums = []; + runs.forEach((run, ri) => { + const tag = runTag({run_id:run.run_id}); + const cells = steps.map(s => tlsCell(MERGED.tls, run.run_id, UI.phaseImpl, s.group, s.sig)); + const base = cells[0]; + const colors = steps.map((s,i) => { + const c = PHASE_COLORS[s.phase]; + return ri === 0 ? c : withAlpha(c, 0.45); + }); + latDs.push({ label:tag, data:cells.map(c=>c?nsToMs(c.median_ns):null), + backgroundColor:colors, borderColor:steps.map(s=>PHASE_COLORS[s.phase]), + borderWidth:ri===0?0:1.5, + _mult: cells.map(c => (c && base) ? c.median_ns/base.median_ns : null) }); + sums.push(cells.map(c => (c && c.primitive_sum_of_medians_ns) + ? nsToMs(c.primitive_sum_of_medians_ns) : null)); + byteDs.push({ label:tag, data:cells.map(c=>c?c.bytes_total:null), + backgroundColor:colors, borderColor:steps.map(s=>PHASE_COLORS[s.phase]), + borderWidth:ri===0?0:1.5, + _mult: cells.map(c => (c && base) ? c.bytes_total/base.bytes_total : null) }); + }); + const labels = steps.map(s=>s.name); + const multFmt = (dsArr) => (v,i,di) => { + const m = ((dsArr[di]||{})._mult||[])[i]; + return m ? `${fmtMs(v)} ×${m.toFixed(2)}` : fmtMs(v); + }; + const anyData = latDs.some(d => d.data.some(v => v != null)); + if (!anyData) { + drawEmpty("phase_latency", `${UI.phaseImpl} has no cells for this family (see absences)`); + drawEmpty("phase_bytes", ""); + return; + } + mkChart("phase_latency", { type:"bar", + data:{ labels, datasets:latDs }, + options:{ responsive:true, plugins:{ + title:{display:true, text:`Handshake latency by phase — ${UI.phaseFamily} · ${UI.phaseImpl}`, color:"#e6e8ee"}, + legend:{labels:{color:"#9aa3b2"}}, + tooltip:{callbacks:{ label:(it)=>`${it.dataset.label}: ${fmtMs(it.raw)} ms`, + afterLabel:(it)=>{ const s=(sums[it.datasetIndex]||[])[it.dataIndex]; + return s?`primitive sum-of-medians: ${fmtMs(s)} ms (derived)`:""; } }} }, + scales:{ x:{ticks:{color:"#9aa3b2"}}, y:linScale("median handshake latency (ms)") } }}, + { stagger:true, formatter: multFmt(latDs), sums }); + mkChart("phase_bytes", { type:"bar", + data:{ labels, datasets:byteDs }, + options:{ responsive:true, plugins:{ + title:{display:true, text:`Bytes on the wire by phase — ${UI.phaseFamily} · ${UI.phaseImpl}`, color:"#e6e8ee"}, + legend:{labels:{color:"#9aa3b2"}}, + tooltip:{callbacks:{label:(it)=>`${it.dataset.label}: ${it.raw.toLocaleString()} B`}} }, + scales:{ x:{ticks:{color:"#9aa3b2"}}, y:linScale("bytes on the wire") } }}, + { stagger:true, formatter:(v,i,di)=>{ const m=((byteDs[di]||{})._mult||[])[i]; + return m?`${(v/1000).toFixed(1)}kB ×${m.toFixed(2)}`:`${(v/1000).toFixed(1)}kB`; } }); +} + +/* ---- TLS full matrix -------------------------------------------------------- */ +function tlsMatrix() { + const rows = MERGED.tls.filter(r => r.run_id === UI.tlsRun); + if (!rows.length) return drawEmpty("tls_hs", "no TLS rows for this run"); + const implRank = (i)=>TLS_IMPLS.indexOf(i); + const phaseRank = {baseline:0, phase0:1, phase2:2}; + const data = rows.slice().sort((a,b)=> implRank(a.implementation)-implRank(b.implementation) + || (phaseRank[a.phase]??3)-(phaseRank[b.phase]??3) + || (b.handshakes_per_sec||0)-(a.handshakes_per_sec||0)); + const labels = data.map(r=>`${r.implementation} · ${r.label}${r.unstable_features?" ᵁ":""}`); + const log = $("tlsLog").checked; + mkChart("tls_hs", { type:"bar", + data:{ labels, datasets:[{ label:"handshakes/sec", + data:data.map(r=>r.handshakes_per_sec), + backgroundColor:data.map(r=>PHASE_COLORS[r.phase]||PQ_COLOR) }] }, + options:{ indexAxis:"y", responsive:true, maintainAspectRatio:false, plugins:{ + title:{display:true,text:`TLS 1.3 handshake throughput — ${runTag({run_id:UI.tlsRun})} (red=baseline, green=phase0, purple=phase2)`,color:"#e6e8ee"}, + legend:{display:false}, + tooltip:{callbacks:{afterLabel:(it)=>{ const r=data[it.dataIndex]; + return `${r.phase} · median ${fmtMs(nsToMs(r.median_ns))} ms` + + (r.unstable_features?" · unstable cargo features":""); }}} }, + scales:{ x: log ? {...logScale("handshakes/sec"), + ticks:{color:"#9aa3b2",callback:(v)=>{const l=Math.log10(v); + return Math.abs(l-Math.round(l))<1e-9?v.toLocaleString():"";}}} + : linScale("handshakes/sec"), + y:{ticks:{color:"#9aa3b2",font:{size:9.5}}} } }}); +} + +function clientHello() { + const rows = MERGED.tls.filter(r => r.run_id === UI.tlsRun); + if (!rows.length) return drawEmpty("tls_chello", "no TLS rows"); + const seen = new Set(); const data = []; + rows.slice().sort((a,b)=>(b.client_hello_bytes||0)-(a.client_hello_bytes||0)) + .forEach(r => { const k = r.implementation+"|"+r.group; // CH depends on group+stack, not sig + if (!seen.has(k)) { seen.add(k); data.push(r); } }); + mkChart("tls_chello", { type:"bar", + data:{ labels:data.map(r=>`${r.implementation} · ${r.group}`), + datasets:[{ label:"ClientHello bytes", + data:data.map(r=>r.client_hello_bytes), + backgroundColor:data.map(r=>PHASE_COLORS[r.phase]||PQ_COLOR), + borderColor:data.map(r=>r.client_hello_fragmented?"#ffa94d":"transparent"), + borderWidth:data.map(r=>r.client_hello_fragmented?2:0) }] }, + options:{ indexAxis:"y", responsive:true, maintainAspectRatio:false, plugins:{ + title:{display:true,text:`ClientHello size — ${runTag({run_id:UI.tlsRun})} (orange border = exceeds ~1400B MSS → fragments)`,color:"#e6e8ee"}, + legend:{display:false}, + annotation:{ annotations:{ mss:{ type:"line", xMin:1400, xMax:1400, + borderColor:"#d98b2b", borderWidth:1, borderDash:[4,4], + label:{display:true,content:"~MSS 1400B",position:"start",backgroundColor:"#d98b2b",font:{size:9}} } } } }, + scales:{ x:linScale("bytes"), y:{ticks:{color:"#9aa3b2",font:{size:9.5}}} } }}); +} + +/* ---- cross-implementation primitives (Pi + Mac side by side) ---------------- */ +function crossImpl(canvasId, rows, op, title) { + const runs = runsOrdered(); + // algorithms measured by >=2 implementations (for this op) + const byAlg = {}; + rows.forEach(r => { if (r.operation===op) + (byAlg[r.alg] = byAlg[r.alg] || new Set()).add(r.implementation); }); + const algs = Object.keys(byAlg).filter(a => byAlg[a].size >= 2) + .sort((a,b)=>a.localeCompare(b, undefined, {numeric:true})); + if (!algs.length) return drawEmpty(canvasId, `${title}: no multi-implementation rows`); + const log = $("xLog").checked; + const datasets = []; + IMPL_ORDER.forEach(impl => { + runs.forEach((run, ri) => { + const cells = algs.map(a => rows.find(r => r.run_id===run.run_id && + r.implementation===impl && r.alg===a && r.operation===op) || null); + if (!cells.some(c=>c)) return; + const alpha = ri===0 ? 1 : 0.45; + datasets.push({ + label:`${impl} (${runTag({run_id:run.run_id})})`, + data:cells.map(c=>c?nsToMs(c.median_ns):null), + backgroundColor:cells.map(c=>{ + if (!c) return "transparent"; + const asm = /asm|native|internal/i.test(((c.acceleration||{}).arithmetic||{}).path||""); + const col = IMPL_COLORS[impl]||PQ_COLOR; + return asm ? (ri===0?col:withAlpha(col,alpha)) : hatch(col, alpha); + }), + borderColor:IMPL_COLORS[impl], borderWidth:ri===0?0:1.5, + _cells:cells }); + }); + }); + mkChart(canvasId, { type:"bar", + data:{ labels:algs, datasets }, + options:{ responsive:true, plugins:{ + title:{display:true,text:`${title} — median latency (independent implementations)`,color:"#e6e8ee"}, + legend:{labels:{color:"#9aa3b2", font:{size:10.5}}}, + tooltip:{callbacks:{ + label:(it)=>`${it.dataset.label}: ${fmtMs(it.raw)} ms`, + afterLabel:(it)=>{ + const c = (it.dataset._cells||[])[it.dataIndex]; + if (!c || !c.acceleration) return ""; + const a = c.acceleration, ar = a.arithmetic||{}, sy = (a.symmetric||[])[0]; + return [`arithmetic: ${ar.path}${ar.detail?" — "+ar.detail:""}`, + sy?`symmetric: ${sy.primitive} via ${sy.source}${sy.hw_instructions?" (hw)":""}`:"", + `determined by: ${a.determined_by}`].filter(Boolean).join("\n"); + } }} }, + scales:{ x:{ticks:{color:"#9aa3b2",maxRotation:50,minRotation:35,font:{size:10.5}}}, + y: log ? logScale("median latency") : linScale("median latency (ms)") } }}); +} + +/* the always-visible acceleration table (authoritative; hatching is secondary) */ +function accelTable() { + const runs = runsOrdered(); + const fams = {}; + const famOf = (alg) => alg + .replace(/^ML-KEM-\d+$/, "ML-KEM").replace(/^ML-DSA-\d+$/, "ML-DSA") + .replace(/^SLH_DSA_PURE_(SHA2|SHAKE)_.*$/, "SLH-DSA-$1") + .replace(/^SPHINCS\+-(SHA2|SHAKE)-.*$/, "SPHINCS+-$1") + .replace(/^Falcon-\d+$/, "Falcon") + .replace(/^FrodoKEM-\d+-(AES|SHAKE)$/, "FrodoKEM-$1") + .replace(/^Classic-McEliece-.*$/, "Classic-McEliece"); + [...MERGED.kem, ...MERGED.sig].forEach(r => { + if (!r.acceleration) return; + const key = famOf(r.alg) + "|" + r.implementation; + const f = fams[key] = fams[key] || + { fam:famOf(r.alg), impl:r.implementation, byRun:{} }; + f.byRun[r.run_id] = r.acceleration; + }); + const implRank = (i)=>IMPL_ORDER.indexOf(i); + const list = Object.values(fams).sort((a,b)=> + a.fam.localeCompare(b.fam) || implRank(a.impl)-implRank(b.impl)); + const hwMark = (acc) => { + const sy = ((acc||{}).symmetric||[])[0]; + if (!sy) return "—"; + return sy.hw_instructions ? "✓ hw" : (sy.hw_instructions===false ? "✗" : "?"); + }; + let html = ` + ${runs.map(r=>``).join("")}`; + list.forEach(f => { + const any = Object.values(f.byRun)[0] || {}; + const ar = any.arithmetic||{}; + const sy = (any.symmetric||[])[0]; + const asm = /asm|native|internal/i.test(ar.path||""); + html += `` + + `` + + `` + + runs.map(r=>``).join("") + ``; + }); + $("accel-table").innerHTML = html + "
    algorithmimplementationarithmetic pathsymmetric pathhw instr (${runTag({run_id:r.run_id})})
    ${f.fam}${f.impl}${ar.path||"?"}${ar.detail?` `:""}${sy ? `${sy.primitive} — ${sy.source}` : "none"}${hwMark(f.byRun[r.run_id])}
    "; +} + +/* ---- security-level charts (preserved from the original dashboard) ---------- */ +function levelCharts() { + // classical anchor rows come from the matching implementation family: + // liboqs charts anchor on the openssl EVP baselines (the C stack), the Rust + // and aws-lc-rs charts anchor on their own in-family classical rows. + const anchorImpl = UI.lvlImpl === "liboqs" ? "openssl" : UI.lvlImpl; + const filt = (rows) => rows.filter(r => r.run_id === UI.lvlRun && + (r.implementation === UI.lvlImpl || (r.classical && r.implementation === anchorImpl))); + const kem = filt(MERGED.kem), sig = filt(MERGED.sig); + const log = $("lvlLog").checked; + barByLevel("kem_keygen", kem, "keygen", "KEM keygen — median latency", log); + barByLevel("kem_encaps", kem, "encaps", "KEM encaps — median latency", log, "derive"); + barByLevel("kem_decaps", kem, "decaps", "KEM decaps — median latency", log, "derive"); + scatter("kem_scatter", kem, "encaps", "public_key", "KEM size vs speed (encaps)", "public key (B)"); + barByLevel("sig_sign", sig, "sign", "Signature sign — median latency", log); + barByLevel("sig_verify", sig, "verify", "Signature verify — median latency", log); + scatter("sig_scatter", sig, "sign", "signature", "Signature size vs speed (sign)", "signature (B)", true); +} + +function baselineAnnotation(value, label) { + if (value == null) return {}; + return { annotations: { base: { + type:"line", yMin:value, yMax:value, borderColor:BASE_COLOR, + borderWidth:2, borderDash:[6,4], + label:{ display:true, content:label, position:"end", + backgroundColor:BASE_COLOR, font:{size:10} } } } }; +} + +function barByLevel(canvasId, rows, op, title, logY, baselineOp = op) { + const data = rows.filter(r => r.operation === op) + .sort((a,b)=>(a.nist_level||0)-(b.nist_level||0) || a.median_ns-b.median_ns); + if (!data.length) return drawEmpty(canvasId, `${title}: no rows for this implementation`); + /* Baseline reference: the classical row for baselineOp. KEM encaps/decaps map + * to the X25519 key-agreement (derive) timing. */ + const base = rows.find(r => r.classical && r.operation === baselineOp); + mkChart(canvasId, { + type:"bar", + data:{ labels:data.map(r=>r.alg), + datasets:[{ label:title, + data:data.map(r=>nsToMs(r.median_ns)), + backgroundColor:data.map(r=> r.classical?BASE_COLOR:(LEVEL_COLORS[r.nist_level]||PQ_COLOR)) }] }, + options:{ responsive:true, plugins:{ + title:{display:true,text:title,color:"#e6e8ee"}, + legend:{display:false}, + tooltip:{callbacks:{ + label:(it)=>`median ${it.raw.toFixed(4)} ms (${Math.round(it.raw*1e6).toLocaleString()} ns)`, + afterLabel:(it)=>{ + const r=data[it.dataIndex]; return `NIST L${r.nist_level} · ${r.classical?"classical baseline":"PQ"}`; }}}, + annotation: base ? baselineAnnotation(nsToMs(base.median_ns), + baselineOp === op ? `baseline ${base.alg}` : `baseline ${base.alg} ${base.operation}`) : {} }, + scales:{ x:{ticks:{color:"#9aa3b2",maxRotation:50,minRotation:40,font:{size:10.5}}}, + y: logY ? logScale("median latency") : linScale("median latency (ms)") } }}, + { formatter:(v)=>fmtMs(v) }); +} + +function scatter(canvasId, rows, op, sizeKey, title, xlabel, logX = false) { + const data = rows.filter(r => r.operation === op && r.sizes && r.sizes[sizeKey]); + if (!data.length) return drawEmpty(canvasId, title); + const pts = data.map(r => ({ x:r.sizes[sizeKey], y:nsToMs(r.median_ns), alg:r.alg, classical:r.classical })); + mkChart(canvasId, { + type:"scatter", + data:{ datasets:[{ label:title, data:pts, pointRadius:6, + backgroundColor:pts.map(p=>p.classical?BASE_COLOR:PQ_COLOR) }] }, + options:{ responsive:true, plugins:{ + title:{display:true,text:title,color:"#e6e8ee"}, legend:{display:false}, + tooltip:{callbacks:{label:(it)=>`${it.raw.alg}: ${it.raw.x} B, ${it.raw.y.toFixed(3)} ms`}} }, + scales:{ x: logX ? {type:"logarithmic",title:{display:true,text:`${xlabel} (log)`,color:"#9aa3b2"},ticks:{color:"#9aa3b2"}} + : linScale(xlabel), + y: logScale("median latency") } }}); +} + +/* ---- absences --------------------------------------------------------------- */ +function absencesPanel() { + const el = $("absences"); el.innerHTML = ""; + const seen = new Set(); const items = []; + const add = (kind, label, impl, reason, phase) => { + const k = kind+impl+label+reason; + if (seen.has(k)) return; seen.add(k); + items.push({kind,label,impl,reason,phase}); + }; + (MERGED.tls_absent||[]).forEach(a=>add("TLS", a.label, a.implementation, a.reason, a.phase)); + (MERGED.kem_absent||[]).forEach(a=>add("KEM", a.alg, a.implementation, a.reason, "")); + (MERGED.sig_absent||[]).forEach(a=>add("SIG", a.alg, a.implementation, a.reason, "")); + // the substantive finding first + items.sort((a,b)=>(/SLH-DSA/i.test(b.reason)?1:0)-(/SLH-DSA/i.test(a.reason)?1:0)); + if (!items.length) { el.innerHTML = '
    none
    '; return; } + items.forEach(it => { + const d = document.createElement("div"); + d.className = "absence"; + d.innerHTML = `${it.impl}${it.kind} · ${it.label}` + + (it.phase?` ${it.phase}`:"") + + `
    ${it.reason}`; + el.appendChild(d); + }); +} + +/* ---- helpers ---------------------------------------------------------------- */ +function mkChart(canvasId, cfg, extras) { + const ctx = $(canvasId).getContext("2d"); + const c = new Chart(ctx, cfg); + if (extras) c.$pqb = extras; + try { c.draw(); } catch (e) { + console.error("chart failed:", canvasId, e); + if (window.onerror) window.onerror(`chart ${canvasId}: ${e.message}`, "app.js", 0, 0, e); + } + CHARTS.push(c); +} +function drawEmpty(canvasId, msg) { + const c = $(canvasId); const ctx = c.getContext("2d"); + ctx.clearRect(0,0,c.width,c.height); + ctx.fillStyle = "#9aa3b2"; ctx.font = "13px sans-serif"; ctx.textAlign="center"; + ctx.fillText(msg, c.width/2, c.height/2); +} +function showEmpty(html) { + document.querySelector("main").innerHTML = `
    ${html}
    `; +} + +boot(); diff --git a/tools/benchmarks/pqc/dashboard/data/merged.json b/tools/benchmarks/pqc/dashboard/data/merged.json new file mode 100644 index 0000000..6167dc6 --- /dev/null +++ b/tools/benchmarks/pqc/dashboard/data/merged.json @@ -0,0 +1,30219 @@ +{ + "merged_schema": "2.0.0", + "n_runs": 4, + "runs": [ + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "host": { + "hostname": "rasberrypi5", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.18.33+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454029312 + }, + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.18.33+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=cortex-a76", + "target_features_compiled": [ + "aes", + "crc", + "dotprod", + "dpb", + "fp16", + "lor", + "lse", + "neon", + "pan", + "pmuv3", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": false + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=cortex-a76", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "cpu_features": { + "source": "/proc/cpuinfo", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-20T14:32:39Z", + "timestamp_end_utc": "2026-07-20T15:01:15Z", + "duration_s": 1716, + "governor_requested": "performance", + "governor_before": "performance", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "thermal_summary": { + "temp_c": { + "min": 56.5, + "max": 67.5, + "mean": 61.626, + "samples": 1683 + }, + "throttling_detected": false + }, + "generated_utc": "2026-07-20T15:01:15Z", + "source_file": "rasberrypi5-20260720T143239Z.json" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "host": { + "hostname": "mehmetmac", + "os": "macos", + "os_pretty": "macOS 26.3.1 (25D771280a)", + "arch": "arm64", + "kernel": "25.3.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M3", + "ncpu": 8, + "ram_bytes": 17179869184 + }, + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'apple-m3', not cortex-a76" + ], + "toolchain": { + "cc_version": "Apple clang version 17.0.0 (clang-1700.6.4.2)", + "bench_cflags": "-O3 -mcpu=native", + "cflags_target": "apple-m3", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET arm64-Darwin-25.3.0;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_SHA3_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.7", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.93.0 (254b59607 2026-01-19)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "target_features_compiled": [ + "aes", + "bf16", + "bti", + "crc", + "dit", + "dotprod", + "dpb", + "dpb2", + "fcma", + "fhm", + "flagm", + "fp16", + "frintts", + "i8mm", + "jsconv", + "lor", + "lse", + "neon", + "paca", + "pacg", + "pan", + "pmuv3", + "ras", + "rcpc", + "rcpc2", + "rdm", + "sb", + "sha2", + "sha3", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": true + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.93.0 (254b59607 2026-01-19)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-19T22:49:37Z", + "timestamp_end_utc": "2026-07-19T23:25:49Z", + "duration_s": 2172, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "thermal_summary": { + "temp_c": null, + "throttling_detected": false + }, + "generated_utc": "2026-07-19T23:25:49Z", + "source_file": "mehmetmac-20260719T224937Z.json" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "host": { + "hostname": "Mac", + "os": "macos", + "os_pretty": "macOS 26.6 (25G72)", + "arch": "arm64", + "kernel": "25.6.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M4 Pro", + "ncpu": 14, + "ram_bytes": 51539607552 + }, + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'apple-m4-pro', not cortex-a76" + ], + "toolchain": { + "cc_version": "Apple clang version 21.0.0 (clang-2100.1.1.101)", + "bench_cflags": "-O3 -mcpu=native", + "cflags_target": "apple-m4-pro", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET arm64-Darwin-25.5.0;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_SHA3_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.7", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "target_features_compiled": [ + "aes", + "bf16", + "bti", + "crc", + "dit", + "dotprod", + "dpb", + "dpb2", + "fcma", + "fhm", + "flagm", + "fp16", + "frintts", + "i8mm", + "jsconv", + "lor", + "lse", + "neon", + "paca", + "pacg", + "pan", + "pmuv3", + "ras", + "rcpc", + "rcpc2", + "rdm", + "sb", + "sha2", + "sha3", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": true + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-30T13:49:51Z", + "timestamp_end_utc": "2026-07-30T14:10:03Z", + "duration_s": 1212, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "thermal_summary": { + "temp_c": null, + "throttling_detected": false + }, + "generated_utc": "2026-07-30T14:10:03Z", + "source_file": "Mac-20260730T134951Z.json" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "host": { + "hostname": "fedora", + "os": "linux", + "os_pretty": "Fedora Linux 44 (Sway)", + "arch": "x86_64", + "kernel": "7.1.5-200.fc44.x86_64", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "ncpu": 24, + "ram_bytes": 269642162176 + }, + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=linux)", + "build flags targeted 'generic-fallback', not cortex-a76" + ], + "toolchain": { + "cc_version": "cc (GCC) 16.1.1 20260515 (Red Hat 16.1.1-2)", + "bench_cflags": "-O3", + "cflags_target": "generic-fallback", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_OPT_TARGET auto;", + "openssl": "system:3.5.7", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "x86_64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "", + "target_features_compiled": [ + "fxsr", + "sse", + "sse2" + ], + "cpu_features_runtime": null, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "x86_64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "cpu_features": { + "source": "/proc/cpuinfo (flags, x86)", + "neon": false, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-30T12:06:37Z", + "timestamp_end_utc": "2026-07-30T12:13:11Z", + "duration_s": 394, + "governor_requested": "performance", + "governor_before": "performance", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "not aarch64" + }, + "thermal_summary": { + "temp_c": { + "min": 27.8, + "max": 27.8, + "mean": 27.8, + "samples": 394 + }, + "throttling_detected": false + }, + "generated_utc": "2026-07-30T12:13:11Z", + "source_file": "fedora-20260730T120637Z.json" + } + ], + "kem": [ + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 56647.0, + "mad_ns": 37.0, + "iqr_ns": 92.0, + "min_ns": 56537.0, + "stddev_ns": 564.29, + "ops_per_sec": 17653.19, + "total_sum_of_medians_ns": 221960.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 165313.0, + "mad_ns": 93.0, + "iqr_ns": 186.0, + "min_ns": 164442.0, + "stddev_ns": 916.8, + "ops_per_sec": 6049.13, + "total_sum_of_medians_ns": 221960.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 18166.0, + "mad_ns": 19.0, + "iqr_ns": 38.0, + "min_ns": 18073.0, + "stddev_ns": 452.81, + "ops_per_sec": 55047.89, + "total_sum_of_medians_ns": 62591.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 20499.0, + "mad_ns": 18.0, + "iqr_ns": 37.0, + "min_ns": 20425.0, + "stddev_ns": 395.47, + "ops_per_sec": 48782.87, + "total_sum_of_medians_ns": 62591.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 23926.0, + "mad_ns": 18.0, + "iqr_ns": 37.0, + "min_ns": 23851.0, + "stddev_ns": 328.76, + "ops_per_sec": 41795.54, + "total_sum_of_medians_ns": 62591.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 29870.0, + "mad_ns": 37.0, + "iqr_ns": 56.0, + "min_ns": 29740.0, + "stddev_ns": 709.79, + "ops_per_sec": 33478.41, + "total_sum_of_medians_ns": 99110.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 31907.0, + "mad_ns": 19.0, + "iqr_ns": 37.0, + "min_ns": 31795.0, + "stddev_ns": 401.87, + "ops_per_sec": 31341.09, + "total_sum_of_medians_ns": 99110.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 37333.0, + "mad_ns": 19.0, + "iqr_ns": 38.0, + "min_ns": 37222.0, + "stddev_ns": 472.71, + "ops_per_sec": 26785.95, + "total_sum_of_medians_ns": 99110.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 44185.0, + "mad_ns": 37.0, + "iqr_ns": 74.0, + "min_ns": 44036.0, + "stddev_ns": 846.24, + "ops_per_sec": 22632.11, + "total_sum_of_medians_ns": 147462.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 47777.0, + "mad_ns": 19.0, + "iqr_ns": 37.0, + "min_ns": 47666.0, + "stddev_ns": 627.83, + "ops_per_sec": 20930.57, + "total_sum_of_medians_ns": 147462.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 55500.0, + "mad_ns": 36.0, + "iqr_ns": 55.0, + "min_ns": 55369.0, + "stddev_ns": 399.02, + "ops_per_sec": 18018.02, + "total_sum_of_medians_ns": 147462.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 149116177.0, + "mad_ns": 35569676.5, + "iqr_ns": 105798745.75, + "min_ns": 78370727.0, + "stddev_ns": 96527536.69, + "ops_per_sec": 6.71, + "total_sum_of_medians_ns": 174877023.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 66148.0, + "mad_ns": 463.0, + "iqr_ns": 5685.0, + "min_ns": 65480.0, + "stddev_ns": 6536.73, + "ops_per_sec": 15117.62, + "total_sum_of_medians_ns": 174877023.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 25694698.0, + "mad_ns": 1824.5, + "iqr_ns": 3800.75, + "min_ns": 25689013.0, + "stddev_ns": 16883.19, + "ops_per_sec": 38.92, + "total_sum_of_medians_ns": 174877023.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 345028791.5, + "mad_ns": 113676647.5, + "iqr_ns": 445962629.5, + "min_ns": 231180007.0, + "stddev_ns": 369051576.43, + "ops_per_sec": 2.9, + "total_sum_of_medians_ns": 403903466.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 130925.0, + "mad_ns": 11093.0, + "iqr_ns": 32407.0, + "min_ns": 118832.0, + "stddev_ns": 24878.69, + "ops_per_sec": 7637.96, + "total_sum_of_medians_ns": 403903466.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 58743749.5, + "mad_ns": 191516.0, + "iqr_ns": 329607.25, + "min_ns": 58029258.0, + "stddev_ns": 286977.31, + "ops_per_sec": 17.02, + "total_sum_of_medians_ns": 403903466.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 228718918.5, + "mad_ns": 197821.0, + "iqr_ns": 488657.0, + "min_ns": 228469024.0, + "stddev_ns": 501285.83, + "ops_per_sec": 4.37, + "total_sum_of_medians_ns": 287591935.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 130591.0, + "mad_ns": 11111.0, + "iqr_ns": 24722.0, + "min_ns": 118369.0, + "stddev_ns": 23270.78, + "ops_per_sec": 7657.5, + "total_sum_of_medians_ns": 287591935.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 58742425.5, + "mad_ns": 42239.0, + "iqr_ns": 288741.25, + "min_ns": 58207590.0, + "stddev_ns": 198117.88, + "ops_per_sec": 17.02, + "total_sum_of_medians_ns": 287591935.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 745645982.5, + "mad_ns": 330927545.5, + "iqr_ns": 1104176622.5, + "min_ns": 414433712.0, + "stddev_ns": 807444157.93, + "ops_per_sec": 1.34, + "total_sum_of_medians_ns": 858560706.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 234052.0, + "mad_ns": 20332.0, + "iqr_ns": 54564.0, + "min_ns": 213016.0, + "stddev_ns": 48203.55, + "ops_per_sec": 4272.55, + "total_sum_of_medians_ns": 858560706.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 112680671.5, + "mad_ns": 261339.0, + "iqr_ns": 563465.5, + "min_ns": 111302541.0, + "stddev_ns": 627259.48, + "ops_per_sec": 8.87, + "total_sum_of_medians_ns": 858560706.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1016413019.5, + "mad_ns": 596102553.0, + "iqr_ns": 1192755438.25, + "min_ns": 418044818.0, + "stddev_ns": 982073827.38, + "ops_per_sec": 0.98, + "total_sum_of_medians_ns": 1125933260.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 357774.0, + "mad_ns": 15000.0, + "iqr_ns": 44184.5, + "min_ns": 341644.0, + "stddev_ns": 32335.61, + "ops_per_sec": 2795.06, + "total_sum_of_medians_ns": 1125933260.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 109162467.0, + "mad_ns": 466512.0, + "iqr_ns": 973205.0, + "min_ns": 107734864.0, + "stddev_ns": 765182.15, + "ops_per_sec": 9.16, + "total_sum_of_medians_ns": 1125933260.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1103349763.0, + "mad_ns": 330449503.0, + "iqr_ns": 660442111.25, + "min_ns": 447481732.0, + "stddev_ns": 1071733593.32, + "ops_per_sec": 0.91, + "total_sum_of_medians_ns": 1240205442.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 259571.0, + "mad_ns": 16278.0, + "iqr_ns": 35537.0, + "min_ns": 242349.0, + "stddev_ns": 33804.27, + "ops_per_sec": 3852.51, + "total_sum_of_medians_ns": 1240205442.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 136596108.0, + "mad_ns": 252598.5, + "iqr_ns": 482961.75, + "min_ns": 135985310.0, + "stddev_ns": 303505.79, + "ops_per_sec": 7.32, + "total_sum_of_medians_ns": 1240205442.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 785675.0, + "mad_ns": 222.0, + "iqr_ns": 556.0, + "min_ns": 785027.0, + "stddev_ns": 3434.65, + "ops_per_sec": 1272.79, + "total_sum_of_medians_ns": 2614245.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 925340.0, + "mad_ns": 333.0, + "iqr_ns": 809.5, + "min_ns": 922896.0, + "stddev_ns": 3222.84, + "ops_per_sec": 1080.68, + "total_sum_of_medians_ns": 2614245.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 903230.0, + "mad_ns": 222.0, + "iqr_ns": 519.0, + "min_ns": 901952.0, + "stddev_ns": 3388.45, + "ops_per_sec": 1107.14, + "total_sum_of_medians_ns": 2614245.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 1692349.0, + "mad_ns": 1056.0, + "iqr_ns": 2130.0, + "min_ns": 1690386.0, + "stddev_ns": 4776.36, + "ops_per_sec": 590.89, + "total_sum_of_medians_ns": 5507329.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 1929078.0, + "mad_ns": 658.0, + "iqr_ns": 1370.75, + "min_ns": 1925013.0, + "stddev_ns": 7123.04, + "ops_per_sec": 518.38, + "total_sum_of_medians_ns": 5507329.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 1885902.0, + "mad_ns": 1204.0, + "iqr_ns": 2408.0, + "min_ns": 1881477.0, + "stddev_ns": 5047.87, + "ops_per_sec": 530.25, + "total_sum_of_medians_ns": 5507329.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 3070239.0, + "mad_ns": 869.0, + "iqr_ns": 1704.0, + "min_ns": 3065980.0, + "stddev_ns": 10214.31, + "ops_per_sec": 325.71, + "total_sum_of_medians_ns": 9948959.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 3469077.5, + "mad_ns": 1175.5, + "iqr_ns": 2658.0, + "min_ns": 3464902.0, + "stddev_ns": 7493.19, + "ops_per_sec": 288.26, + "total_sum_of_medians_ns": 9948959.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 3409643.0, + "mad_ns": 1222.0, + "iqr_ns": 2481.0, + "min_ns": 3407180.0, + "stddev_ns": 142979.46, + "ops_per_sec": 293.29, + "total_sum_of_medians_ns": 9948959.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 2886974.0, + "mad_ns": 510.0, + "iqr_ns": 1795.75, + "min_ns": 2884130.0, + "stddev_ns": 4459.16, + "ops_per_sec": 346.38, + "total_sum_of_medians_ns": 9574354.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 3354903.0, + "mad_ns": 537.0, + "iqr_ns": 1037.0, + "min_ns": 3352032.0, + "stddev_ns": 7411.02, + "ops_per_sec": 298.07, + "total_sum_of_medians_ns": 9574354.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 3332477.0, + "mad_ns": 370.0, + "iqr_ns": 759.0, + "min_ns": 3329551.0, + "stddev_ns": 5834.96, + "ops_per_sec": 300.08, + "total_sum_of_medians_ns": 9574354.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 6447550.0, + "mad_ns": 1389.0, + "iqr_ns": 2694.0, + "min_ns": 6442846.0, + "stddev_ns": 8310.2, + "ops_per_sec": 155.1, + "total_sum_of_medians_ns": 21265411.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 7426259.5, + "mad_ns": 1286.5, + "iqr_ns": 2800.75, + "min_ns": 7421315.0, + "stddev_ns": 15246.76, + "ops_per_sec": 134.66, + "total_sum_of_medians_ns": 21265411.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 7391602.0, + "mad_ns": 1222.0, + "iqr_ns": 2935.5, + "min_ns": 7387686.0, + "stddev_ns": 2833.01, + "ops_per_sec": 135.29, + "total_sum_of_medians_ns": 21265411.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 11751743.0, + "mad_ns": 1074.0, + "iqr_ns": 2555.5, + "min_ns": 11747909.0, + "stddev_ns": 18029.17, + "ops_per_sec": 85.09, + "total_sum_of_medians_ns": 38779490.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 13543026.0, + "mad_ns": 1240.0, + "iqr_ns": 2745.75, + "min_ns": 13538535.0, + "stddev_ns": 19365.5, + "ops_per_sec": 73.84, + "total_sum_of_medians_ns": 38779490.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 13484721.0, + "mad_ns": 1972.0, + "iqr_ns": 3981.25, + "min_ns": 13479944.0, + "stddev_ns": 23693.28, + "ops_per_sec": 74.16, + "total_sum_of_medians_ns": 38779490.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 54147.0, + "mad_ns": 92.0, + "iqr_ns": 518.0, + "min_ns": 53870.0, + "stddev_ns": 510.56, + "ops_per_sec": 18468.24, + "total_sum_of_medians_ns": 238089.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 183942.0, + "mad_ns": 36.0, + "iqr_ns": 56.0, + "min_ns": 183812.0, + "stddev_ns": 733.44, + "ops_per_sec": 5436.5, + "total_sum_of_medians_ns": 238089.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 41296.0, + "mad_ns": 481.0, + "iqr_ns": 815.0, + "min_ns": 39500.0, + "stddev_ns": 817.78, + "ops_per_sec": 24215.42, + "total_sum_of_medians_ns": 141498.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 43499.0, + "mad_ns": 111.0, + "iqr_ns": 537.0, + "min_ns": 43222.0, + "stddev_ns": 473.65, + "ops_per_sec": 22989.03, + "total_sum_of_medians_ns": 141498.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 56703.0, + "mad_ns": 55.0, + "iqr_ns": 93.0, + "min_ns": 56481.0, + "stddev_ns": 658.91, + "ops_per_sec": 17635.75, + "total_sum_of_medians_ns": 141498.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 72648.0, + "mad_ns": 667.0, + "iqr_ns": 1351.0, + "min_ns": 70036.0, + "stddev_ns": 1126.91, + "ops_per_sec": 13765.0, + "total_sum_of_medians_ns": 241016.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 75110.0, + "mad_ns": 185.0, + "iqr_ns": 555.0, + "min_ns": 74666.0, + "stddev_ns": 799.82, + "ops_per_sec": 13313.81, + "total_sum_of_medians_ns": 241016.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 93258.0, + "mad_ns": 92.0, + "iqr_ns": 184.0, + "min_ns": 92813.0, + "stddev_ns": 697.18, + "ops_per_sec": 10722.94, + "total_sum_of_medians_ns": 241016.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 115684.0, + "mad_ns": 870.0, + "iqr_ns": 1741.0, + "min_ns": 111758.0, + "stddev_ns": 1437.74, + "ops_per_sec": 8644.24, + "total_sum_of_medians_ns": 378977.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 120128.0, + "mad_ns": 240.0, + "iqr_ns": 537.0, + "min_ns": 119517.0, + "stddev_ns": 931.53, + "ops_per_sec": 8324.45, + "total_sum_of_medians_ns": 378977.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 143165.0, + "mad_ns": 111.0, + "iqr_ns": 240.0, + "min_ns": 142609.0, + "stddev_ns": 820.61, + "ops_per_sec": 6984.95, + "total_sum_of_medians_ns": 378977.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 21112.0, + "mad_ns": 18.0, + "iqr_ns": 37.0, + "min_ns": 21019.0, + "stddev_ns": 347.31, + "ops_per_sec": 47366.43, + "total_sum_of_medians_ns": 67965.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 46853.0, + "mad_ns": 1.0, + "iqr_ns": 19.0, + "min_ns": 46815.0, + "stddev_ns": 401.36, + "ops_per_sec": 21343.35, + "total_sum_of_medians_ns": 67965.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 26908.0, + "mad_ns": 19.0, + "iqr_ns": 37.0, + "min_ns": 26815.0, + "stddev_ns": 567.86, + "ops_per_sec": 37163.67, + "total_sum_of_medians_ns": 133169.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 106261.0, + "mad_ns": 55.0, + "iqr_ns": 93.0, + "min_ns": 105483.0, + "stddev_ns": 502.46, + "ops_per_sec": 9410.79, + "total_sum_of_medians_ns": 133169.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 28464.0, + "mad_ns": 19.0, + "iqr_ns": 55.0, + "min_ns": 28370.0, + "stddev_ns": 621.97, + "ops_per_sec": 35132.1, + "total_sum_of_medians_ns": 97205.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 31722.0, + "mad_ns": 17.0, + "iqr_ns": 19.0, + "min_ns": 31667.0, + "stddev_ns": 399.8, + "ops_per_sec": 31523.86, + "total_sum_of_medians_ns": 97205.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 37019.0, + "mad_ns": 18.0, + "iqr_ns": 37.0, + "min_ns": 36963.0, + "stddev_ns": 453.44, + "ops_per_sec": 27013.16, + "total_sum_of_medians_ns": 97205.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 42964.0, + "mad_ns": 37.0, + "iqr_ns": 74.0, + "min_ns": 42815.0, + "stddev_ns": 868.26, + "ops_per_sec": 23275.3, + "total_sum_of_medians_ns": 145447.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 47631.0, + "mad_ns": 18.0, + "iqr_ns": 37.0, + "min_ns": 47556.0, + "stddev_ns": 339.24, + "ops_per_sec": 20994.73, + "total_sum_of_medians_ns": 145447.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 54852.0, + "mad_ns": 18.0, + "iqr_ns": 19.0, + "min_ns": 54760.0, + "stddev_ns": 549.34, + "ops_per_sec": 18230.88, + "total_sum_of_medians_ns": 145447.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 44000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 44000.0, + "stddev_ns": 916.34, + "ops_per_sec": 22727.27, + "total_sum_of_medians_ns": 87000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 43000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 42000.0, + "stddev_ns": 986.4, + "ops_per_sec": 23255.81, + "total_sum_of_medians_ns": 87000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 10000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 9000.0, + "stddev_ns": 677.96, + "ops_per_sec": 100000.0, + "total_sum_of_medians_ns": 34000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 11000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 10000.0, + "stddev_ns": 597.85, + "ops_per_sec": 90909.09, + "total_sum_of_medians_ns": 34000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 13000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 12000.0, + "stddev_ns": 1601.3, + "ops_per_sec": 76923.08, + "total_sum_of_medians_ns": 34000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 15000.0, + "stddev_ns": 9624.21, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 53000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 17000.0, + "mad_ns": 0.0, + "iqr_ns": 3000.0, + "min_ns": 16000.0, + "stddev_ns": 66625.74, + "ops_per_sec": 58823.53, + "total_sum_of_medians_ns": 53000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 20000.0, + "mad_ns": 1000.0, + "iqr_ns": 3000.0, + "min_ns": 19000.0, + "stddev_ns": 4680.17, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 53000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 24000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 23000.0, + "stddev_ns": 2688.97, + "ops_per_sec": 41666.67, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 26000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 25000.0, + "stddev_ns": 12878.34, + "ops_per_sec": 38461.54, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 30000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 29000.0, + "stddev_ns": 922.92, + "ops_per_sec": 33333.33, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 178798000.0, + "mad_ns": 77600500.0, + "iqr_ns": 230949500.0, + "min_ns": 100838000.0, + "stddev_ns": 190539333.9, + "ops_per_sec": 5.59, + "total_sum_of_medians_ns": 204554000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 23000.0, + "mad_ns": 1000.0, + "iqr_ns": 5000.0, + "min_ns": 21000.0, + "stddev_ns": 4903.23, + "ops_per_sec": 43478.26, + "total_sum_of_medians_ns": 204554000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 25733000.0, + "mad_ns": 19000.0, + "iqr_ns": 43750.0, + "min_ns": 25700000.0, + "stddev_ns": 27521.17, + "ops_per_sec": 38.86, + "total_sum_of_medians_ns": 204554000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 594358500.0, + "mad_ns": 268143500.0, + "iqr_ns": 771470750.0, + "min_ns": 325300000.0, + "stddev_ns": 703785328.6, + "ops_per_sec": 1.68, + "total_sum_of_medians_ns": 653762500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 48000.0, + "mad_ns": 9000.0, + "iqr_ns": 25000.0, + "min_ns": 38000.0, + "stddev_ns": 31465.84, + "ops_per_sec": 20833.33, + "total_sum_of_medians_ns": 653762500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 59356000.0, + "mad_ns": 29500.0, + "iqr_ns": 59750.0, + "min_ns": 59244000.0, + "stddev_ns": 3008524.13, + "ops_per_sec": 16.85, + "total_sum_of_medians_ns": 653762500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 342819000.0, + "mad_ns": 830000.0, + "iqr_ns": 3645250.0, + "min_ns": 341560000.0, + "stddev_ns": 8132511.18, + "ops_per_sec": 2.92, + "total_sum_of_medians_ns": 402457500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 48000.0, + "mad_ns": 9000.0, + "iqr_ns": 25000.0, + "min_ns": 38000.0, + "stddev_ns": 22633.09, + "ops_per_sec": 20833.33, + "total_sum_of_medians_ns": 402457500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 59590500.0, + "mad_ns": 160000.0, + "iqr_ns": 587750.0, + "min_ns": 59312000.0, + "stddev_ns": 804601.03, + "ops_per_sec": 16.78, + "total_sum_of_medians_ns": 402457500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1413683000.0, + "mad_ns": 676139000.0, + "iqr_ns": 2678474250.0, + "min_ns": 736523000.0, + "stddev_ns": 2029565520.43, + "ops_per_sec": 0.71, + "total_sum_of_medians_ns": 1527898500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 109000.0, + "mad_ns": 15000.0, + "iqr_ns": 42000.0, + "min_ns": 93000.0, + "stddev_ns": 40360.77, + "ops_per_sec": 9174.31, + "total_sum_of_medians_ns": 1527898500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 114106500.0, + "mad_ns": 36000.0, + "iqr_ns": 71750.0, + "min_ns": 113924000.0, + "stddev_ns": 340787.53, + "ops_per_sec": 8.76, + "total_sum_of_medians_ns": 1527898500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1271722000.0, + "mad_ns": 603125000.0, + "iqr_ns": 1805352000.0, + "min_ns": 667284000.0, + "stddev_ns": 1620467532.66, + "ops_per_sec": 0.79, + "total_sum_of_medians_ns": 1382382000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 158000.0, + "mad_ns": 12000.0, + "iqr_ns": 33000.0, + "min_ns": 145000.0, + "stddev_ns": 25615.72, + "ops_per_sec": 6329.11, + "total_sum_of_medians_ns": 1382382000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 110502000.0, + "mad_ns": 37000.0, + "iqr_ns": 72000.0, + "min_ns": 110327000.0, + "stddev_ns": 299969.17, + "ops_per_sec": 9.05, + "total_sum_of_medians_ns": 1382382000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1711346000.0, + "mad_ns": 833650500.0, + "iqr_ns": 3241443500.0, + "min_ns": 875799000.0, + "stddev_ns": 2747118808.84, + "ops_per_sec": 0.58, + "total_sum_of_medians_ns": 1851113500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 93000.0, + "mad_ns": 13000.0, + "iqr_ns": 37000.0, + "min_ns": 80000.0, + "stddev_ns": 27683.0, + "ops_per_sec": 10752.69, + "total_sum_of_medians_ns": 1851113500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 139674500.0, + "mad_ns": 54000.0, + "iqr_ns": 107250.0, + "min_ns": 139473000.0, + "stddev_ns": 1194293.81, + "ops_per_sec": 7.16, + "total_sum_of_medians_ns": 1851113500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 276000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 272000.0, + "stddev_ns": 2478.16, + "ops_per_sec": 3623.19, + "total_sum_of_medians_ns": 991000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 367000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 365000.0, + "stddev_ns": 3199.88, + "ops_per_sec": 2724.8, + "total_sum_of_medians_ns": 991000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 348000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 346000.0, + "stddev_ns": 3559.43, + "ops_per_sec": 2873.56, + "total_sum_of_medians_ns": 991000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 542000.0, + "mad_ns": 2000.0, + "iqr_ns": 3000.0, + "min_ns": 538000.0, + "stddev_ns": 3271.95, + "ops_per_sec": 1845.02, + "total_sum_of_medians_ns": 1943000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 719000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 715000.0, + "stddev_ns": 25522.41, + "ops_per_sec": 1390.82, + "total_sum_of_medians_ns": 1943000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 682000.0, + "mad_ns": 1000.0, + "iqr_ns": 3000.0, + "min_ns": 678000.0, + "stddev_ns": 3731.66, + "ops_per_sec": 1466.28, + "total_sum_of_medians_ns": 1943000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 954000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 949000.0, + "stddev_ns": 82150.52, + "ops_per_sec": 1048.22, + "total_sum_of_medians_ns": 3379000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 1238000.0, + "mad_ns": 3000.0, + "iqr_ns": 5000.0, + "min_ns": 1233000.0, + "stddev_ns": 59469.0, + "ops_per_sec": 807.75, + "total_sum_of_medians_ns": 3379000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 1187000.0, + "mad_ns": 3000.0, + "iqr_ns": 5000.0, + "min_ns": 1182000.0, + "stddev_ns": 4972.84, + "ops_per_sec": 842.46, + "total_sum_of_medians_ns": 3379000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 1561000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 1554000.0, + "stddev_ns": 6747.11, + "ops_per_sec": 640.61, + "total_sum_of_medians_ns": 5215000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 1881000.0, + "mad_ns": 3000.0, + "iqr_ns": 8000.0, + "min_ns": 1869000.0, + "stddev_ns": 90447.16, + "ops_per_sec": 531.63, + "total_sum_of_medians_ns": 5215000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 1773000.0, + "mad_ns": 2000.0, + "iqr_ns": 6000.0, + "min_ns": 1768000.0, + "stddev_ns": 6676.05, + "ops_per_sec": 564.02, + "total_sum_of_medians_ns": 5215000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 3454000.0, + "mad_ns": 5000.0, + "iqr_ns": 10000.0, + "min_ns": 3443000.0, + "stddev_ns": 9160.29, + "ops_per_sec": 289.52, + "total_sum_of_medians_ns": 11411500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 3997500.0, + "mad_ns": 5500.0, + "iqr_ns": 13000.0, + "min_ns": 3985000.0, + "stddev_ns": 86025.27, + "ops_per_sec": 250.16, + "total_sum_of_medians_ns": 11411500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 3960000.0, + "mad_ns": 5000.0, + "iqr_ns": 10500.0, + "min_ns": 3946000.0, + "stddev_ns": 9554.93, + "ops_per_sec": 252.53, + "total_sum_of_medians_ns": 11411500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 6254000.0, + "mad_ns": 8000.0, + "iqr_ns": 17000.0, + "min_ns": 6235000.0, + "stddev_ns": 12776.0, + "ops_per_sec": 159.9, + "total_sum_of_medians_ns": 20703000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 7246000.0, + "mad_ns": 8000.0, + "iqr_ns": 17000.0, + "min_ns": 7227000.0, + "stddev_ns": 14091.15, + "ops_per_sec": 138.01, + "total_sum_of_medians_ns": 20703000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 7203000.0, + "mad_ns": 8000.0, + "iqr_ns": 18000.0, + "min_ns": 7180000.0, + "stddev_ns": 91995.52, + "ops_per_sec": 138.83, + "total_sum_of_medians_ns": 20703000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 17000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 16000.0, + "stddev_ns": 1377.78, + "ops_per_sec": 58823.53, + "total_sum_of_medians_ns": 63000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 46000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 46000.0, + "stddev_ns": 4235.14, + "ops_per_sec": 21739.13, + "total_sum_of_medians_ns": 63000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 22000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 21000.0, + "stddev_ns": 3194.95, + "ops_per_sec": 45454.55, + "total_sum_of_medians_ns": 65000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 20000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 19000.0, + "stddev_ns": 697.2, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 65000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 23000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 23000.0, + "stddev_ns": 717.64, + "ops_per_sec": 43478.26, + "total_sum_of_medians_ns": 65000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 39000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 37000.0, + "stddev_ns": 993.96, + "ops_per_sec": 25641.03, + "total_sum_of_medians_ns": 113000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 34000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 33000.0, + "stddev_ns": 780.3, + "ops_per_sec": 29411.76, + "total_sum_of_medians_ns": 113000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 40000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 39000.0, + "stddev_ns": 900.03, + "ops_per_sec": 25000.0, + "total_sum_of_medians_ns": 113000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 61000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 59000.0, + "stddev_ns": 1272.19, + "ops_per_sec": 16393.44, + "total_sum_of_medians_ns": 176000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 54000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 53000.0, + "stddev_ns": 1016.4, + "ops_per_sec": 18518.52, + "total_sum_of_medians_ns": 176000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 61000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 60000.0, + "stddev_ns": 975.33, + "ops_per_sec": 16393.44, + "total_sum_of_medians_ns": 176000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 11000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 9000.0, + "stddev_ns": 2313.64, + "ops_per_sec": 90909.09, + "total_sum_of_medians_ns": 38000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 27000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 26000.0, + "stddev_ns": 770.55, + "ops_per_sec": 37037.04, + "total_sum_of_medians_ns": 38000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 13000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 12000.0, + "stddev_ns": 525.61, + "ops_per_sec": 76923.08, + "total_sum_of_medians_ns": 58000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 45000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 44000.0, + "stddev_ns": 1067.0, + "ops_per_sec": 22222.22, + "total_sum_of_medians_ns": 58000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 14000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 13000.0, + "stddev_ns": 605.22, + "ops_per_sec": 71428.57, + "total_sum_of_medians_ns": 46000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 15000.0, + "stddev_ns": 663.16, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 46000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 15000.0, + "stddev_ns": 681.58, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 46000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 19000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 18000.0, + "stddev_ns": 701.76, + "ops_per_sec": 52631.58, + "total_sum_of_medians_ns": 65000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 23000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 22000.0, + "stddev_ns": 625.29, + "ops_per_sec": 43478.26, + "total_sum_of_medians_ns": 65000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 23000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 22000.0, + "stddev_ns": 692.59, + "ops_per_sec": 43478.26, + "total_sum_of_medians_ns": 65000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 13000.0, + "stddev_ns": 943.09, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 35000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 19000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 16000.0, + "stddev_ns": 1002.14, + "ops_per_sec": 52631.58, + "total_sum_of_medians_ns": 35000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 5000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 4000.0, + "stddev_ns": 515.8, + "ops_per_sec": 200000.0, + "total_sum_of_medians_ns": 16000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 5000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 4000.0, + "stddev_ns": 652.13, + "ops_per_sec": 200000.0, + "total_sum_of_medians_ns": 16000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 6000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 5000.0, + "stddev_ns": 767.84, + "ops_per_sec": 166666.67, + "total_sum_of_medians_ns": 16000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 8000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 7000.0, + "stddev_ns": 776.01, + "ops_per_sec": 125000.0, + "total_sum_of_medians_ns": 27000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 9000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 7000.0, + "stddev_ns": 783.6, + "ops_per_sec": 111111.11, + "total_sum_of_medians_ns": 27000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 10000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 9000.0, + "stddev_ns": 918.83, + "ops_per_sec": 100000.0, + "total_sum_of_medians_ns": 27000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 12000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 10000.0, + "stddev_ns": 960.51, + "ops_per_sec": 83333.33, + "total_sum_of_medians_ns": 40000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 13000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 11000.0, + "stddev_ns": 3748.73, + "ops_per_sec": 76923.08, + "total_sum_of_medians_ns": 40000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 15000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 13000.0, + "stddev_ns": 1066.84, + "ops_per_sec": 66666.67, + "total_sum_of_medians_ns": 40000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 131410000.0, + "mad_ns": 41603000.0, + "iqr_ns": 82767500.0, + "min_ns": 50622000.0, + "stddev_ns": 115068559.68, + "ops_per_sec": 7.61, + "total_sum_of_medians_ns": 143595000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 12000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 10000.0, + "stddev_ns": 2682.93, + "ops_per_sec": 83333.33, + "total_sum_of_medians_ns": 143595000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 12173000.0, + "mad_ns": 110000.0, + "iqr_ns": 216500.0, + "min_ns": 11996000.0, + "stddev_ns": 166804.38, + "ops_per_sec": 82.15, + "total_sum_of_medians_ns": 143595000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 313489500.0, + "mad_ns": 141285500.0, + "iqr_ns": 419627000.0, + "min_ns": 169907000.0, + "stddev_ns": 340206178.28, + "ops_per_sec": 3.19, + "total_sum_of_medians_ns": 341378000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 29000.0, + "mad_ns": 5000.0, + "iqr_ns": 11000.0, + "min_ns": 21000.0, + "stddev_ns": 10330.07, + "ops_per_sec": 34482.76, + "total_sum_of_medians_ns": 341378000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 27859500.0, + "mad_ns": 104000.0, + "iqr_ns": 242000.0, + "min_ns": 27723000.0, + "stddev_ns": 193023.54, + "ops_per_sec": 35.89, + "total_sum_of_medians_ns": 341378000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 172920500.0, + "mad_ns": 889000.0, + "iqr_ns": 2125750.0, + "min_ns": 169369000.0, + "stddev_ns": 2788218.24, + "ops_per_sec": 5.78, + "total_sum_of_medians_ns": 201147000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 25000.0, + "mad_ns": 5000.0, + "iqr_ns": 11000.0, + "min_ns": 18000.0, + "stddev_ns": 10608.27, + "ops_per_sec": 40000.0, + "total_sum_of_medians_ns": 201147000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 28201500.0, + "mad_ns": 230500.0, + "iqr_ns": 575250.0, + "min_ns": 27734000.0, + "stddev_ns": 420731.42, + "ops_per_sec": 35.46, + "total_sum_of_medians_ns": 201147000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1036491000.0, + "mad_ns": 668292500.0, + "iqr_ns": 1343190000.0, + "min_ns": 365886000.0, + "stddev_ns": 1064975164.2, + "ops_per_sec": 0.96, + "total_sum_of_medians_ns": 1090937500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 53000.0, + "mad_ns": 9000.0, + "iqr_ns": 22000.0, + "min_ns": 39000.0, + "stddev_ns": 20569.91, + "ops_per_sec": 18867.92, + "total_sum_of_medians_ns": 1090937500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 54393500.0, + "mad_ns": 340000.0, + "iqr_ns": 703500.0, + "min_ns": 53537000.0, + "stddev_ns": 1320315.09, + "ops_per_sec": 18.38, + "total_sum_of_medians_ns": 1090937500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 655462000.0, + "mad_ns": 313333000.0, + "iqr_ns": 1240296750.0, + "min_ns": 340972000.0, + "stddev_ns": 907598985.14, + "ops_per_sec": 1.53, + "total_sum_of_medians_ns": 707997500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 83000.0, + "mad_ns": 6000.0, + "iqr_ns": 15000.0, + "min_ns": 68000.0, + "stddev_ns": 14479.0, + "ops_per_sec": 12048.19, + "total_sum_of_medians_ns": 707997500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 52452500.0, + "mad_ns": 288500.0, + "iqr_ns": 598000.0, + "min_ns": 51810000.0, + "stddev_ns": 506820.53, + "ops_per_sec": 19.06, + "total_sum_of_medians_ns": 707997500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1291255500.0, + "mad_ns": 837109500.0, + "iqr_ns": 1675725500.0, + "min_ns": 448982000.0, + "stddev_ns": 1253438514.71, + "ops_per_sec": 0.77, + "total_sum_of_medians_ns": 1358650500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 48000.0, + "mad_ns": 7000.0, + "iqr_ns": 16000.0, + "min_ns": 36000.0, + "stddev_ns": 14774.26, + "ops_per_sec": 20833.33, + "total_sum_of_medians_ns": 1358650500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 67347000.0, + "mad_ns": 496000.0, + "iqr_ns": 1133750.0, + "min_ns": 66013000.0, + "stddev_ns": 1562845.51, + "ops_per_sec": 14.85, + "total_sum_of_medians_ns": 1358650500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 164000.0, + "mad_ns": 2000.0, + "iqr_ns": 5000.0, + "min_ns": 146000.0, + "stddev_ns": 6820.48, + "ops_per_sec": 6097.56, + "total_sum_of_medians_ns": 576000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 210000.0, + "mad_ns": 4000.0, + "iqr_ns": 8000.0, + "min_ns": 187000.0, + "stddev_ns": 14919.42, + "ops_per_sec": 4761.9, + "total_sum_of_medians_ns": 576000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 202000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 181000.0, + "stddev_ns": 7454.9, + "ops_per_sec": 4950.5, + "total_sum_of_medians_ns": 576000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 277000.0, + "mad_ns": 2000.0, + "iqr_ns": 4000.0, + "min_ns": 247000.0, + "stddev_ns": 5444.84, + "ops_per_sec": 3610.11, + "total_sum_of_medians_ns": 986000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 363000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 325000.0, + "stddev_ns": 9322.4, + "ops_per_sec": 2754.82, + "total_sum_of_medians_ns": 986000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 346000.0, + "mad_ns": 2000.0, + "iqr_ns": 5000.0, + "min_ns": 310000.0, + "stddev_ns": 7823.4, + "ops_per_sec": 2890.17, + "total_sum_of_medians_ns": 986000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 487000.0, + "mad_ns": 3000.0, + "iqr_ns": 7000.0, + "min_ns": 438000.0, + "stddev_ns": 14848.22, + "ops_per_sec": 2053.39, + "total_sum_of_medians_ns": 1724000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 629000.0, + "mad_ns": 4000.0, + "iqr_ns": 7000.0, + "min_ns": 566000.0, + "stddev_ns": 12842.12, + "ops_per_sec": 1589.83, + "total_sum_of_medians_ns": 1724000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 608000.0, + "mad_ns": 4000.0, + "iqr_ns": 8000.0, + "min_ns": 547000.0, + "stddev_ns": 17643.5, + "ops_per_sec": 1644.74, + "total_sum_of_medians_ns": 1724000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 828000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 743000.0, + "stddev_ns": 14820.37, + "ops_per_sec": 1207.73, + "total_sum_of_medians_ns": 2684000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 928000.0, + "mad_ns": 3000.0, + "iqr_ns": 7000.0, + "min_ns": 834000.0, + "stddev_ns": 17844.0, + "ops_per_sec": 1077.59, + "total_sum_of_medians_ns": 2684000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 928000.0, + "mad_ns": 7000.0, + "iqr_ns": 14000.0, + "min_ns": 827000.0, + "stddev_ns": 30898.69, + "ops_per_sec": 1077.59, + "total_sum_of_medians_ns": 2684000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 1791000.0, + "mad_ns": 8000.0, + "iqr_ns": 21000.0, + "min_ns": 1655000.0, + "stddev_ns": 33302.45, + "ops_per_sec": 558.35, + "total_sum_of_medians_ns": 5811000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 2017000.0, + "mad_ns": 4000.0, + "iqr_ns": 10000.0, + "min_ns": 1895000.0, + "stddev_ns": 29527.96, + "ops_per_sec": 495.79, + "total_sum_of_medians_ns": 5811000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 2003000.0, + "mad_ns": 7000.0, + "iqr_ns": 15000.0, + "min_ns": 1896000.0, + "stddev_ns": 26036.82, + "ops_per_sec": 499.25, + "total_sum_of_medians_ns": 5811000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 3259000.0, + "mad_ns": 12000.0, + "iqr_ns": 27250.0, + "min_ns": 3096000.0, + "stddev_ns": 43227.42, + "ops_per_sec": 306.84, + "total_sum_of_medians_ns": 10567500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 3661500.0, + "mad_ns": 11500.0, + "iqr_ns": 24000.0, + "min_ns": 3474000.0, + "stddev_ns": 50581.72, + "ops_per_sec": 273.11, + "total_sum_of_medians_ns": 10567500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 3647000.0, + "mad_ns": 8000.0, + "iqr_ns": 17000.0, + "min_ns": 3505000.0, + "stddev_ns": 102660.2, + "ops_per_sec": 274.2, + "total_sum_of_medians_ns": 10567500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 8000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 7000.0, + "stddev_ns": 1255.12, + "ops_per_sec": 125000.0, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 20000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 18000.0, + "stddev_ns": 4563.48, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 12000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 9000.0, + "stddev_ns": 1442.91, + "ops_per_sec": 83333.33, + "total_sum_of_medians_ns": 34000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 10000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 8000.0, + "stddev_ns": 1306.59, + "ops_per_sec": 100000.0, + "total_sum_of_medians_ns": 34000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 12000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 10000.0, + "stddev_ns": 1387.86, + "ops_per_sec": 83333.33, + "total_sum_of_medians_ns": 34000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 20000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 17000.0, + "stddev_ns": 2663.31, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 57000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 17000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 14000.0, + "stddev_ns": 4313.35, + "ops_per_sec": 58823.53, + "total_sum_of_medians_ns": 57000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 20000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 17000.0, + "stddev_ns": 1124.84, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 57000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 32000.0, + "mad_ns": 1000.0, + "iqr_ns": 3000.0, + "min_ns": 27000.0, + "stddev_ns": 2040.35, + "ops_per_sec": 31250.0, + "total_sum_of_medians_ns": 89000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 27000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 23000.0, + "stddev_ns": 1612.27, + "ops_per_sec": 37037.04, + "total_sum_of_medians_ns": 89000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 30000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 27000.0, + "stddev_ns": 2043.68, + "ops_per_sec": 33333.33, + "total_sum_of_medians_ns": 89000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 6000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 4000.0, + "stddev_ns": 672.31, + "ops_per_sec": 166666.67, + "total_sum_of_medians_ns": 18000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 12000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 10000.0, + "stddev_ns": 4907.88, + "ops_per_sec": 83333.33, + "total_sum_of_medians_ns": 18000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 7000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 5000.0, + "stddev_ns": 763.71, + "ops_per_sec": 142857.14, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 21000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 18000.0, + "stddev_ns": 2889.08, + "ops_per_sec": 47619.05, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 7000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 5000.0, + "stddev_ns": 912.8, + "ops_per_sec": 142857.14, + "total_sum_of_medians_ns": 23000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 8000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 6000.0, + "stddev_ns": 883.64, + "ops_per_sec": 125000.0, + "total_sum_of_medians_ns": 23000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 8000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 6000.0, + "stddev_ns": 742.88, + "ops_per_sec": 125000.0, + "total_sum_of_medians_ns": 23000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 10000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 8000.0, + "stddev_ns": 779.05, + "ops_per_sec": 100000.0, + "total_sum_of_medians_ns": 32000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 11000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 9000.0, + "stddev_ns": 915.19, + "ops_per_sec": 90909.09, + "total_sum_of_medians_ns": 32000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 11000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 9000.0, + "stddev_ns": 741.79, + "ops_per_sec": 90909.09, + "total_sum_of_medians_ns": 32000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 16975.0, + "mad_ns": 147.0, + "iqr_ns": 297.0, + "min_ns": 16073.0, + "stddev_ns": 1032.59, + "ops_per_sec": 58910.16, + "total_sum_of_medians_ns": 36763.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 19788.0, + "mad_ns": 70.0, + "iqr_ns": 165.0, + "min_ns": 19606.0, + "stddev_ns": 901.97, + "ops_per_sec": 50535.68, + "total_sum_of_medians_ns": 36763.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 3877.0, + "mad_ns": 23.0, + "iqr_ns": 48.0, + "min_ns": 3776.0, + "stddev_ns": 746.96, + "ops_per_sec": 257931.39, + "total_sum_of_medians_ns": 13418.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 4288.0, + "mad_ns": 26.0, + "iqr_ns": 54.0, + "min_ns": 4083.0, + "stddev_ns": 237.49, + "ops_per_sec": 233208.96, + "total_sum_of_medians_ns": 13418.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 5253.0, + "mad_ns": 37.0, + "iqr_ns": 75.0, + "min_ns": 5102.0, + "stddev_ns": 138.05, + "ops_per_sec": 190367.41, + "total_sum_of_medians_ns": 13418.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 6193.0, + "mad_ns": 35.0, + "iqr_ns": 72.0, + "min_ns": 6024.0, + "stddev_ns": 793.45, + "ops_per_sec": 161472.63, + "total_sum_of_medians_ns": 20612.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 6397.0, + "mad_ns": 25.0, + "iqr_ns": 52.0, + "min_ns": 6293.0, + "stddev_ns": 284.85, + "ops_per_sec": 156323.28, + "total_sum_of_medians_ns": 20612.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 8022.0, + "mad_ns": 23.0, + "iqr_ns": 47.0, + "min_ns": 7793.0, + "stddev_ns": 156.89, + "ops_per_sec": 124657.19, + "total_sum_of_medians_ns": 20612.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 8430.0, + "mad_ns": 44.0, + "iqr_ns": 91.0, + "min_ns": 8210.0, + "stddev_ns": 757.96, + "ops_per_sec": 118623.96, + "total_sum_of_medians_ns": 28223.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 8770.0, + "mad_ns": 53.0, + "iqr_ns": 108.0, + "min_ns": 8570.0, + "stddev_ns": 378.27, + "ops_per_sec": 114025.09, + "total_sum_of_medians_ns": 28223.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 11023.0, + "mad_ns": 47.0, + "iqr_ns": 98.0, + "min_ns": 10815.0, + "stddev_ns": 900.07, + "ops_per_sec": 90719.4, + "total_sum_of_medians_ns": 28223.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 19582759.0, + "mad_ns": 2871843.5, + "iqr_ns": 8503844.5, + "min_ns": 16659074.0, + "stddev_ns": 7066491.92, + "ops_per_sec": 51.07, + "total_sum_of_medians_ns": 19681969.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 7967.0, + "mad_ns": 288.0, + "iqr_ns": 896.0, + "min_ns": 7605.0, + "stddev_ns": 996.64, + "ops_per_sec": 125517.76, + "total_sum_of_medians_ns": 19681969.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-348864", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 91243.0, + "mad_ns": 133.0, + "iqr_ns": 750.0, + "min_ns": 90973.0, + "stddev_ns": 974.18, + "ops_per_sec": 10959.74, + "total_sum_of_medians_ns": 19681969.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 67194316.0, + "mad_ns": 16218935.0, + "iqr_ns": 32569538.25, + "min_ns": 50749316.0, + "stddev_ns": 31657282.61, + "ops_per_sec": 14.88, + "total_sum_of_medians_ns": 67319555.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 15223.0, + "mad_ns": 1658.0, + "iqr_ns": 4645.0, + "min_ns": 13248.0, + "stddev_ns": 3730.94, + "ops_per_sec": 65690.07, + "total_sum_of_medians_ns": 67319555.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-460896", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 110016.0, + "mad_ns": 521.0, + "iqr_ns": 2457.5, + "min_ns": 109193.0, + "stddev_ns": 3557.34, + "ops_per_sec": 9089.59, + "total_sum_of_medians_ns": 67319555.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 50885255.0, + "mad_ns": 82965.5, + "iqr_ns": 201576.75, + "min_ns": 50656420.0, + "stddev_ns": 173809.01, + "ops_per_sec": 19.65, + "total_sum_of_medians_ns": 51010434.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 15249.0, + "mad_ns": 1645.0, + "iqr_ns": 4578.0, + "min_ns": 13292.0, + "stddev_ns": 3667.56, + "ops_per_sec": 65578.07, + "total_sum_of_medians_ns": 51010434.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-460896f", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 109930.0, + "mad_ns": 332.0, + "iqr_ns": 1530.5, + "min_ns": 109246.0, + "stddev_ns": 3811.17, + "ops_per_sec": 9096.7, + "total_sum_of_medians_ns": 51010434.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 90257115.5, + "mad_ns": 13916633.0, + "iqr_ns": 54630807.5, + "min_ns": 76100910.0, + "stddev_ns": 35664026.0, + "ops_per_sec": 11.08, + "total_sum_of_medians_ns": 90394877.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 23354.0, + "mad_ns": 2966.0, + "iqr_ns": 6307.0, + "min_ns": 19861.0, + "stddev_ns": 4995.15, + "ops_per_sec": 42819.22, + "total_sum_of_medians_ns": 90394877.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-6688128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 114408.0, + "mad_ns": 265.0, + "iqr_ns": 922.75, + "min_ns": 113896.0, + "stddev_ns": 2683.54, + "ops_per_sec": 8740.65, + "total_sum_of_medians_ns": 90394877.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 77485872.0, + "mad_ns": 12158310.0, + "iqr_ns": 46945655.75, + "min_ns": 65152184.0, + "stddev_ns": 35280302.69, + "ops_per_sec": 12.91, + "total_sum_of_medians_ns": 77623066.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 24119.0, + "mad_ns": 1644.0, + "iqr_ns": 4684.0, + "min_ns": 22184.0, + "stddev_ns": 3739.65, + "ops_per_sec": 41461.09, + "total_sum_of_medians_ns": 77623066.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-6960119", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 113075.0, + "mad_ns": 208.0, + "iqr_ns": 679.5, + "min_ns": 112638.0, + "stddev_ns": 2485.36, + "ops_per_sec": 8843.69, + "total_sum_of_medians_ns": 77623066.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 88399210.5, + "mad_ns": 13832194.5, + "iqr_ns": 41143686.5, + "min_ns": 74236553.0, + "stddev_ns": 39727431.71, + "ops_per_sec": 11.31, + "total_sum_of_medians_ns": 88538113.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 24703.0, + "mad_ns": 1451.0, + "iqr_ns": 4046.0, + "min_ns": 23059.0, + "stddev_ns": 3246.36, + "ops_per_sec": 40480.91, + "total_sum_of_medians_ns": 88538113.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Classic-McEliece-8192128", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 114200.0, + "mad_ns": 268.0, + "iqr_ns": 836.0, + "min_ns": 113654.0, + "stddev_ns": 2767.52, + "ops_per_sec": 8756.57, + "total_sum_of_medians_ns": 88538113.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 146348.0, + "mad_ns": 692.0, + "iqr_ns": 1389.25, + "min_ns": 143102.0, + "stddev_ns": 3837.24, + "ops_per_sec": 6833.03, + "total_sum_of_medians_ns": 522329.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 194560.0, + "mad_ns": 735.5, + "iqr_ns": 1490.5, + "min_ns": 191311.0, + "stddev_ns": 1725.76, + "ops_per_sec": 5139.8, + "total_sum_of_medians_ns": 522329.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-640-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 181421.0, + "mad_ns": 594.0, + "iqr_ns": 1450.25, + "min_ns": 180370.0, + "stddev_ns": 100248.62, + "ops_per_sec": 5512.04, + "total_sum_of_medians_ns": 522329.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 298913.0, + "mad_ns": 879.0, + "iqr_ns": 1790.0, + "min_ns": 295061.0, + "stddev_ns": 4314.69, + "ops_per_sec": 3345.46, + "total_sum_of_medians_ns": 1052420.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 386315.0, + "mad_ns": 1124.0, + "iqr_ns": 3298.25, + "min_ns": 384091.0, + "stddev_ns": 6378.09, + "ops_per_sec": 2588.56, + "total_sum_of_medians_ns": 1052420.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-976-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 367192.0, + "mad_ns": 962.0, + "iqr_ns": 2401.0, + "min_ns": 364516.0, + "stddev_ns": 5906.52, + "ops_per_sec": 2723.37, + "total_sum_of_medians_ns": 1052420.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 529835.0, + "mad_ns": 1361.0, + "iqr_ns": 2730.0, + "min_ns": 523949.0, + "stddev_ns": 2346.7, + "ops_per_sec": 1887.38, + "total_sum_of_medians_ns": 1841592.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 671003.0, + "mad_ns": 1149.0, + "iqr_ns": 2413.0, + "min_ns": 666763.0, + "stddev_ns": 8018.09, + "ops_per_sec": 1490.31, + "total_sum_of_medians_ns": 1841592.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-1344-AES", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 640754.0, + "mad_ns": 1138.5, + "iqr_ns": 2288.75, + "min_ns": 636372.0, + "stddev_ns": 20172.33, + "ops_per_sec": 1560.66, + "total_sum_of_medians_ns": 1841592.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 419766.5, + "mad_ns": 1508.5, + "iqr_ns": 3247.25, + "min_ns": 416349.0, + "stddev_ns": 9220.1, + "ops_per_sec": 2382.28, + "total_sum_of_medians_ns": 1314616.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 453464.0, + "mad_ns": 1338.0, + "iqr_ns": 2675.0, + "min_ns": 448687.0, + "stddev_ns": 6690.83, + "ops_per_sec": 2205.25, + "total_sum_of_medians_ns": 1314616.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-640-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 441386.0, + "mad_ns": 1299.0, + "iqr_ns": 2722.0, + "min_ns": 437613.0, + "stddev_ns": 8500.57, + "ops_per_sec": 2265.59, + "total_sum_of_medians_ns": 1314616.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 909042.0, + "mad_ns": 1573.0, + "iqr_ns": 3781.0, + "min_ns": 903855.0, + "stddev_ns": 21102.73, + "ops_per_sec": 1100.06, + "total_sum_of_medians_ns": 2816622.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 963783.0, + "mad_ns": 1972.0, + "iqr_ns": 4610.5, + "min_ns": 957597.0, + "stddev_ns": 18295.22, + "ops_per_sec": 1037.58, + "total_sum_of_medians_ns": 2816622.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-976-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 943797.0, + "mad_ns": 2507.5, + "iqr_ns": 6425.75, + "min_ns": 936256.0, + "stddev_ns": 25485.4, + "ops_per_sec": 1059.55, + "total_sum_of_medians_ns": 2816622.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1625942.0, + "mad_ns": 3545.0, + "iqr_ns": 7280.0, + "min_ns": 1614872.0, + "stddev_ns": 7075.92, + "ops_per_sec": 615.03, + "total_sum_of_medians_ns": 5076880.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 1746632.0, + "mad_ns": 3881.0, + "iqr_ns": 8079.0, + "min_ns": 1733248.0, + "stddev_ns": 227570.79, + "ops_per_sec": 572.53, + "total_sum_of_medians_ns": 5076880.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "FrodoKEM-1344-SHAKE", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 1704306.0, + "mad_ns": 2512.0, + "iqr_ns": 5955.5, + "min_ns": 1690053.0, + "stddev_ns": 503137.74, + "ops_per_sec": 586.75, + "total_sum_of_medians_ns": 5076880.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 8429.0, + "mad_ns": 63.0, + "iqr_ns": 143.0, + "min_ns": 8268.0, + "stddev_ns": 324.44, + "ops_per_sec": 118638.04, + "total_sum_of_medians_ns": 35928.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 27499.0, + "mad_ns": 85.0, + "iqr_ns": 214.0, + "min_ns": 27188.0, + "stddev_ns": 1230.74, + "ops_per_sec": 36364.96, + "total_sum_of_medians_ns": 35928.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 13278.0, + "mad_ns": 241.0, + "iqr_ns": 489.0, + "min_ns": 12458.0, + "stddev_ns": 920.78, + "ops_per_sec": 75312.55, + "total_sum_of_medians_ns": 40752.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "encaps", + "median_ns": 11997.0, + "mad_ns": 390.0, + "iqr_ns": 784.0, + "min_ns": 10913.0, + "stddev_ns": 984.63, + "ops_per_sec": 83354.17, + "total_sum_of_medians_ns": 40752.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-512", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "decaps", + "median_ns": 15477.0, + "mad_ns": 421.0, + "iqr_ns": 846.0, + "min_ns": 14216.0, + "stddev_ns": 1079.45, + "ops_per_sec": 64612.0, + "total_sum_of_medians_ns": 40752.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 23634.0, + "mad_ns": 339.0, + "iqr_ns": 686.0, + "min_ns": 22198.0, + "stddev_ns": 1258.36, + "ops_per_sec": 42311.92, + "total_sum_of_medians_ns": 68514.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 20089.0, + "mad_ns": 419.0, + "iqr_ns": 881.0, + "min_ns": 19192.0, + "stddev_ns": 811.88, + "ops_per_sec": 49778.49, + "total_sum_of_medians_ns": 68514.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 24791.5, + "mad_ns": 429.0, + "iqr_ns": 882.0, + "min_ns": 23672.0, + "stddev_ns": 1343.21, + "ops_per_sec": 40336.41, + "total_sum_of_medians_ns": 68514.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 37890.0, + "mad_ns": 510.0, + "iqr_ns": 1057.0, + "min_ns": 35703.0, + "stddev_ns": 1791.11, + "ops_per_sec": 26392.19, + "total_sum_of_medians_ns": 105866.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 30762.0, + "mad_ns": 573.0, + "iqr_ns": 1240.0, + "min_ns": 29696.0, + "stddev_ns": 1657.55, + "ops_per_sec": 32507.64, + "total_sum_of_medians_ns": 105866.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 37214.0, + "mad_ns": 603.0, + "iqr_ns": 1302.0, + "min_ns": 35947.0, + "stddev_ns": 1304.77, + "ops_per_sec": 26871.61, + "total_sum_of_medians_ns": 105866.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 5553.0, + "mad_ns": 23.0, + "iqr_ns": 47.0, + "min_ns": 5272.0, + "stddev_ns": 127.81, + "ops_per_sec": 180082.84, + "total_sum_of_medians_ns": 19701.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 14148.0, + "mad_ns": 33.0, + "iqr_ns": 66.0, + "min_ns": 13879.0, + "stddev_ns": 924.08, + "ops_per_sec": 70681.37, + "total_sum_of_medians_ns": 19701.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 6611.0, + "mad_ns": 26.0, + "iqr_ns": 53.0, + "min_ns": 6274.0, + "stddev_ns": 118.51, + "ops_per_sec": 151263.05, + "total_sum_of_medians_ns": 32207.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "derive", + "median_ns": 25596.0, + "mad_ns": 104.0, + "iqr_ns": 267.0, + "min_ns": 25326.0, + "stddev_ns": 615.77, + "ops_per_sec": 39068.6, + "total_sum_of_medians_ns": 32207.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 8167.0, + "mad_ns": 47.0, + "iqr_ns": 97.0, + "min_ns": 7860.0, + "stddev_ns": 788.66, + "ops_per_sec": 122443.98, + "total_sum_of_medians_ns": 25782.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "encaps", + "median_ns": 8832.0, + "mad_ns": 54.0, + "iqr_ns": 109.0, + "min_ns": 8496.0, + "stddev_ns": 216.3, + "ops_per_sec": 113224.64, + "total_sum_of_medians_ns": 25782.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "decaps", + "median_ns": 8783.0, + "mad_ns": 53.0, + "iqr_ns": 107.0, + "min_ns": 8556.0, + "stddev_ns": 778.86, + "ops_per_sec": 113856.31, + "total_sum_of_medians_ns": 25782.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 10927.0, + "mad_ns": 72.0, + "iqr_ns": 173.0, + "min_ns": 10561.0, + "stddev_ns": 780.31, + "ops_per_sec": 91516.43, + "total_sum_of_medians_ns": 35327.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "encaps", + "median_ns": 12051.0, + "mad_ns": 61.0, + "iqr_ns": 123.0, + "min_ns": 11688.0, + "stddev_ns": 327.91, + "ops_per_sec": 82980.67, + "total_sum_of_medians_ns": 35327.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "decaps", + "median_ns": 12349.0, + "mad_ns": 54.0, + "iqr_ns": 110.0, + "min_ns": 12084.0, + "stddev_ns": 33592.09, + "ops_per_sec": 80978.22, + "total_sum_of_medians_ns": 35327.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + } + } + ], + "sig": [ + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 57944.0, + "mad_ns": 19.0, + "iqr_ns": 38.0, + "min_ns": 57851.0, + "stddev_ns": 666.78, + "ops_per_sec": 17258.04, + "total_sum_of_medians_ns": 260165.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 57574.0, + "mad_ns": 19.0, + "iqr_ns": 37.0, + "min_ns": 57480.0, + "stddev_ns": 631.32, + "ops_per_sec": 17368.95, + "total_sum_of_medians_ns": 260165.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 144647.0, + "mad_ns": 56.0, + "iqr_ns": 111.0, + "min_ns": 144424.0, + "stddev_ns": 914.13, + "ops_per_sec": 6913.38, + "total_sum_of_medians_ns": 260165.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 106998.0, + "mad_ns": 555.0, + "iqr_ns": 1111.0, + "min_ns": 104480.0, + "stddev_ns": 1104.92, + "ops_per_sec": 9345.97, + "total_sum_of_medians_ns": 624010.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 397865.5, + "mad_ns": 180507.0, + "iqr_ns": 362171.25, + "min_ns": 215645.0, + "stddev_ns": 331280.83, + "ops_per_sec": 2513.41, + "total_sum_of_medians_ns": 624010.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 119147.0, + "mad_ns": 223.0, + "iqr_ns": 1074.0, + "min_ns": 118683.0, + "stddev_ns": 942.59, + "ops_per_sec": 8392.99, + "total_sum_of_medians_ns": 624010.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 191220.0, + "mad_ns": 592.0, + "iqr_ns": 1723.0, + "min_ns": 189239.0, + "stddev_ns": 1386.66, + "ops_per_sec": 5229.58, + "total_sum_of_medians_ns": 1055042.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 674677.0, + "mad_ns": 275774.0, + "iqr_ns": 627724.0, + "min_ns": 319996.0, + "stddev_ns": 592778.32, + "ops_per_sec": 1482.19, + "total_sum_of_medians_ns": 1055042.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 189145.5, + "mad_ns": 332.0, + "iqr_ns": 778.0, + "min_ns": 188405.0, + "stddev_ns": 1293.46, + "ops_per_sec": 5286.94, + "total_sum_of_medians_ns": 1055042.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 288496.0, + "mad_ns": 1037.0, + "iqr_ns": 2204.0, + "min_ns": 284256.0, + "stddev_ns": 2559.54, + "ops_per_sec": 3466.25, + "total_sum_of_medians_ns": 1427982.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 833916.0, + "mad_ns": 344274.0, + "iqr_ns": 727806.0, + "min_ns": 484123.0, + "stddev_ns": 573220.04, + "ops_per_sec": 1199.16, + "total_sum_of_medians_ns": 1427982.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 305570.0, + "mad_ns": 167.0, + "iqr_ns": 352.0, + "min_ns": 304960.0, + "stddev_ns": 1342.02, + "ops_per_sec": 3272.57, + "total_sum_of_medians_ns": 1427982.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 8577032.5, + "mad_ns": 1161234.5, + "iqr_ns": 2773725.5, + "min_ns": 7266372.0, + "stddev_ns": 2421599.77, + "ops_per_sec": 116.59, + "total_sum_of_medians_ns": 8917843.5, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 290052.0, + "mad_ns": 2204.0, + "iqr_ns": 4148.0, + "min_ns": 277737.0, + "stddev_ns": 3461.74, + "ops_per_sec": 3447.66, + "total_sum_of_medians_ns": 8917843.5, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 50759.0, + "mad_ns": 38.0, + "iqr_ns": 93.0, + "min_ns": 50518.0, + "stddev_ns": 441.98, + "ops_per_sec": 19700.94, + "total_sum_of_medians_ns": 8917843.5, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 26301469.5, + "mad_ns": 2898028.5, + "iqr_ns": 6565978.25, + "min_ns": 22847828.0, + "stddev_ns": 7863581.49, + "ops_per_sec": 38.02, + "total_sum_of_medians_ns": 26984386.5, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 583456.0, + "mad_ns": 3018.5, + "iqr_ns": 5736.75, + "min_ns": 570455.0, + "stddev_ns": 5639.27, + "ops_per_sec": 1713.93, + "total_sum_of_medians_ns": 26984386.5, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 99461.0, + "mad_ns": 149.0, + "iqr_ns": 370.0, + "min_ns": 98888.0, + "stddev_ns": 623.97, + "ops_per_sec": 10054.19, + "total_sum_of_medians_ns": 26984386.5, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 1368298.0, + "mad_ns": 851.0, + "iqr_ns": 1759.0, + "min_ns": 1365502.0, + "stddev_ns": 3617.8, + "ops_per_sec": 730.83, + "total_sum_of_medians_ns": 35298940.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 32056499.5, + "mad_ns": 14666.5, + "iqr_ns": 30374.0, + "min_ns": 32017177.0, + "stddev_ns": 23002.97, + "ops_per_sec": 31.19, + "total_sum_of_medians_ns": 35298940.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 1874143.0, + "mad_ns": 1148.0, + "iqr_ns": 2111.0, + "min_ns": 1871162.0, + "stddev_ns": 3502.94, + "ops_per_sec": 533.58, + "total_sum_of_medians_ns": 35298940.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 87522977.0, + "mad_ns": 40962.5, + "iqr_ns": 82956.5, + "min_ns": 87424821.0, + "stddev_ns": 231342.86, + "ops_per_sec": 11.43, + "total_sum_of_medians_ns": 755834199.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 667627638.5, + "mad_ns": 206200.5, + "iqr_ns": 407629.0, + "min_ns": 667013970.0, + "stddev_ns": 335509.93, + "ops_per_sec": 1.5, + "total_sum_of_medians_ns": 755834199.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 683584.0, + "mad_ns": 444.0, + "iqr_ns": 926.0, + "min_ns": 682399.0, + "stddev_ns": 2097.79, + "ops_per_sec": 1462.88, + "total_sum_of_medians_ns": 755834199.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 1988781.0, + "mad_ns": 991.0, + "iqr_ns": 1963.0, + "min_ns": 1986031.0, + "stddev_ns": 3477.97, + "ops_per_sec": 502.82, + "total_sum_of_medians_ns": 57125855.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 52413052.5, + "mad_ns": 21962.0, + "iqr_ns": 42693.5, + "min_ns": 52324183.0, + "stddev_ns": 223969.21, + "ops_per_sec": 19.08, + "total_sum_of_medians_ns": 57125855.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 2724022.0, + "mad_ns": 833.5, + "iqr_ns": 1732.0, + "min_ns": 2721133.0, + "stddev_ns": 5077.3, + "ops_per_sec": 367.1, + "total_sum_of_medians_ns": 57125855.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 5243111.0, + "mad_ns": 1777.5, + "iqr_ns": 3866.0, + "min_ns": 5238935.0, + "stddev_ns": 5691.78, + "ops_per_sec": 190.73, + "total_sum_of_medians_ns": 115636888.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 107508683.0, + "mad_ns": 35953.0, + "iqr_ns": 76786.25, + "min_ns": 107435499.0, + "stddev_ns": 51306.85, + "ops_per_sec": 9.3, + "total_sum_of_medians_ns": 115636888.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 2885094.0, + "mad_ns": 981.0, + "iqr_ns": 2028.0, + "min_ns": 2881834.0, + "stddev_ns": 2580.44, + "ops_per_sec": 346.61, + "total_sum_of_medians_ns": 115636888.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 1531111.0, + "mad_ns": 1815.0, + "iqr_ns": 3629.0, + "min_ns": 1527185.0, + "stddev_ns": 7080.51, + "ops_per_sec": 653.12, + "total_sum_of_medians_ns": 39510786.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 35785962.5, + "mad_ns": 41443.5, + "iqr_ns": 63564.5, + "min_ns": 35697094.0, + "stddev_ns": 53981.17, + "ops_per_sec": 27.94, + "total_sum_of_medians_ns": 39510786.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 2193713.0, + "mad_ns": 1852.0, + "iqr_ns": 2778.0, + "min_ns": 2190991.0, + "stddev_ns": 5132.3, + "ops_per_sec": 455.85, + "total_sum_of_medians_ns": 39510786.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 99101491.0, + "mad_ns": 145035.5, + "iqr_ns": 1438111.75, + "min_ns": 97509399.0, + "stddev_ns": 696249.44, + "ops_per_sec": 10.09, + "total_sum_of_medians_ns": 839612180.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 739801068.0, + "mad_ns": 1360899.5, + "iqr_ns": 2691188.75, + "min_ns": 736891623.0, + "stddev_ns": 1701976.07, + "ops_per_sec": 1.35, + "total_sum_of_medians_ns": 839612180.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 709621.0, + "mad_ns": 74.0, + "iqr_ns": 130.0, + "min_ns": 708806.0, + "stddev_ns": 2076.84, + "ops_per_sec": 1409.2, + "total_sum_of_medians_ns": 839612180.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 2396286.0, + "mad_ns": 9925.0, + "iqr_ns": 21703.0, + "min_ns": 2373655.0, + "stddev_ns": 12852.9, + "ops_per_sec": 417.31, + "total_sum_of_medians_ns": 69263603.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 63546655.0, + "mad_ns": 59138.0, + "iqr_ns": 127531.5, + "min_ns": 63443619.0, + "stddev_ns": 91707.98, + "ops_per_sec": 15.74, + "total_sum_of_medians_ns": 69263603.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 3320662.0, + "mad_ns": 1185.0, + "iqr_ns": 3083.0, + "min_ns": 3307052.0, + "stddev_ns": 6146.3, + "ops_per_sec": 301.14, + "total_sum_of_medians_ns": 69263603.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 6192302.5, + "mad_ns": 6231.5, + "iqr_ns": 23865.25, + "min_ns": 6183294.0, + "stddev_ns": 24841.95, + "ops_per_sec": 161.49, + "total_sum_of_medians_ns": 137201369.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 127590813.0, + "mad_ns": 88749.0, + "iqr_ns": 184521.5, + "min_ns": 127350399.0, + "stddev_ns": 446346.71, + "ops_per_sec": 7.84, + "total_sum_of_medians_ns": 137201369.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 3418254.0, + "mad_ns": 982.0, + "iqr_ns": 1945.0, + "min_ns": 3416272.0, + "stddev_ns": 8648.16, + "ops_per_sec": 292.55, + "total_sum_of_medians_ns": 137201369.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 54740.0, + "mad_ns": 111.0, + "iqr_ns": 518.0, + "min_ns": 54499.0, + "stddev_ns": 513.05, + "ops_per_sec": 18268.18, + "total_sum_of_medians_ns": 293829.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 56499.0, + "mad_ns": 37.0, + "iqr_ns": 56.0, + "min_ns": 56277.0, + "stddev_ns": 436.92, + "ops_per_sec": 17699.43, + "total_sum_of_medians_ns": 293829.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 182590.0, + "mad_ns": 19.0, + "iqr_ns": 38.0, + "min_ns": 182461.0, + "stddev_ns": 818.16, + "ops_per_sec": 5476.75, + "total_sum_of_medians_ns": 293829.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 168572.0, + "mad_ns": 19.0, + "iqr_ns": 38.0, + "min_ns": 168442.0, + "stddev_ns": 733.34, + "ops_per_sec": 5932.18, + "total_sum_of_medians_ns": 293829.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 309940.0, + "mad_ns": 481.0, + "iqr_ns": 944.0, + "min_ns": 308515.0, + "stddev_ns": 1897.37, + "ops_per_sec": 3226.43, + "total_sum_of_medians_ns": 1085282.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 590511.0, + "mad_ns": 347180.0, + "iqr_ns": 694732.0, + "min_ns": 242349.0, + "stddev_ns": 666362.82, + "ops_per_sec": 1693.45, + "total_sum_of_medians_ns": 1085282.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 184831.0, + "mad_ns": 74.0, + "iqr_ns": 130.0, + "min_ns": 184516.0, + "stddev_ns": 1218.41, + "ops_per_sec": 5410.35, + "total_sum_of_medians_ns": 1085282.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify_cached_key", + "median_ns": 98776.0, + "mad_ns": 56.0, + "iqr_ns": 129.0, + "min_ns": 98480.0, + "stddev_ns": 576.78, + "ops_per_sec": 10123.92, + "total_sum_of_medians_ns": 1085282.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 484031.0, + "mad_ns": 926.0, + "iqr_ns": 1962.0, + "min_ns": 479049.0, + "stddev_ns": 4092.27, + "ops_per_sec": 2065.98, + "total_sum_of_medians_ns": 1867495.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 1089449.0, + "mad_ns": 497420.0, + "iqr_ns": 1240549.5, + "min_ns": 347162.0, + "stddev_ns": 1109585.24, + "ops_per_sec": 917.9, + "total_sum_of_medians_ns": 1867495.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 294015.0, + "mad_ns": 92.0, + "iqr_ns": 185.0, + "min_ns": 293589.0, + "stddev_ns": 1747.01, + "ops_per_sec": 3401.19, + "total_sum_of_medians_ns": 1867495.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 143536.0, + "mad_ns": 73.0, + "iqr_ns": 131.0, + "min_ns": 143165.0, + "stddev_ns": 926.93, + "ops_per_sec": 6966.89, + "total_sum_of_medians_ns": 1867495.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 754861.0, + "mad_ns": 1981.0, + "iqr_ns": 5573.5, + "min_ns": 750028.0, + "stddev_ns": 8748.46, + "ops_per_sec": 1324.75, + "total_sum_of_medians_ns": 2396878.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 1175745.0, + "mad_ns": 700065.0, + "iqr_ns": 1404390.0, + "min_ns": 474420.0, + "stddev_ns": 1068560.2, + "ops_per_sec": 850.52, + "total_sum_of_medians_ns": 2396878.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 466272.0, + "mad_ns": 111.0, + "iqr_ns": 241.0, + "min_ns": 465772.0, + "stddev_ns": 2668.7, + "ops_per_sec": 2144.67, + "total_sum_of_medians_ns": 2396878.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 208164.0, + "mad_ns": 56.0, + "iqr_ns": 112.0, + "min_ns": 207868.0, + "stddev_ns": 882.97, + "ops_per_sec": 4803.9, + "total_sum_of_medians_ns": 2396878.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 439865.0, + "mad_ns": 426.0, + "iqr_ns": 851.0, + "min_ns": 438087.0, + "stddev_ns": 1707.82, + "ops_per_sec": 2273.42, + "total_sum_of_medians_ns": 11329812.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 10256548.5, + "mad_ns": 2795.5, + "iqr_ns": 5698.75, + "min_ns": 10240317.0, + "stddev_ns": 222901.18, + "ops_per_sec": 97.5, + "total_sum_of_medians_ns": 11329812.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 633399.0, + "mad_ns": 779.0, + "iqr_ns": 1593.0, + "min_ns": 630548.0, + "stddev_ns": 2438.09, + "ops_per_sec": 1578.78, + "total_sum_of_medians_ns": 11329812.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 633252.0, + "mad_ns": 759.0, + "iqr_ns": 1518.5, + "min_ns": 630178.0, + "stddev_ns": 2061.35, + "ops_per_sec": 1579.15, + "total_sum_of_medians_ns": 11329812.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 30103908.5, + "mad_ns": 4473.0, + "iqr_ns": 8965.75, + "min_ns": 30092761.0, + "stddev_ns": 12893.12, + "ops_per_sec": 33.22, + "total_sum_of_medians_ns": 247693947.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 217366831.0, + "mad_ns": 35358.5, + "iqr_ns": 72890.25, + "min_ns": 217277135.0, + "stddev_ns": 54799.93, + "ops_per_sec": 4.6, + "total_sum_of_medians_ns": 247693947.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 223208.0, + "mad_ns": 408.0, + "iqr_ns": 870.0, + "min_ns": 221986.0, + "stddev_ns": 1090.32, + "ops_per_sec": 4480.13, + "total_sum_of_medians_ns": 247693947.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 223097.0, + "mad_ns": 426.0, + "iqr_ns": 870.0, + "min_ns": 221782.0, + "stddev_ns": 1168.58, + "ops_per_sec": 4482.36, + "total_sum_of_medians_ns": 247693947.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 671587.0, + "mad_ns": 612.0, + "iqr_ns": 1241.0, + "min_ns": 668476.0, + "stddev_ns": 1305.29, + "ops_per_sec": 1489.01, + "total_sum_of_medians_ns": 22090248.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 20319010.5, + "mad_ns": 5221.0, + "iqr_ns": 11168.0, + "min_ns": 20299666.0, + "stddev_ns": 14968.66, + "ops_per_sec": 49.21, + "total_sum_of_medians_ns": 22090248.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 1099651.0, + "mad_ns": 704.0, + "iqr_ns": 1546.5, + "min_ns": 1096817.0, + "stddev_ns": 3506.83, + "ops_per_sec": 909.38, + "total_sum_of_medians_ns": 22090248.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 1086094.0, + "mad_ns": 668.0, + "iqr_ns": 1425.0, + "min_ns": 1083521.0, + "stddev_ns": 2345.06, + "ops_per_sec": 920.73, + "total_sum_of_medians_ns": 22090248.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1756829.5, + "mad_ns": 1185.0, + "iqr_ns": 2366.5, + "min_ns": 1751977.0, + "stddev_ns": 4440.21, + "ops_per_sec": 569.21, + "total_sum_of_medians_ns": 44047745.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 41159803.0, + "mad_ns": 9515.0, + "iqr_ns": 20813.0, + "min_ns": 41131654.0, + "stddev_ns": 224699.92, + "ops_per_sec": 24.3, + "total_sum_of_medians_ns": 44047745.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 1131113.0, + "mad_ns": 1037.0, + "iqr_ns": 2093.0, + "min_ns": 1128058.0, + "stddev_ns": 2731.0, + "ops_per_sec": 884.08, + "total_sum_of_medians_ns": 44047745.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 1131113.0, + "mad_ns": 963.0, + "iqr_ns": 1926.0, + "min_ns": 1127669.0, + "stddev_ns": 2414.78, + "ops_per_sec": 884.08, + "total_sum_of_medians_ns": 44047745.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 21501.0, + "mad_ns": 18.0, + "iqr_ns": 19.0, + "min_ns": 21408.0, + "stddev_ns": 285.71, + "ops_per_sec": 46509.46, + "total_sum_of_medians_ns": 158059.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 22519.0, + "mad_ns": 19.0, + "iqr_ns": 37.0, + "min_ns": 22426.0, + "stddev_ns": 358.49, + "ops_per_sec": 44406.95, + "total_sum_of_medians_ns": 158059.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 114039.0, + "mad_ns": 37.0, + "iqr_ns": 74.0, + "min_ns": 113705.0, + "stddev_ns": 665.42, + "ops_per_sec": 8768.93, + "total_sum_of_medians_ns": 158059.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 69093.0, + "mad_ns": 38.0, + "iqr_ns": 93.0, + "min_ns": 65112.0, + "stddev_ns": 868.69, + "ops_per_sec": 14473.25, + "total_sum_of_medians_ns": 294746.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 157985.0, + "mad_ns": 62224.0, + "iqr_ns": 119336.0, + "min_ns": 95390.0, + "stddev_ns": 111273.75, + "ops_per_sec": 6329.71, + "total_sum_of_medians_ns": 294746.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 67668.0, + "mad_ns": 19.0, + "iqr_ns": 37.0, + "min_ns": 67593.0, + "stddev_ns": 582.22, + "ops_per_sec": 14778.03, + "total_sum_of_medians_ns": 294746.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 118669.0, + "mad_ns": 56.0, + "iqr_ns": 112.0, + "min_ns": 118391.0, + "stddev_ns": 628.13, + "ops_per_sec": 8426.8, + "total_sum_of_medians_ns": 488158.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 256579.0, + "mad_ns": 79186.0, + "iqr_ns": 190132.5, + "min_ns": 148558.0, + "stddev_ns": 175230.43, + "ops_per_sec": 3897.44, + "total_sum_of_medians_ns": 488158.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 112910.0, + "mad_ns": 19.0, + "iqr_ns": 55.0, + "min_ns": 112780.0, + "stddev_ns": 753.88, + "ops_per_sec": 8856.61, + "total_sum_of_medians_ns": 488158.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 201966.0, + "mad_ns": 110.0, + "iqr_ns": 222.0, + "min_ns": 196114.0, + "stddev_ns": 1451.24, + "ops_per_sec": 4951.33, + "total_sum_of_medians_ns": 744771.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 348987.0, + "mad_ns": 101723.0, + "iqr_ns": 216402.0, + "min_ns": 246856.0, + "stddev_ns": 184378.95, + "ops_per_sec": 2865.44, + "total_sum_of_medians_ns": 744771.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 193818.0, + "mad_ns": 37.0, + "iqr_ns": 74.0, + "min_ns": 193632.0, + "stddev_ns": 1312.23, + "ops_per_sec": 5159.48, + "total_sum_of_medians_ns": 744771.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 45000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 44000.0, + "stddev_ns": 901.39, + "ops_per_sec": 22222.22, + "total_sum_of_medians_ns": 216000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 45000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 45000.0, + "stddev_ns": 842.24, + "ops_per_sec": 22222.22, + "total_sum_of_medians_ns": 216000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 126000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 125000.0, + "stddev_ns": 1308.27, + "ops_per_sec": 7936.51, + "total_sum_of_medians_ns": 216000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 62000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 60000.0, + "stddev_ns": 1219.17, + "ops_per_sec": 16129.03, + "total_sum_of_medians_ns": 346000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 217000.0, + "mad_ns": 102000.0, + "iqr_ns": 203000.0, + "min_ns": 114000.0, + "stddev_ns": 189936.69, + "ops_per_sec": 4608.29, + "total_sum_of_medians_ns": 346000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 67000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 66000.0, + "stddev_ns": 4163.64, + "ops_per_sec": 14925.37, + "total_sum_of_medians_ns": 346000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 122000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 119000.0, + "stddev_ns": 1489.4, + "ops_per_sec": 8196.72, + "total_sum_of_medians_ns": 604500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 373500.0, + "mad_ns": 159500.0, + "iqr_ns": 361250.0, + "min_ns": 172000.0, + "stddev_ns": 311781.85, + "ops_per_sec": 2677.38, + "total_sum_of_medians_ns": 604500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 109000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 108000.0, + "stddev_ns": 15343.7, + "ops_per_sec": 9174.31, + "total_sum_of_medians_ns": 604500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 172000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 170000.0, + "stddev_ns": 7850.65, + "ops_per_sec": 5813.95, + "total_sum_of_medians_ns": 827000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 475000.0, + "mad_ns": 207000.0, + "iqr_ns": 441000.0, + "min_ns": 266000.0, + "stddev_ns": 369967.57, + "ops_per_sec": 2105.26, + "total_sum_of_medians_ns": 827000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 180000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 179000.0, + "stddev_ns": 1670.4, + "ops_per_sec": 5555.56, + "total_sum_of_medians_ns": 827000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 6546000.0, + "mad_ns": 699000.0, + "iqr_ns": 1401500.0, + "min_ns": 5558000.0, + "stddev_ns": 1686454.45, + "ops_per_sec": 152.77, + "total_sum_of_medians_ns": 6783000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 206000.0, + "mad_ns": 2000.0, + "iqr_ns": 5000.0, + "min_ns": 194000.0, + "stddev_ns": 3858.21, + "ops_per_sec": 4854.37, + "total_sum_of_medians_ns": 6783000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 31000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 30000.0, + "stddev_ns": 762.46, + "ops_per_sec": 32258.06, + "total_sum_of_medians_ns": 6783000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 20823500.0, + "mad_ns": 1080500.0, + "iqr_ns": 2620500.0, + "min_ns": 19046000.0, + "stddev_ns": 3520514.22, + "ops_per_sec": 48.02, + "total_sum_of_medians_ns": 21294500.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 410000.0, + "mad_ns": 4000.0, + "iqr_ns": 8000.0, + "min_ns": 393000.0, + "stddev_ns": 5447.06, + "ops_per_sec": 2439.02, + "total_sum_of_medians_ns": 21294500.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 61000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 60000.0, + "stddev_ns": 961.35, + "ops_per_sec": 16393.44, + "total_sum_of_medians_ns": 21294500.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 1063000.0, + "mad_ns": 2000.0, + "iqr_ns": 3000.0, + "min_ns": 1060000.0, + "stddev_ns": 4224.56, + "ops_per_sec": 940.73, + "total_sum_of_medians_ns": 27476500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 24898500.0, + "mad_ns": 13500.0, + "iqr_ns": 26750.0, + "min_ns": 24858000.0, + "stddev_ns": 27044.23, + "ops_per_sec": 40.16, + "total_sum_of_medians_ns": 27476500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 1515000.0, + "mad_ns": 2000.0, + "iqr_ns": 4000.0, + "min_ns": 1511000.0, + "stddev_ns": 13447.69, + "ops_per_sec": 660.07, + "total_sum_of_medians_ns": 27476500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 68051000.0, + "mad_ns": 30500.0, + "iqr_ns": 61250.0, + "min_ns": 67947000.0, + "stddev_ns": 536905.57, + "ops_per_sec": 14.69, + "total_sum_of_medians_ns": 587283000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 518699000.0, + "mad_ns": 132000.0, + "iqr_ns": 254000.0, + "min_ns": 518336000.0, + "stddev_ns": 3280778.61, + "ops_per_sec": 1.93, + "total_sum_of_medians_ns": 587283000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 533000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 532000.0, + "stddev_ns": 2762.74, + "ops_per_sec": 1876.17, + "total_sum_of_medians_ns": 587283000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 1546000.0, + "mad_ns": 3000.0, + "iqr_ns": 5000.0, + "min_ns": 1542000.0, + "stddev_ns": 28521.19, + "ops_per_sec": 646.83, + "total_sum_of_medians_ns": 44557500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 40776500.0, + "mad_ns": 46000.0, + "iqr_ns": 127250.0, + "min_ns": 40690000.0, + "stddev_ns": 3174490.59, + "ops_per_sec": 24.52, + "total_sum_of_medians_ns": 44557500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 2235000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 2229000.0, + "stddev_ns": 6104.69, + "ops_per_sec": 447.43, + "total_sum_of_medians_ns": 44557500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 4089000.0, + "mad_ns": 4000.0, + "iqr_ns": 8000.0, + "min_ns": 4081000.0, + "stddev_ns": 8966.78, + "ops_per_sec": 244.56, + "total_sum_of_medians_ns": 90201500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 83877500.0, + "mad_ns": 45500.0, + "iqr_ns": 92750.0, + "min_ns": 83736000.0, + "stddev_ns": 278703.82, + "ops_per_sec": 11.92, + "total_sum_of_medians_ns": 90201500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 2235000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 2230000.0, + "stddev_ns": 6717.01, + "ops_per_sec": 447.43, + "total_sum_of_medians_ns": 90201500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 876000.0, + "mad_ns": 4000.0, + "iqr_ns": 7000.0, + "min_ns": 866000.0, + "stddev_ns": 5579.24, + "ops_per_sec": 1141.55, + "total_sum_of_medians_ns": 22480500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 20443500.0, + "mad_ns": 38000.0, + "iqr_ns": 143500.0, + "min_ns": 20345000.0, + "stddev_ns": 195834.36, + "ops_per_sec": 48.92, + "total_sum_of_medians_ns": 22480500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 1161000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 1153000.0, + "stddev_ns": 5525.58, + "ops_per_sec": 861.33, + "total_sum_of_medians_ns": 22480500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 55632500.0, + "mad_ns": 156500.0, + "iqr_ns": 803000.0, + "min_ns": 55339000.0, + "stddev_ns": 917812.73, + "ops_per_sec": 17.98, + "total_sum_of_medians_ns": 482291500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 426258000.0, + "mad_ns": 1788000.0, + "iqr_ns": 3523250.0, + "min_ns": 422798000.0, + "stddev_ns": 19057991.14, + "ops_per_sec": 2.35, + "total_sum_of_medians_ns": 482291500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 401000.0, + "mad_ns": 1000.0, + "iqr_ns": 3000.0, + "min_ns": 398000.0, + "stddev_ns": 4352.02, + "ops_per_sec": 2493.77, + "total_sum_of_medians_ns": 482291500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 1274000.0, + "mad_ns": 3000.0, + "iqr_ns": 7000.0, + "min_ns": 1267000.0, + "stddev_ns": 7095.03, + "ops_per_sec": 784.93, + "total_sum_of_medians_ns": 36790500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 33717500.0, + "mad_ns": 41500.0, + "iqr_ns": 86500.0, + "min_ns": 33526000.0, + "stddev_ns": 116111.71, + "ops_per_sec": 29.66, + "total_sum_of_medians_ns": 36790500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 1799000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 1790000.0, + "stddev_ns": 32008.26, + "ops_per_sec": 555.86, + "total_sum_of_medians_ns": 36790500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 3365000.0, + "mad_ns": 11000.0, + "iqr_ns": 27000.0, + "min_ns": 3324000.0, + "stddev_ns": 20715.23, + "ops_per_sec": 297.18, + "total_sum_of_medians_ns": 74464000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 69270000.0, + "mad_ns": 350000.0, + "iqr_ns": 694000.0, + "min_ns": 68669000.0, + "stddev_ns": 1591740.46, + "ops_per_sec": 14.44, + "total_sum_of_medians_ns": 74464000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 1829000.0, + "mad_ns": 3000.0, + "iqr_ns": 9000.0, + "min_ns": 1820000.0, + "stddev_ns": 19081.13, + "ops_per_sec": 546.75, + "total_sum_of_medians_ns": 74464000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 17000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 16000.0, + "stddev_ns": 6489.14, + "ops_per_sec": 58823.53, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 17000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 16000.0, + "stddev_ns": 649.82, + "ops_per_sec": 58823.53, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 46000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 45000.0, + "stddev_ns": 893.85, + "ops_per_sec": 21739.13, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 42000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 41000.0, + "stddev_ns": 810.77, + "ops_per_sec": 23809.52, + "total_sum_of_medians_ns": 80000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 122000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 121000.0, + "stddev_ns": 16044.19, + "ops_per_sec": 8196.72, + "total_sum_of_medians_ns": 413000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 216000.0, + "mad_ns": 125000.0, + "iqr_ns": 250000.0, + "min_ns": 90000.0, + "stddev_ns": 244154.57, + "ops_per_sec": 4629.63, + "total_sum_of_medians_ns": 413000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 75000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 74000.0, + "stddev_ns": 1022.59, + "ops_per_sec": 13333.33, + "total_sum_of_medians_ns": 413000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify_cached_key", + "median_ns": 36000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 35000.0, + "stddev_ns": 2534.27, + "ops_per_sec": 27777.78, + "total_sum_of_medians_ns": 413000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 213000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 209000.0, + "stddev_ns": 31792.76, + "ops_per_sec": 4694.84, + "total_sum_of_medians_ns": 732000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 395000.0, + "mad_ns": 182000.0, + "iqr_ns": 447000.0, + "min_ns": 128000.0, + "stddev_ns": 409201.29, + "ops_per_sec": 2531.65, + "total_sum_of_medians_ns": 732000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 124000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 122000.0, + "stddev_ns": 9393.17, + "ops_per_sec": 8064.52, + "total_sum_of_medians_ns": 732000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 53000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 53000.0, + "stddev_ns": 917.53, + "ops_per_sec": 18867.92, + "total_sum_of_medians_ns": 732000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 305000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 303000.0, + "stddev_ns": 2212.79, + "ops_per_sec": 3278.69, + "total_sum_of_medians_ns": 939000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 435000.0, + "mad_ns": 254000.0, + "iqr_ns": 511000.0, + "min_ns": 179000.0, + "stddev_ns": 423898.64, + "ops_per_sec": 2298.85, + "total_sum_of_medians_ns": 939000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 199000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 197000.0, + "stddev_ns": 4620.38, + "ops_per_sec": 5025.13, + "total_sum_of_medians_ns": 939000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 78000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 77000.0, + "stddev_ns": 1090.28, + "ops_per_sec": 12820.51, + "total_sum_of_medians_ns": 939000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 293000.0, + "mad_ns": 2000.0, + "iqr_ns": 3000.0, + "min_ns": 281000.0, + "stddev_ns": 3050.72, + "ops_per_sec": 3412.97, + "total_sum_of_medians_ns": 7493000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 6778000.0, + "mad_ns": 15000.0, + "iqr_ns": 29000.0, + "min_ns": 6728000.0, + "stddev_ns": 19973.87, + "ops_per_sec": 147.54, + "total_sum_of_medians_ns": 7493000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 422000.0, + "mad_ns": 5000.0, + "iqr_ns": 11000.0, + "min_ns": 397000.0, + "stddev_ns": 7597.1, + "ops_per_sec": 2369.67, + "total_sum_of_medians_ns": 7493000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 422000.0, + "mad_ns": 5000.0, + "iqr_ns": 11000.0, + "min_ns": 399000.0, + "stddev_ns": 7607.55, + "ops_per_sec": 2369.67, + "total_sum_of_medians_ns": 7493000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 18576000.0, + "mad_ns": 20000.0, + "iqr_ns": 38000.0, + "min_ns": 18488000.0, + "stddev_ns": 30898.13, + "ops_per_sec": 53.83, + "total_sum_of_medians_ns": 159350500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 140634500.0, + "mad_ns": 85000.0, + "iqr_ns": 168000.0, + "min_ns": 140268000.0, + "stddev_ns": 709279.53, + "ops_per_sec": 7.11, + "total_sum_of_medians_ns": 159350500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 140000.0, + "mad_ns": 2000.0, + "iqr_ns": 4000.0, + "min_ns": 133000.0, + "stddev_ns": 2855.89, + "ops_per_sec": 7142.86, + "total_sum_of_medians_ns": 159350500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 140000.0, + "mad_ns": 2000.0, + "iqr_ns": 4000.0, + "min_ns": 133000.0, + "stddev_ns": 2894.7, + "ops_per_sec": 7142.86, + "total_sum_of_medians_ns": 159350500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 432000.0, + "mad_ns": 3000.0, + "iqr_ns": 5500.0, + "min_ns": 425000.0, + "stddev_ns": 4027.58, + "ops_per_sec": 2314.81, + "total_sum_of_medians_ns": 13052000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 11964000.0, + "mad_ns": 17000.0, + "iqr_ns": 33000.0, + "min_ns": 11898000.0, + "stddev_ns": 25882.68, + "ops_per_sec": 83.58, + "total_sum_of_medians_ns": 13052000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 656000.0, + "mad_ns": 9000.0, + "iqr_ns": 19000.0, + "min_ns": 616000.0, + "stddev_ns": 13432.82, + "ops_per_sec": 1524.39, + "total_sum_of_medians_ns": 13052000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 658000.0, + "mad_ns": 9000.0, + "iqr_ns": 17000.0, + "min_ns": 620000.0, + "stddev_ns": 12546.35, + "ops_per_sec": 1519.76, + "total_sum_of_medians_ns": 13052000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1156000.0, + "mad_ns": 3000.0, + "iqr_ns": 6000.0, + "min_ns": 1147000.0, + "stddev_ns": 5198.14, + "ops_per_sec": 865.05, + "total_sum_of_medians_ns": 26638000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 24799000.0, + "mad_ns": 22500.0, + "iqr_ns": 44000.0, + "min_ns": 24732000.0, + "stddev_ns": 259275.29, + "ops_per_sec": 40.32, + "total_sum_of_medians_ns": 26638000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 683000.0, + "mad_ns": 7000.0, + "iqr_ns": 13000.0, + "min_ns": 654000.0, + "stddev_ns": 100563.55, + "ops_per_sec": 1464.13, + "total_sum_of_medians_ns": 26638000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 681000.0, + "mad_ns": 6000.0, + "iqr_ns": 13000.0, + "min_ns": 648000.0, + "stddev_ns": 9629.05, + "ops_per_sec": 1468.43, + "total_sum_of_medians_ns": 26638000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 11000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 9000.0, + "stddev_ns": 597.5, + "ops_per_sec": 90909.09, + "total_sum_of_medians_ns": 59000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 9000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 8000.0, + "stddev_ns": 548.34, + "ops_per_sec": 111111.11, + "total_sum_of_medians_ns": 59000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 39000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 38000.0, + "stddev_ns": 871.53, + "ops_per_sec": 25641.03, + "total_sum_of_medians_ns": 59000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 30000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 27000.0, + "stddev_ns": 769.32, + "ops_per_sec": 33333.33, + "total_sum_of_medians_ns": 121000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 66000.0, + "mad_ns": 26000.0, + "iqr_ns": 52000.0, + "min_ns": 38000.0, + "stddev_ns": 56422.14, + "ops_per_sec": 15151.52, + "total_sum_of_medians_ns": 121000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 25000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 24000.0, + "stddev_ns": 602.93, + "ops_per_sec": 40000.0, + "total_sum_of_medians_ns": 121000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 50000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 48000.0, + "stddev_ns": 4871.2, + "ops_per_sec": 20000.0, + "total_sum_of_medians_ns": 197000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 104000.0, + "mad_ns": 35000.0, + "iqr_ns": 80000.0, + "min_ns": 59000.0, + "stddev_ns": 72357.42, + "ops_per_sec": 9615.38, + "total_sum_of_medians_ns": 197000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 43000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 42000.0, + "stddev_ns": 1130.91, + "ops_per_sec": 23255.81, + "total_sum_of_medians_ns": 197000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 79000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 75000.0, + "stddev_ns": 2392.38, + "ops_per_sec": 12658.23, + "total_sum_of_medians_ns": 290000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 141000.0, + "mad_ns": 45000.0, + "iqr_ns": 91000.0, + "min_ns": 94000.0, + "stddev_ns": 82890.5, + "ops_per_sec": 7092.2, + "total_sum_of_medians_ns": 290000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 70000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 69000.0, + "stddev_ns": 1121.89, + "ops_per_sec": 14285.71, + "total_sum_of_medians_ns": 290000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 14000.0, + "stddev_ns": 695.4, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 72000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 14000.0, + "stddev_ns": 922.23, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 72000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 40000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 35000.0, + "stddev_ns": 1491.99, + "ops_per_sec": 25000.0, + "total_sum_of_medians_ns": 72000.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 32000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 28000.0, + "stddev_ns": 2062.36, + "ops_per_sec": 31250.0, + "total_sum_of_medians_ns": 182000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 115000.0, + "mad_ns": 54000.0, + "iqr_ns": 107000.0, + "min_ns": 54000.0, + "stddev_ns": 98331.22, + "ops_per_sec": 8695.65, + "total_sum_of_medians_ns": 182000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 35000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 31000.0, + "stddev_ns": 1190.82, + "ops_per_sec": 28571.43, + "total_sum_of_medians_ns": 182000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 64000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 56000.0, + "stddev_ns": 2947.83, + "ops_per_sec": 15625.0, + "total_sum_of_medians_ns": 324000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 199000.0, + "mad_ns": 80000.0, + "iqr_ns": 188000.0, + "min_ns": 81000.0, + "stddev_ns": 173554.52, + "ops_per_sec": 5025.13, + "total_sum_of_medians_ns": 324000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 61000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 54000.0, + "stddev_ns": 2625.56, + "ops_per_sec": 16393.44, + "total_sum_of_medians_ns": 324000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 90000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 79000.0, + "stddev_ns": 3818.83, + "ops_per_sec": 11111.11, + "total_sum_of_medians_ns": 434000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 250000.0, + "mad_ns": 107000.0, + "iqr_ns": 222000.0, + "min_ns": 125000.0, + "stddev_ns": 186348.5, + "ops_per_sec": 4000.0, + "total_sum_of_medians_ns": 434000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 94000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 83000.0, + "stddev_ns": 8725.58, + "ops_per_sec": 10638.3, + "total_sum_of_medians_ns": 434000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 2778000.0, + "mad_ns": 376000.0, + "iqr_ns": 874000.0, + "min_ns": 2221000.0, + "stddev_ns": 756623.52, + "ops_per_sec": 359.97, + "total_sum_of_medians_ns": 2898000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 104000.0, + "mad_ns": 3000.0, + "iqr_ns": 5000.0, + "min_ns": 89000.0, + "stddev_ns": 4940.1, + "ops_per_sec": 9615.38, + "total_sum_of_medians_ns": 2898000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 16000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 14000.0, + "stddev_ns": 1136.97, + "ops_per_sec": 62500.0, + "total_sum_of_medians_ns": 2898000.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 8446500.0, + "mad_ns": 723500.0, + "iqr_ns": 1816000.0, + "min_ns": 7418000.0, + "stddev_ns": 2398520.73, + "ops_per_sec": 118.39, + "total_sum_of_medians_ns": 8686500.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 208000.0, + "mad_ns": 4000.0, + "iqr_ns": 8000.0, + "min_ns": 183000.0, + "stddev_ns": 13808.71, + "ops_per_sec": 4807.69, + "total_sum_of_medians_ns": 8686500.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 32000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 28000.0, + "stddev_ns": 1554.95, + "ops_per_sec": 31250.0, + "total_sum_of_medians_ns": 8686500.0, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 484000.0, + "mad_ns": 3000.0, + "iqr_ns": 10000.0, + "min_ns": 433000.0, + "stddev_ns": 12913.06, + "ops_per_sec": 2066.12, + "total_sum_of_medians_ns": 12505500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 11345500.0, + "mad_ns": 19500.0, + "iqr_ns": 37000.0, + "min_ns": 10527000.0, + "stddev_ns": 158426.44, + "ops_per_sec": 88.14, + "total_sum_of_medians_ns": 12505500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 676000.0, + "mad_ns": 2000.0, + "iqr_ns": 3000.0, + "min_ns": 605000.0, + "stddev_ns": 15974.42, + "ops_per_sec": 1479.29, + "total_sum_of_medians_ns": 12505500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 30971000.0, + "mad_ns": 174500.0, + "iqr_ns": 511500.0, + "min_ns": 29683000.0, + "stddev_ns": 6655172.86, + "ops_per_sec": 32.29, + "total_sum_of_medians_ns": 264785500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 233588500.0, + "mad_ns": 1540000.0, + "iqr_ns": 3342250.0, + "min_ns": 229211000.0, + "stddev_ns": 4466189.2, + "ops_per_sec": 4.28, + "total_sum_of_medians_ns": 264785500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 226000.0, + "mad_ns": 4000.0, + "iqr_ns": 10000.0, + "min_ns": 202000.0, + "stddev_ns": 10181.27, + "ops_per_sec": 4424.78, + "total_sum_of_medians_ns": 264785500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 694000.0, + "mad_ns": 11000.0, + "iqr_ns": 25000.0, + "min_ns": 627000.0, + "stddev_ns": 44910.7, + "ops_per_sec": 1440.92, + "total_sum_of_medians_ns": 19993000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 18301000.0, + "mad_ns": 270500.0, + "iqr_ns": 570000.0, + "min_ns": 17399000.0, + "stddev_ns": 863558.25, + "ops_per_sec": 54.64, + "total_sum_of_medians_ns": 19993000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 998000.0, + "mad_ns": 11000.0, + "iqr_ns": 27000.0, + "min_ns": 896000.0, + "stddev_ns": 31309.84, + "ops_per_sec": 1002.0, + "total_sum_of_medians_ns": 19993000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1853000.0, + "mad_ns": 14000.0, + "iqr_ns": 34000.0, + "min_ns": 1665000.0, + "stddev_ns": 50333.33, + "ops_per_sec": 539.67, + "total_sum_of_medians_ns": 40831000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 37961000.0, + "mad_ns": 402000.0, + "iqr_ns": 857000.0, + "min_ns": 36452000.0, + "stddev_ns": 2417970.04, + "ops_per_sec": 26.34, + "total_sum_of_medians_ns": 40831000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 1017000.0, + "mad_ns": 13000.0, + "iqr_ns": 31000.0, + "min_ns": 915000.0, + "stddev_ns": 50590.08, + "ops_per_sec": 983.28, + "total_sum_of_medians_ns": 40831000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 401000.0, + "mad_ns": 8000.0, + "iqr_ns": 16000.0, + "min_ns": 350000.0, + "stddev_ns": 20963.41, + "ops_per_sec": 2493.77, + "total_sum_of_medians_ns": 10544000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 9571000.0, + "mad_ns": 121000.0, + "iqr_ns": 247500.0, + "min_ns": 9123000.0, + "stddev_ns": 181542.05, + "ops_per_sec": 104.48, + "total_sum_of_medians_ns": 10544000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 572000.0, + "mad_ns": 9000.0, + "iqr_ns": 18000.0, + "min_ns": 509000.0, + "stddev_ns": 22213.05, + "ops_per_sec": 1748.25, + "total_sum_of_medians_ns": 10544000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 25623500.0, + "mad_ns": 254000.0, + "iqr_ns": 497500.0, + "min_ns": 24665000.0, + "stddev_ns": 400214.63, + "ops_per_sec": 39.03, + "total_sum_of_medians_ns": 221946500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 196122000.0, + "mad_ns": 1549500.0, + "iqr_ns": 3077500.0, + "min_ns": 190890000.0, + "stddev_ns": 2574472.67, + "ops_per_sec": 5.1, + "total_sum_of_medians_ns": 221946500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 201000.0, + "mad_ns": 4000.0, + "iqr_ns": 8000.0, + "min_ns": 177000.0, + "stddev_ns": 9996.97, + "ops_per_sec": 4975.12, + "total_sum_of_medians_ns": 221946500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 585000.0, + "mad_ns": 10000.0, + "iqr_ns": 20000.0, + "min_ns": 518000.0, + "stddev_ns": 32417.44, + "ops_per_sec": 1709.4, + "total_sum_of_medians_ns": 17177500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 15740500.0, + "mad_ns": 170000.0, + "iqr_ns": 358500.0, + "min_ns": 15145000.0, + "stddev_ns": 271853.69, + "ops_per_sec": 63.53, + "total_sum_of_medians_ns": 17177500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 852000.0, + "mad_ns": 22000.0, + "iqr_ns": 43000.0, + "min_ns": 746000.0, + "stddev_ns": 94816.78, + "ops_per_sec": 1173.71, + "total_sum_of_medians_ns": 17177500.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 1592000.0, + "mad_ns": 49000.0, + "iqr_ns": 97500.0, + "min_ns": 1371000.0, + "stddev_ns": 209188.25, + "ops_per_sec": 628.14, + "total_sum_of_medians_ns": 35089000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 32635000.0, + "mad_ns": 325500.0, + "iqr_ns": 638000.0, + "min_ns": 31600000.0, + "stddev_ns": 720490.35, + "ops_per_sec": 30.64, + "total_sum_of_medians_ns": 35089000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 862000.0, + "mad_ns": 8000.0, + "iqr_ns": 15000.0, + "min_ns": 776000.0, + "stddev_ns": 15915.47, + "ops_per_sec": 1160.09, + "total_sum_of_medians_ns": 35089000.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 8000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 7000.0, + "stddev_ns": 799.9, + "ops_per_sec": 125000.0, + "total_sum_of_medians_ns": 36000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 8000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 7000.0, + "stddev_ns": 727.92, + "ops_per_sec": 125000.0, + "total_sum_of_medians_ns": 36000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 20000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 17000.0, + "stddev_ns": 1572.73, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 36000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 18000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 15000.0, + "stddev_ns": 1656.79, + "ops_per_sec": 55555.56, + "total_sum_of_medians_ns": 36000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 54000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 47000.0, + "stddev_ns": 2885.24, + "ops_per_sec": 18518.52, + "total_sum_of_medians_ns": 180000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 92000.0, + "mad_ns": 52000.0, + "iqr_ns": 105000.0, + "min_ns": 35000.0, + "stddev_ns": 100379.87, + "ops_per_sec": 10869.57, + "total_sum_of_medians_ns": 180000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 34000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 30000.0, + "stddev_ns": 6317.15, + "ops_per_sec": 29411.76, + "total_sum_of_medians_ns": 180000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify_cached_key", + "median_ns": 15000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 13000.0, + "stddev_ns": 1377.96, + "ops_per_sec": 66666.67, + "total_sum_of_medians_ns": 180000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 94000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 83000.0, + "stddev_ns": 3772.43, + "ops_per_sec": 10638.3, + "total_sum_of_medians_ns": 312000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 162000.0, + "mad_ns": 79000.0, + "iqr_ns": 184000.0, + "min_ns": 49000.0, + "stddev_ns": 183149.62, + "ops_per_sec": 6172.84, + "total_sum_of_medians_ns": 312000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 56000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 50000.0, + "stddev_ns": 3619.84, + "ops_per_sec": 17857.14, + "total_sum_of_medians_ns": 312000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 22000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 19000.0, + "stddev_ns": 1305.93, + "ops_per_sec": 45454.55, + "total_sum_of_medians_ns": 312000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 133000.0, + "mad_ns": 2000.0, + "iqr_ns": 5000.0, + "min_ns": 119000.0, + "stddev_ns": 10704.08, + "ops_per_sec": 7518.8, + "total_sum_of_medians_ns": 401000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 177000.0, + "mad_ns": 100000.0, + "iqr_ns": 169000.0, + "min_ns": 66000.0, + "stddev_ns": 172044.14, + "ops_per_sec": 5649.72, + "total_sum_of_medians_ns": 401000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 91000.0, + "mad_ns": 1000.0, + "iqr_ns": 5000.0, + "min_ns": 81000.0, + "stddev_ns": 5219.89, + "ops_per_sec": 10989.01, + "total_sum_of_medians_ns": 401000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 31000.0, + "mad_ns": 1000.0, + "iqr_ns": 1000.0, + "min_ns": 27000.0, + "stddev_ns": 54190.95, + "ops_per_sec": 32258.06, + "total_sum_of_medians_ns": 401000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 155000.0, + "mad_ns": 6000.0, + "iqr_ns": 19000.0, + "min_ns": 147000.0, + "stddev_ns": 13634.53, + "ops_per_sec": 6451.61, + "total_sum_of_medians_ns": 3890000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 3526000.0, + "mad_ns": 41500.0, + "iqr_ns": 79500.0, + "min_ns": 3418000.0, + "stddev_ns": 93434.1, + "ops_per_sec": 283.61, + "total_sum_of_medians_ns": 3890000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 209000.0, + "mad_ns": 6000.0, + "iqr_ns": 14000.0, + "min_ns": 202000.0, + "stddev_ns": 9987.36, + "ops_per_sec": 4784.69, + "total_sum_of_medians_ns": 3890000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 209000.0, + "mad_ns": 6000.0, + "iqr_ns": 14000.0, + "min_ns": 202000.0, + "stddev_ns": 9029.93, + "ops_per_sec": 4784.69, + "total_sum_of_medians_ns": 3890000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 9684000.0, + "mad_ns": 101000.0, + "iqr_ns": 217500.0, + "min_ns": 9375000.0, + "stddev_ns": 257207.86, + "ops_per_sec": 103.26, + "total_sum_of_medians_ns": 83079500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 73328500.0, + "mad_ns": 448500.0, + "iqr_ns": 871750.0, + "min_ns": 71862000.0, + "stddev_ns": 733882.11, + "ops_per_sec": 13.64, + "total_sum_of_medians_ns": 83079500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 67000.0, + "mad_ns": 0.0, + "iqr_ns": 6000.0, + "min_ns": 66000.0, + "stddev_ns": 3815.58, + "ops_per_sec": 14925.37, + "total_sum_of_medians_ns": 83079500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 67000.0, + "mad_ns": 0.0, + "iqr_ns": 4000.0, + "min_ns": 66000.0, + "stddev_ns": 3836.99, + "ops_per_sec": 14925.37, + "total_sum_of_medians_ns": 83079500.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 220000.0, + "mad_ns": 4000.0, + "iqr_ns": 12000.0, + "min_ns": 215000.0, + "stddev_ns": 9150.64, + "ops_per_sec": 4545.45, + "total_sum_of_medians_ns": 6654000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 6108000.0, + "mad_ns": 52000.0, + "iqr_ns": 108000.0, + "min_ns": 5877000.0, + "stddev_ns": 129332.73, + "ops_per_sec": 163.72, + "total_sum_of_medians_ns": 6654000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 326000.0, + "mad_ns": 9000.0, + "iqr_ns": 17000.0, + "min_ns": 314000.0, + "stddev_ns": 21523.52, + "ops_per_sec": 3067.48, + "total_sum_of_medians_ns": 6654000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 324000.0, + "mad_ns": 8000.0, + "iqr_ns": 19000.0, + "min_ns": 314000.0, + "stddev_ns": 16412.47, + "ops_per_sec": 3086.42, + "total_sum_of_medians_ns": 6654000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 595000.0, + "mad_ns": 9000.0, + "iqr_ns": 21000.0, + "min_ns": 557000.0, + "stddev_ns": 21829.15, + "ops_per_sec": 1680.67, + "total_sum_of_medians_ns": 13589000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 12662000.0, + "mad_ns": 120000.0, + "iqr_ns": 255500.0, + "min_ns": 12147000.0, + "stddev_ns": 219637.21, + "ops_per_sec": 78.98, + "total_sum_of_medians_ns": 13589000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 332000.0, + "mad_ns": 9000.0, + "iqr_ns": 19000.0, + "min_ns": 315000.0, + "stddev_ns": 12067.17, + "ops_per_sec": 3012.05, + "total_sum_of_medians_ns": 13589000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 333000.0, + "mad_ns": 10000.0, + "iqr_ns": 20000.0, + "min_ns": 315000.0, + "stddev_ns": 16951.45, + "ops_per_sec": 3003.0, + "total_sum_of_medians_ns": 13589000.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 6000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 4000.0, + "stddev_ns": 585.87, + "ops_per_sec": 166666.67, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 4000.0, + "mad_ns": 0.0, + "iqr_ns": 0.0, + "min_ns": 3000.0, + "stddev_ns": 497.49, + "ops_per_sec": 250000.0, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 18000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 16000.0, + "stddev_ns": 1183.71, + "ops_per_sec": 55555.56, + "total_sum_of_medians_ns": 28000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 15000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 12000.0, + "stddev_ns": 1009.63, + "ops_per_sec": 66666.67, + "total_sum_of_medians_ns": 60000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 33000.0, + "mad_ns": 13000.0, + "iqr_ns": 27000.0, + "min_ns": 17000.0, + "stddev_ns": 24344.51, + "ops_per_sec": 30303.03, + "total_sum_of_medians_ns": 60000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 12000.0, + "mad_ns": 0.0, + "iqr_ns": 1000.0, + "min_ns": 10000.0, + "stddev_ns": 1159.0, + "ops_per_sec": 83333.33, + "total_sum_of_medians_ns": 60000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 24000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 20000.0, + "stddev_ns": 1375.09, + "ops_per_sec": 41666.67, + "total_sum_of_medians_ns": 96000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 52000.0, + "mad_ns": 18000.0, + "iqr_ns": 40000.0, + "min_ns": 26000.0, + "stddev_ns": 37116.55, + "ops_per_sec": 19230.77, + "total_sum_of_medians_ns": 96000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 20000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 18000.0, + "stddev_ns": 6498.66, + "ops_per_sec": 50000.0, + "total_sum_of_medians_ns": 96000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 37000.0, + "mad_ns": 1000.0, + "iqr_ns": 4000.0, + "min_ns": 32000.0, + "stddev_ns": 3893.22, + "ops_per_sec": 27027.03, + "total_sum_of_medians_ns": 139000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 69000.0, + "mad_ns": 21000.0, + "iqr_ns": 44000.0, + "min_ns": 41000.0, + "stddev_ns": 42378.72, + "ops_per_sec": 14492.75, + "total_sum_of_medians_ns": 139000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 33000.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 29000.0, + "stddev_ns": 2917.27, + "ops_per_sec": 30303.03, + "total_sum_of_medians_ns": 139000.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 17254.0, + "mad_ns": 124.0, + "iqr_ns": 249.0, + "min_ns": 16467.0, + "stddev_ns": 915.24, + "ops_per_sec": 57957.58, + "total_sum_of_medians_ns": 79568.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 17221.0, + "mad_ns": 128.0, + "iqr_ns": 255.0, + "min_ns": 16366.0, + "stddev_ns": 907.85, + "ops_per_sec": 58068.64, + "total_sum_of_medians_ns": 79568.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "openssl", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 45093.0, + "mad_ns": 435.0, + "iqr_ns": 871.0, + "min_ns": 43043.0, + "stddev_ns": 1694.85, + "ops_per_sec": 22176.39, + "total_sum_of_medians_ns": 79568.0, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 11748.0, + "mad_ns": 49.0, + "iqr_ns": 98.0, + "min_ns": 11047.0, + "stddev_ns": 506.09, + "ops_per_sec": 85120.87, + "total_sum_of_medians_ns": 49893.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 26240.0, + "mad_ns": 10493.0, + "iqr_ns": 20903.75, + "min_ns": 15223.0, + "stddev_ns": 19904.37, + "ops_per_sec": 38109.76, + "total_sum_of_medians_ns": 49893.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 11905.0, + "mad_ns": 30.0, + "iqr_ns": 65.0, + "min_ns": 11780.0, + "stddev_ns": 891.97, + "ops_per_sec": 83998.32, + "total_sum_of_medians_ns": 49893.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 20136.0, + "mad_ns": 85.0, + "iqr_ns": 202.0, + "min_ns": 19768.0, + "stddev_ns": 1371.78, + "ops_per_sec": 49662.3, + "total_sum_of_medians_ns": 84494.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 44542.0, + "mad_ns": 15226.0, + "iqr_ns": 35599.0, + "min_ns": 24079.0, + "stddev_ns": 32352.22, + "ops_per_sec": 22450.72, + "total_sum_of_medians_ns": 84494.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 19816.0, + "mad_ns": 47.0, + "iqr_ns": 94.0, + "min_ns": 19579.0, + "stddev_ns": 517.5, + "ops_per_sec": 50464.27, + "total_sum_of_medians_ns": 84494.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 31642.0, + "mad_ns": 91.0, + "iqr_ns": 184.0, + "min_ns": 30616.0, + "stddev_ns": 2602.7, + "ops_per_sec": 31603.56, + "total_sum_of_medians_ns": 117739.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 54913.0, + "mad_ns": 17697.0, + "iqr_ns": 34569.0, + "min_ns": 36795.0, + "stddev_ns": 30705.88, + "ops_per_sec": 18210.62, + "total_sum_of_medians_ns": 117739.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 31184.0, + "mad_ns": 68.0, + "iqr_ns": 139.0, + "min_ns": 30912.0, + "stddev_ns": 2543.99, + "ops_per_sec": 32067.73, + "total_sum_of_medians_ns": 117739.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 2990634.0, + "mad_ns": 353085.0, + "iqr_ns": 809186.5, + "min_ns": 2541641.0, + "stddev_ns": 686395.86, + "ops_per_sec": 334.38, + "total_sum_of_medians_ns": 3111214.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 100502.0, + "mad_ns": 925.0, + "iqr_ns": 1851.0, + "min_ns": 95437.0, + "stddev_ns": 2825.42, + "ops_per_sec": 9950.05, + "total_sum_of_medians_ns": 3111214.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Falcon-512", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 20078.0, + "mad_ns": 39.0, + "iqr_ns": 80.0, + "min_ns": 19774.0, + "stddev_ns": 987.56, + "ops_per_sec": 49805.76, + "total_sum_of_medians_ns": 3111214.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 9183299.0, + "mad_ns": 648047.0, + "iqr_ns": 1763013.0, + "min_ns": 8307256.0, + "stddev_ns": 2469552.4, + "ops_per_sec": 108.89, + "total_sum_of_medians_ns": 9422226.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 199608.0, + "mad_ns": 1371.0, + "iqr_ns": 2734.5, + "min_ns": 193382.0, + "stddev_ns": 3792.77, + "ops_per_sec": 5009.82, + "total_sum_of_medians_ns": 9422226.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Falcon-1024", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 39319.0, + "mad_ns": 247.0, + "iqr_ns": 505.0, + "min_ns": 38611.0, + "stddev_ns": 645.61, + "ops_per_sec": 25433.0, + "total_sum_of_medians_ns": 9422226.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 521718.0, + "mad_ns": 1080.0, + "iqr_ns": 2412.5, + "min_ns": 518559.0, + "stddev_ns": 11431.06, + "ops_per_sec": 1916.74, + "total_sum_of_medians_ns": 13490197.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 12241336.5, + "mad_ns": 17780.0, + "iqr_ns": 42615.25, + "min_ns": 12204563.0, + "stddev_ns": 189275.46, + "ops_per_sec": 81.69, + "total_sum_of_medians_ns": 13490197.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 727143.0, + "mad_ns": 7066.0, + "iqr_ns": 17552.5, + "min_ns": 717680.0, + "stddev_ns": 12825.38, + "ops_per_sec": 1375.25, + "total_sum_of_medians_ns": 13490197.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 33373943.5, + "mad_ns": 37094.0, + "iqr_ns": 81154.0, + "min_ns": 33302891.0, + "stddev_ns": 497879.96, + "ops_per_sec": 29.96, + "total_sum_of_medians_ns": 289358686.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 255742694.0, + "mad_ns": 1325985.0, + "iqr_ns": 3946790.75, + "min_ns": 253979677.0, + "stddev_ns": 8024233.97, + "ops_per_sec": 3.91, + "total_sum_of_medians_ns": 289358686.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 242049.0, + "mad_ns": 654.0, + "iqr_ns": 1530.0, + "min_ns": 240752.0, + "stddev_ns": 6016.02, + "ops_per_sec": 4131.39, + "total_sum_of_medians_ns": 289358686.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 773992.0, + "mad_ns": 2112.5, + "iqr_ns": 8067.5, + "min_ns": 769714.0, + "stddev_ns": 13465.32, + "ops_per_sec": 1292.0, + "total_sum_of_medians_ns": 22295837.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 20407963.5, + "mad_ns": 25753.0, + "iqr_ns": 67037.25, + "min_ns": 20339693.0, + "stddev_ns": 231939.3, + "ops_per_sec": 49.0, + "total_sum_of_medians_ns": 22295837.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 1113882.0, + "mad_ns": 2372.0, + "iqr_ns": 13086.0, + "min_ns": 1109514.0, + "stddev_ns": 12883.1, + "ops_per_sec": 897.76, + "total_sum_of_medians_ns": 22295837.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 2051162.5, + "mad_ns": 7723.5, + "iqr_ns": 19895.75, + "min_ns": 2038465.0, + "stddev_ns": 43154.85, + "ops_per_sec": 487.53, + "total_sum_of_medians_ns": 45767357.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 42600336.5, + "mad_ns": 89270.5, + "iqr_ns": 184126.5, + "min_ns": 42405479.0, + "stddev_ns": 306746.81, + "ops_per_sec": 23.47, + "total_sum_of_medians_ns": 45767357.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 1115858.0, + "mad_ns": 2517.0, + "iqr_ns": 13178.5, + "min_ns": 1111076.0, + "stddev_ns": 204869.11, + "ops_per_sec": 896.17, + "total_sum_of_medians_ns": 45767357.0, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 134076.5, + "mad_ns": 411.0, + "iqr_ns": 871.0, + "min_ns": 133066.0, + "stddev_ns": 61047.82, + "ops_per_sec": 7458.43, + "total_sum_of_medians_ns": 3534153.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 3160673.0, + "mad_ns": 7135.0, + "iqr_ns": 22280.5, + "min_ns": 3145694.0, + "stddev_ns": 47446.69, + "ops_per_sec": 316.39, + "total_sum_of_medians_ns": 3534153.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 239404.0, + "mad_ns": 639.0, + "iqr_ns": 1341.5, + "min_ns": 237549.0, + "stddev_ns": 5619.7, + "ops_per_sec": 4177.04, + "total_sum_of_medians_ns": 3534153.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 8521316.5, + "mad_ns": 7189.0, + "iqr_ns": 14804.5, + "min_ns": 8493725.0, + "stddev_ns": 68835.41, + "ops_per_sec": 117.35, + "total_sum_of_medians_ns": 73716331.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 65101880.0, + "mad_ns": 128570.0, + "iqr_ns": 862177.25, + "min_ns": 64938017.0, + "stddev_ns": 659256.23, + "ops_per_sec": 15.36, + "total_sum_of_medians_ns": 73716331.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-128s-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 93135.0, + "mad_ns": 353.0, + "iqr_ns": 960.5, + "min_ns": 92335.0, + "stddev_ns": 1874.1, + "ops_per_sec": 10737.1, + "total_sum_of_medians_ns": 73716331.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 202329.0, + "mad_ns": 616.0, + "iqr_ns": 1346.5, + "min_ns": 200847.0, + "stddev_ns": 4379.59, + "ops_per_sec": 4942.45, + "total_sum_of_medians_ns": 6119519.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 5539384.0, + "mad_ns": 3657.0, + "iqr_ns": 10118.0, + "min_ns": 5531492.0, + "stddev_ns": 46647.55, + "ops_per_sec": 180.53, + "total_sum_of_medians_ns": 6119519.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-192f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 377806.5, + "mad_ns": 755.0, + "iqr_ns": 1616.5, + "min_ns": 375412.0, + "stddev_ns": 8603.61, + "ops_per_sec": 2646.86, + "total_sum_of_medians_ns": 6119519.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 532266.0, + "mad_ns": 1009.0, + "iqr_ns": 3301.75, + "min_ns": 530322.0, + "stddev_ns": 173589.25, + "ops_per_sec": 1878.76, + "total_sum_of_medians_ns": 12272007.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 11352566.5, + "mad_ns": 18647.5, + "iqr_ns": 152075.25, + "min_ns": 11327219.0, + "stddev_ns": 177012.06, + "ops_per_sec": 88.09, + "total_sum_of_medians_ns": 12272007.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SPHINCS+-SHA2-256f-simple", + "implementation": "liboqs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 387175.0, + "mad_ns": 831.0, + "iqr_ns": 1778.25, + "min_ns": 384499.0, + "stddev_ns": 3926.74, + "ops_per_sec": 2582.81, + "total_sum_of_medians_ns": 12272007.5, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 8573.0, + "mad_ns": 53.0, + "iqr_ns": 127.0, + "min_ns": 8429.0, + "stddev_ns": 187.16, + "ops_per_sec": 116645.28, + "total_sum_of_medians_ns": 44835.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 8995.0, + "mad_ns": 36.0, + "iqr_ns": 84.0, + "min_ns": 8828.0, + "stddev_ns": 841.28, + "ops_per_sec": 111172.87, + "total_sum_of_medians_ns": 44835.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 27267.0, + "mad_ns": 38.0, + "iqr_ns": 78.0, + "min_ns": 27053.0, + "stddev_ns": 1111.3, + "ops_per_sec": 36674.37, + "total_sum_of_medians_ns": 44835.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "rustcrypto", + "classical": true, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 20761.0, + "mad_ns": 73.0, + "iqr_ns": 164.0, + "min_ns": 20538.0, + "stddev_ns": 489.67, + "ops_per_sec": 48167.24, + "total_sum_of_medians_ns": 44835.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 79271.0, + "mad_ns": 426.0, + "iqr_ns": 1021.0, + "min_ns": 78000.0, + "stddev_ns": 2666.34, + "ops_per_sec": 12614.95, + "total_sum_of_medians_ns": 242277.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 117906.5, + "mad_ns": 69160.5, + "iqr_ns": 138239.5, + "min_ns": 47242.0, + "stddev_ns": 133964.58, + "ops_per_sec": 8481.3, + "total_sum_of_medians_ns": 242277.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 45100.0, + "mad_ns": 157.0, + "iqr_ns": 451.0, + "min_ns": 44622.0, + "stddev_ns": 1966.37, + "ops_per_sec": 22172.95, + "total_sum_of_medians_ns": 242277.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 2, + "operation": "verify_cached_key", + "median_ns": 19981.0, + "mad_ns": 96.0, + "iqr_ns": 288.0, + "min_ns": 19662.0, + "stddev_ns": 726.2, + "ops_per_sec": 50047.55, + "total_sum_of_medians_ns": 242277.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 123305.0, + "mad_ns": 533.0, + "iqr_ns": 1144.0, + "min_ns": 121343.0, + "stddev_ns": 2849.7, + "ops_per_sec": 8109.97, + "total_sum_of_medians_ns": 404197.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 210081.0, + "mad_ns": 96745.0, + "iqr_ns": 239196.0, + "min_ns": 66370.0, + "stddev_ns": 219908.28, + "ops_per_sec": 4760.07, + "total_sum_of_medians_ns": 404197.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 70811.0, + "mad_ns": 413.0, + "iqr_ns": 958.0, + "min_ns": 69910.0, + "stddev_ns": 2572.73, + "ops_per_sec": 14122.1, + "total_sum_of_medians_ns": 404197.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 27698.0, + "mad_ns": 101.0, + "iqr_ns": 238.0, + "min_ns": 27339.0, + "stddev_ns": 47406.54, + "ops_per_sec": 36103.69, + "total_sum_of_medians_ns": 404197.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 191649.0, + "mad_ns": 980.0, + "iqr_ns": 3187.25, + "min_ns": 189642.0, + "stddev_ns": 8747.84, + "ops_per_sec": 5217.87, + "total_sum_of_medians_ns": 531370.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 224218.0, + "mad_ns": 132629.0, + "iqr_ns": 266741.5, + "min_ns": 89805.0, + "stddev_ns": 221461.42, + "ops_per_sec": 4459.95, + "total_sum_of_medians_ns": 531370.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 115503.0, + "mad_ns": 507.0, + "iqr_ns": 1131.5, + "min_ns": 114295.0, + "stddev_ns": 4037.9, + "ops_per_sec": 8657.78, + "total_sum_of_medians_ns": 531370.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 40103.0, + "mad_ns": 120.0, + "iqr_ns": 290.0, + "min_ns": 39701.0, + "stddev_ns": 1379.24, + "ops_per_sec": 24935.79, + "total_sum_of_medians_ns": 531370.0, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 191561.0, + "mad_ns": 230.0, + "iqr_ns": 625.0, + "min_ns": 191071.0, + "stddev_ns": 760.15, + "ops_per_sec": 5220.27, + "total_sum_of_medians_ns": 4961924.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 4505538.0, + "mad_ns": 3109.0, + "iqr_ns": 7309.5, + "min_ns": 4498411.0, + "stddev_ns": 30751.25, + "ops_per_sec": 221.95, + "total_sum_of_medians_ns": 4961924.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 264825.5, + "mad_ns": 435.0, + "iqr_ns": 871.0, + "min_ns": 263913.0, + "stddev_ns": 4210.54, + "ops_per_sec": 3776.07, + "total_sum_of_medians_ns": 4961924.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 263289.0, + "mad_ns": 297.0, + "iqr_ns": 712.5, + "min_ns": 262701.0, + "stddev_ns": 10015.15, + "ops_per_sec": 3798.11, + "total_sum_of_medians_ns": 4961924.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "keygen", + "median_ns": 12185176.5, + "mad_ns": 13298.5, + "iqr_ns": 26116.25, + "min_ns": 12143765.0, + "stddev_ns": 45576.74, + "ops_per_sec": 82.07, + "total_sum_of_medians_ns": 106252871.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "sign", + "median_ns": 93971360.0, + "mad_ns": 72009.5, + "iqr_ns": 155367.75, + "min_ns": 93822325.0, + "stddev_ns": 4748961.88, + "ops_per_sec": 10.64, + "total_sum_of_medians_ns": 106252871.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify", + "median_ns": 96335.0, + "mad_ns": 49.0, + "iqr_ns": 214.0, + "min_ns": 96154.0, + "stddev_ns": 2122.88, + "ops_per_sec": 10380.44, + "total_sum_of_medians_ns": 106252871.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_128S", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 1, + "operation": "verify_cached_key", + "median_ns": 97522.0, + "mad_ns": 39.0, + "iqr_ns": 84.0, + "min_ns": 97369.0, + "stddev_ns": 2357.08, + "ops_per_sec": 10254.1, + "total_sum_of_medians_ns": 106252871.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 287847.5, + "mad_ns": 414.0, + "iqr_ns": 898.25, + "min_ns": 287031.0, + "stddev_ns": 2028.59, + "ops_per_sec": 3474.06, + "total_sum_of_medians_ns": 9080685.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 8347167.0, + "mad_ns": 11107.0, + "iqr_ns": 22081.75, + "min_ns": 8321581.0, + "stddev_ns": 46546.97, + "ops_per_sec": 119.8, + "total_sum_of_medians_ns": 9080685.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 445671.0, + "mad_ns": 1285.0, + "iqr_ns": 11212.5, + "min_ns": 443798.0, + "stddev_ns": 11921.19, + "ops_per_sec": 2243.81, + "total_sum_of_medians_ns": 9080685.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_192F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 3, + "operation": "verify_cached_key", + "median_ns": 448934.0, + "mad_ns": 556.0, + "iqr_ns": 1139.0, + "min_ns": 447579.0, + "stddev_ns": 7535.8, + "ops_per_sec": 2227.5, + "total_sum_of_medians_ns": 9080685.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 819343.0, + "mad_ns": 803.0, + "iqr_ns": 2096.0, + "min_ns": 817401.0, + "stddev_ns": 6910.73, + "ops_per_sec": 1220.49, + "total_sum_of_medians_ns": 19539549.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 18238139.5, + "mad_ns": 22706.5, + "iqr_ns": 56138.25, + "min_ns": 18184643.0, + "stddev_ns": 54745.01, + "ops_per_sec": 54.83, + "total_sum_of_medians_ns": 19539549.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 482067.0, + "mad_ns": 1698.0, + "iqr_ns": 14810.0, + "min_ns": 480112.0, + "stddev_ns": 12738.63, + "ops_per_sec": 2074.4, + "total_sum_of_medians_ns": 19539549.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SLH_DSA_PURE_SHA2_256F", + "implementation": "rustcrypto", + "classical": false, + "nist_level": 5, + "operation": "verify_cached_key", + "median_ns": 480441.0, + "mad_ns": 861.0, + "iqr_ns": 8653.0, + "min_ns": 478821.0, + "stddev_ns": 10821.7, + "ops_per_sec": 2081.42, + "total_sum_of_medians_ns": 19539549.5, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "keygen", + "median_ns": 5670.0, + "mad_ns": 30.0, + "iqr_ns": 60.0, + "min_ns": 5362.0, + "stddev_ns": 741.64, + "ops_per_sec": 176366.84, + "total_sum_of_medians_ns": 31880.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "sign", + "median_ns": 4596.0, + "mad_ns": 22.0, + "iqr_ns": 54.0, + "min_ns": 4477.0, + "stddev_ns": 148.77, + "ops_per_sec": 217580.5, + "total_sum_of_medians_ns": 31880.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "classical": true, + "nist_level": 1, + "operation": "verify", + "median_ns": 21614.0, + "mad_ns": 93.0, + "iqr_ns": 186.0, + "min_ns": 20883.0, + "stddev_ns": 1070.5, + "ops_per_sec": 46266.31, + "total_sum_of_medians_ns": 31880.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "keygen", + "median_ns": 19776.0, + "mad_ns": 105.0, + "iqr_ns": 212.0, + "min_ns": 18047.0, + "stddev_ns": 373.4, + "ops_per_sec": 50566.34, + "total_sum_of_medians_ns": 84696.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "sign", + "median_ns": 47214.0, + "mad_ns": 19288.5, + "iqr_ns": 38532.75, + "min_ns": 26370.0, + "stddev_ns": 37126.86, + "ops_per_sec": 21180.16, + "total_sum_of_medians_ns": 84696.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 2, + "operation": "verify", + "median_ns": 17706.0, + "mad_ns": 88.0, + "iqr_ns": 190.0, + "min_ns": 17332.0, + "stddev_ns": 1061.9, + "ops_per_sec": 56478.03, + "total_sum_of_medians_ns": 84696.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1312, + "signature": 2420 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "keygen", + "median_ns": 43485.0, + "mad_ns": 265.0, + "iqr_ns": 533.0, + "min_ns": 41989.0, + "stddev_ns": 780.78, + "ops_per_sec": 22996.44, + "total_sum_of_medians_ns": 147254.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "sign", + "median_ns": 74622.0, + "mad_ns": 26597.0, + "iqr_ns": 60097.0, + "min_ns": 39818.0, + "stddev_ns": 55038.15, + "ops_per_sec": 13400.87, + "total_sum_of_medians_ns": 147254.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 3, + "operation": "verify", + "median_ns": 29147.0, + "mad_ns": 112.0, + "iqr_ns": 235.0, + "min_ns": 28616.0, + "stddev_ns": 747.93, + "ops_per_sec": 34308.85, + "total_sum_of_medians_ns": 147254.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 1952, + "signature": 3309 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "keygen", + "median_ns": 51241.0, + "mad_ns": 185.0, + "iqr_ns": 371.0, + "min_ns": 48780.0, + "stddev_ns": 1977.65, + "ops_per_sec": 19515.62, + "total_sum_of_medians_ns": 193884.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "sign", + "median_ns": 96258.0, + "mad_ns": 33090.5, + "iqr_ns": 66223.5, + "min_ns": 61342.0, + "stddev_ns": 60325.61, + "ops_per_sec": 10388.75, + "total_sum_of_medians_ns": 193884.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "classical": false, + "nist_level": 5, + "operation": "verify", + "median_ns": 46385.0, + "mad_ns": 108.0, + "iqr_ns": 219.0, + "min_ns": 45518.0, + "stddev_ns": 1570.91, + "ops_per_sec": 21558.69, + "total_sum_of_medians_ns": 193884.0, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + }, + "sizes": { + "public_key": 2592, + "signature": 4627 + } + } + ], + "tls": [ + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 767.0, + "median_ns": 1303818.0, + "primitive_sum_of_medians_ns": 790788.0, + "primitive_sum_complete": true, + "bytes_total": 1518, + "client_hello_bytes": 226, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 608.5, + "median_ns": 1643453.0, + "primitive_sum_of_medians_ns": 889898.0, + "primitive_sum_complete": true, + "bytes_total": 3782, + "client_hello_bytes": 1402, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 597.4, + "median_ns": 1673879.5, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 3848, + "client_hello_bytes": 1435, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 950.3, + "median_ns": 1052267.0, + "primitive_sum_of_medians_ns": 409459.0, + "primitive_sum_complete": true, + "bytes_total": 3014, + "client_hello_bytes": 986, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 858.1, + "median_ns": 1165324.0, + "primitive_sum_of_medians_ns": 445978.0, + "primitive_sum_complete": true, + "bytes_total": 3718, + "client_hello_bytes": 1370, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 781.6, + "median_ns": 1279363.5, + "primitive_sum_of_medians_ns": 494330.0, + "primitive_sum_complete": true, + "bytes_total": 4582, + "client_hello_bytes": 1754, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 378.5, + "median_ns": 2642264.5, + "primitive_sum_of_medians_ns": 1179189.5, + "primitive_sum_complete": true, + "bytes_total": 9800, + "client_hello_bytes": 1402, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 281.9, + "median_ns": 3546908.5, + "primitive_sum_of_medians_ns": 1595998.0, + "primitive_sum_complete": true, + "bytes_total": 12218, + "client_hello_bytes": 1402, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 238.5, + "median_ns": 4192695.5, + "primitive_sum_of_medians_ns": 1988086.0, + "primitive_sum_complete": true, + "bytes_total": 15494, + "client_hello_bytes": 1402, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 483.8, + "median_ns": 2067087.5, + "primitive_sum_of_medians_ns": 698750.5, + "primitive_sum_complete": true, + "bytes_total": 9032, + "client_hello_bytes": 986, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 335.1, + "median_ns": 2984361.0, + "primitive_sum_of_medians_ns": 1115559.0, + "primitive_sum_complete": true, + "bytes_total": 11450, + "client_hello_bytes": 986, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 272.4, + "median_ns": 3670436.0, + "primitive_sum_of_medians_ns": 1507647.0, + "primitive_sum_complete": true, + "bytes_total": 14726, + "client_hello_bytes": 986, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 459.6, + "median_ns": 2175931.0, + "primitive_sum_of_medians_ns": 735269.5, + "primitive_sum_complete": true, + "bytes_total": 9736, + "client_hello_bytes": 1370, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 325.7, + "median_ns": 3070000.0, + "primitive_sum_of_medians_ns": 1152078.0, + "primitive_sum_complete": true, + "bytes_total": 12154, + "client_hello_bytes": 1370, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 269.4, + "median_ns": 3711638.5, + "primitive_sum_of_medians_ns": 1544166.0, + "primitive_sum_complete": true, + "bytes_total": 15430, + "client_hello_bytes": 1370, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 427.0, + "median_ns": 2341932.5, + "primitive_sum_of_medians_ns": 783621.5, + "primitive_sum_complete": true, + "bytes_total": 10600, + "client_hello_bytes": 1754, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 312.2, + "median_ns": 3202908.0, + "primitive_sum_of_medians_ns": 1200430.0, + "primitive_sum_complete": true, + "bytes_total": 13018, + "client_hello_bytes": 1754, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 257.4, + "median_ns": 3885158.5, + "primitive_sum_of_medians_ns": 1592518.0, + "primitive_sum_complete": true, + "bytes_total": 16294, + "client_hello_bytes": 1754, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 373.8, + "median_ns": 2675195.0, + "primitive_sum_of_medians_ns": 1179189.5, + "primitive_sum_complete": true, + "bytes_total": 9874, + "client_hello_bytes": 1478, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 279.6, + "median_ns": 3576152.5, + "primitive_sum_of_medians_ns": 1595998.0, + "primitive_sum_complete": true, + "bytes_total": 12292, + "client_hello_bytes": 1478, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 236.7, + "median_ns": 4225179.5, + "primitive_sum_of_medians_ns": 1988086.0, + "primitive_sum_complete": true, + "bytes_total": 15568, + "client_hello_bytes": 1478, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 305.2, + "median_ns": 3276453.0, + "primitive_sum_of_medians_ns": 934600.0, + "primitive_sum_complete": true, + "bytes_total": 5917, + "client_hello_bytes": 1478, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 22.9, + "median_ns": 43611561.5, + "primitive_sum_of_medians_ns": 40716418.5, + "primitive_sum_complete": true, + "bytes_total": 37975, + "client_hello_bytes": 1478, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 368.4, + "median_ns": 2714606.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 9940, + "client_hello_bytes": 1511, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 276.2, + "median_ns": 3620357.5, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 12358, + "client_hello_bytes": 1511, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 232.6, + "median_ns": 4298512.5, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 15634, + "client_hello_bytes": 1511, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 309.2, + "median_ns": 3234500.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 5987, + "client_hello_bytes": 1511, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 22.8, + "median_ns": 43885456.5, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 38041, + "client_hello_bytes": 1511, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 473.7, + "median_ns": 2110835.0, + "primitive_sum_of_medians_ns": 698750.5, + "primitive_sum_complete": true, + "bytes_total": 9106, + "client_hello_bytes": 1062, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 332.0, + "median_ns": 3011686.0, + "primitive_sum_of_medians_ns": 1115559.0, + "primitive_sum_complete": true, + "bytes_total": 11524, + "client_hello_bytes": 1062, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 274.3, + "median_ns": 3645719.5, + "primitive_sum_of_medians_ns": 1507647.0, + "primitive_sum_complete": true, + "bytes_total": 14800, + "client_hello_bytes": 1062, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 384.6, + "median_ns": 2600357.0, + "primitive_sum_of_medians_ns": 454161.0, + "primitive_sum_complete": true, + "bytes_total": 5148, + "client_hello_bytes": 1062, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 23.4, + "median_ns": 42759218.5, + "primitive_sum_of_medians_ns": 40235979.5, + "primitive_sum_complete": true, + "bytes_total": 37207, + "client_hello_bytes": 1062, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 456.2, + "median_ns": 2191795.0, + "primitive_sum_of_medians_ns": 735269.5, + "primitive_sum_complete": true, + "bytes_total": 9810, + "client_hello_bytes": 1446, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 322.1, + "median_ns": 3104199.5, + "primitive_sum_of_medians_ns": 1152078.0, + "primitive_sum_complete": true, + "bytes_total": 12228, + "client_hello_bytes": 1446, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 263.3, + "median_ns": 3797871.5, + "primitive_sum_of_medians_ns": 1544166.0, + "primitive_sum_complete": true, + "bytes_total": 15504, + "client_hello_bytes": 1446, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 372.3, + "median_ns": 2686224.0, + "primitive_sum_of_medians_ns": 490680.0, + "primitive_sum_complete": true, + "bytes_total": 5855, + "client_hello_bytes": 1446, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 22.7, + "median_ns": 44022291.0, + "primitive_sum_of_medians_ns": 40272498.5, + "primitive_sum_complete": true, + "bytes_total": 37911, + "client_hello_bytes": 1446, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 425.2, + "median_ns": 2351875.5, + "primitive_sum_of_medians_ns": 783621.5, + "primitive_sum_complete": true, + "bytes_total": 10674, + "client_hello_bytes": 1830, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 310.8, + "median_ns": 3217778.5, + "primitive_sum_of_medians_ns": 1200430.0, + "primitive_sum_complete": true, + "bytes_total": 13092, + "client_hello_bytes": 1830, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 258.2, + "median_ns": 3872680.5, + "primitive_sum_of_medians_ns": 1592518.0, + "primitive_sum_complete": true, + "bytes_total": 16368, + "client_hello_bytes": 1830, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 354.5, + "median_ns": 2820479.0, + "primitive_sum_of_medians_ns": 539032.0, + "primitive_sum_complete": true, + "bytes_total": 6718, + "client_hello_bytes": 1830, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 23.0, + "median_ns": 43513600.5, + "primitive_sum_of_medians_ns": 40320850.5, + "primitive_sum_complete": true, + "bytes_total": 38775, + "client_hello_bytes": 1830, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 1861.1, + "median_ns": 537318.0, + "primitive_sum_of_medians_ns": 386527.0, + "primitive_sum_complete": true, + "bytes_total": 1136, + "client_hello_bytes": 232, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1521.4, + "median_ns": 657290.0, + "primitive_sum_of_medians_ns": 483732.0, + "primitive_sum_complete": true, + "bytes_total": 3408, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1250.5, + "median_ns": 799652.0, + "primitive_sum_of_medians_ns": 614140.0, + "primitive_sum_complete": true, + "bytes_total": 3474, + "client_hello_bytes": 1449, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1928.5, + "median_ns": 518530.0, + "primitive_sum_of_medians_ns": 347802.0, + "primitive_sum_complete": true, + "bytes_total": 3344, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1750.7, + "median_ns": 571216.0, + "primitive_sum_of_medians_ns": 396044.0, + "primitive_sum_complete": true, + "bytes_total": 4208, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1330.1, + "median_ns": 751800.0, + "primitive_sum_of_medians_ns": 526456.0, + "primitive_sum_complete": true, + "bytes_total": 9426, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1060.6, + "median_ns": 942846.5, + "primitive_sum_of_medians_ns": 715534.0, + "primitive_sum_complete": true, + "bytes_total": 11844, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 803.3, + "median_ns": 1244940.5, + "primitive_sum_of_medians_ns": 969758.0, + "primitive_sum_complete": true, + "bytes_total": 15120, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1637.5, + "median_ns": 610678.0, + "primitive_sum_of_medians_ns": 390526.0, + "primitive_sum_complete": true, + "bytes_total": 9362, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1231.6, + "median_ns": 811920.0, + "primitive_sum_of_medians_ns": 579604.0, + "primitive_sum_complete": true, + "bytes_total": 11780, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 908.3, + "median_ns": 1100931.0, + "primitive_sum_of_medians_ns": 833828.0, + "primitive_sum_complete": true, + "bytes_total": 15056, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1508.7, + "median_ns": 662827.0, + "primitive_sum_of_medians_ns": 438768.0, + "primitive_sum_complete": true, + "bytes_total": 10226, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1147.7, + "median_ns": 871281.5, + "primitive_sum_of_medians_ns": 627846.0, + "primitive_sum_complete": true, + "bytes_total": 12644, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 867.1, + "median_ns": 1153218.0, + "primitive_sum_of_medians_ns": 882070.0, + "primitive_sum_complete": true, + "bytes_total": 15920, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 1428.6, + "median_ns": 700000.0, + "primitive_sum_of_medians_ns": 471000.0, + "primitive_sum_complete": true, + "bytes_total": 1509, + "client_hello_bytes": 217, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1160.1, + "median_ns": 862000.0, + "primitive_sum_of_medians_ns": 524000.0, + "primitive_sum_complete": true, + "bytes_total": 3773, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1173.7, + "median_ns": 852000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 3839, + "client_hello_bytes": 1426, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1602.6, + "median_ns": 624000.0, + "primitive_sum_of_medians_ns": 331000.0, + "primitive_sum_complete": true, + "bytes_total": 3005, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1483.7, + "median_ns": 674000.0, + "primitive_sum_of_medians_ns": 350000.0, + "primitive_sum_complete": true, + "bytes_total": 3709, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 1362.4, + "median_ns": 734000.0, + "primitive_sum_of_medians_ns": 377000.0, + "primitive_sum_complete": true, + "bytes_total": 4573, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 865.8, + "median_ns": 1155000.0, + "primitive_sum_of_medians_ns": 578000.0, + "primitive_sum_complete": true, + "bytes_total": 9791, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 650.2, + "median_ns": 1538000.0, + "primitive_sum_of_medians_ns": 818500.0, + "primitive_sum_complete": true, + "bytes_total": 12209, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 545.9, + "median_ns": 1832000.0, + "primitive_sum_of_medians_ns": 1062000.0, + "primitive_sum_complete": true, + "bytes_total": 15485, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1076.4, + "median_ns": 929000.0, + "primitive_sum_of_medians_ns": 385000.0, + "primitive_sum_complete": true, + "bytes_total": 9023, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 769.2, + "median_ns": 1300000.0, + "primitive_sum_of_medians_ns": 625500.0, + "primitive_sum_complete": true, + "bytes_total": 11441, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 625.8, + "median_ns": 1598000.0, + "primitive_sum_of_medians_ns": 869000.0, + "primitive_sum_complete": true, + "bytes_total": 14717, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1037.9, + "median_ns": 963500.0, + "primitive_sum_of_medians_ns": 404000.0, + "primitive_sum_complete": true, + "bytes_total": 9727, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 742.4, + "median_ns": 1347000.0, + "primitive_sum_of_medians_ns": 644500.0, + "primitive_sum_complete": true, + "bytes_total": 12145, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 607.9, + "median_ns": 1645000.0, + "primitive_sum_of_medians_ns": 888000.0, + "primitive_sum_complete": true, + "bytes_total": 15421, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 974.7, + "median_ns": 1026000.0, + "primitive_sum_of_medians_ns": 431000.0, + "primitive_sum_complete": true, + "bytes_total": 10591, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 705.7, + "median_ns": 1417000.0, + "primitive_sum_of_medians_ns": 671500.0, + "primitive_sum_complete": true, + "bytes_total": 13009, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 586.5, + "median_ns": 1705000.0, + "primitive_sum_of_medians_ns": 915000.0, + "primitive_sum_complete": true, + "bytes_total": 16285, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 852.9, + "median_ns": 1172500.0, + "primitive_sum_of_medians_ns": 578000.0, + "primitive_sum_complete": true, + "bytes_total": 9865, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 646.0, + "median_ns": 1548000.0, + "primitive_sum_of_medians_ns": 818500.0, + "primitive_sum_complete": true, + "bytes_total": 12283, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 542.0, + "median_ns": 1845000.0, + "primitive_sum_of_medians_ns": 1062000.0, + "primitive_sum_complete": true, + "bytes_total": 15559, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 595.6, + "median_ns": 1679000.0, + "primitive_sum_of_medians_ns": 495000.0, + "primitive_sum_complete": true, + "bytes_total": 5914, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 39.8, + "median_ns": 25109500.0, + "primitive_sum_of_medians_ns": 22992500.0, + "primitive_sum_complete": true, + "bytes_total": 37966, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 859.1, + "median_ns": 1164000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 9931, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 648.9, + "median_ns": 1541000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 12349, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 544.4, + "median_ns": 1837000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 15625, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 599.9, + "median_ns": 1667000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 5978, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 40.1, + "median_ns": 24923000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 38032, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1082.3, + "median_ns": 924000.0, + "primitive_sum_of_medians_ns": 385000.0, + "primitive_sum_complete": true, + "bytes_total": 9097, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 761.0, + "median_ns": 1314000.0, + "primitive_sum_of_medians_ns": 625500.0, + "primitive_sum_complete": true, + "bytes_total": 11515, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 621.9, + "median_ns": 1608000.0, + "primitive_sum_of_medians_ns": 869000.0, + "primitive_sum_complete": true, + "bytes_total": 14791, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 696.4, + "median_ns": 1436000.0, + "primitive_sum_of_medians_ns": 302000.0, + "primitive_sum_complete": true, + "bytes_total": 5149, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 40.6, + "median_ns": 24634000.0, + "primitive_sum_of_medians_ns": 22799500.0, + "primitive_sum_complete": true, + "bytes_total": 37198, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1024.6, + "median_ns": 976000.0, + "primitive_sum_of_medians_ns": 404000.0, + "primitive_sum_complete": true, + "bytes_total": 9801, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 735.8, + "median_ns": 1359000.0, + "primitive_sum_of_medians_ns": 644500.0, + "primitive_sum_complete": true, + "bytes_total": 12219, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 604.6, + "median_ns": 1654000.0, + "primitive_sum_of_medians_ns": 888000.0, + "primitive_sum_complete": true, + "bytes_total": 15495, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 673.9, + "median_ns": 1484000.0, + "primitive_sum_of_medians_ns": 321000.0, + "primitive_sum_complete": true, + "bytes_total": 5850, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 40.5, + "median_ns": 24717000.0, + "primitive_sum_of_medians_ns": 22818500.0, + "primitive_sum_complete": true, + "bytes_total": 37902, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 957.9, + "median_ns": 1044000.0, + "primitive_sum_of_medians_ns": 431000.0, + "primitive_sum_complete": true, + "bytes_total": 10665, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 702.7, + "median_ns": 1423000.0, + "primitive_sum_of_medians_ns": 671500.0, + "primitive_sum_complete": true, + "bytes_total": 13083, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 580.7, + "median_ns": 1722000.0, + "primitive_sum_of_medians_ns": 915000.0, + "primitive_sum_complete": true, + "bytes_total": 16359, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 647.7, + "median_ns": 1544000.0, + "primitive_sum_of_medians_ns": 348000.0, + "primitive_sum_complete": true, + "bytes_total": 6715, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 40.3, + "median_ns": 24799000.0, + "primitive_sum_of_medians_ns": 22845500.0, + "primitive_sum_complete": true, + "bytes_total": 38766, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 3891.1, + "median_ns": 257000.0, + "primitive_sum_of_medians_ns": 163000.0, + "primitive_sum_complete": true, + "bytes_total": 1136, + "client_hello_bytes": 232, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3184.7, + "median_ns": 314000.0, + "primitive_sum_of_medians_ns": 209000.0, + "primitive_sum_complete": true, + "bytes_total": 3408, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 2793.3, + "median_ns": 358000.0, + "primitive_sum_of_medians_ns": 249000.0, + "primitive_sum_complete": true, + "bytes_total": 3474, + "client_hello_bytes": 1449, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 4219.4, + "median_ns": 237000.0, + "primitive_sum_of_medians_ns": 133000.0, + "primitive_sum_complete": true, + "bytes_total": 3344, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3876.0, + "median_ns": 258000.0, + "primitive_sum_of_medians_ns": 152000.0, + "primitive_sum_complete": true, + "bytes_total": 4208, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2710.0, + "median_ns": 369000.0, + "primitive_sum_of_medians_ns": 238000.0, + "primitive_sum_complete": true, + "bytes_total": 9426, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2247.2, + "median_ns": 445000.0, + "primitive_sum_of_medians_ns": 312000.0, + "primitive_sum_complete": true, + "bytes_total": 11844, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1811.6, + "median_ns": 552000.0, + "primitive_sum_of_medians_ns": 403000.0, + "primitive_sum_complete": true, + "bytes_total": 15120, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3496.5, + "median_ns": 286000.0, + "primitive_sum_of_medians_ns": 162000.0, + "primitive_sum_complete": true, + "bytes_total": 9362, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2695.4, + "median_ns": 371000.0, + "primitive_sum_of_medians_ns": 236000.0, + "primitive_sum_complete": true, + "bytes_total": 11780, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2105.3, + "median_ns": 475000.0, + "primitive_sum_of_medians_ns": 327000.0, + "primitive_sum_complete": true, + "bytes_total": 15056, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3225.8, + "median_ns": 310000.0, + "primitive_sum_of_medians_ns": 181000.0, + "primitive_sum_complete": true, + "bytes_total": 10226, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2607.6, + "median_ns": 383500.0, + "primitive_sum_of_medians_ns": 255000.0, + "primitive_sum_complete": true, + "bytes_total": 12644, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2032.5, + "median_ns": 492000.0, + "primitive_sum_of_medians_ns": 346000.0, + "primitive_sum_complete": true, + "bytes_total": 15920, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 3521.1, + "median_ns": 284000.0, + "primitive_sum_of_medians_ns": 166000.0, + "primitive_sum_complete": true, + "bytes_total": 1509, + "client_hello_bytes": 217, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 2732.2, + "median_ns": 366000.0, + "primitive_sum_of_medians_ns": 193000.0, + "primitive_sum_complete": true, + "bytes_total": 3773, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 2666.7, + "median_ns": 375000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 3839, + "client_hello_bytes": 1426, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3831.4, + "median_ns": 261000.0, + "primitive_sum_of_medians_ns": 112000.0, + "primitive_sum_complete": true, + "bytes_total": 3005, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3496.5, + "median_ns": 286000.0, + "primitive_sum_of_medians_ns": 123000.0, + "primitive_sum_complete": true, + "bytes_total": 3709, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3154.6, + "median_ns": 317000.0, + "primitive_sum_of_medians_ns": 136000.0, + "primitive_sum_complete": true, + "bytes_total": 4573, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1766.8, + "median_ns": 566000.0, + "primitive_sum_of_medians_ns": 282000.0, + "primitive_sum_complete": true, + "bytes_total": 9791, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1311.5, + "median_ns": 762500.0, + "primitive_sum_of_medians_ns": 418000.0, + "primitive_sum_complete": true, + "bytes_total": 12209, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1096.5, + "median_ns": 912000.0, + "primitive_sum_of_medians_ns": 535000.0, + "primitive_sum_complete": true, + "bytes_total": 15485, + "client_hello_bytes": 1393, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2164.5, + "median_ns": 462000.0, + "primitive_sum_of_medians_ns": 201000.0, + "primitive_sum_complete": true, + "bytes_total": 9023, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1520.9, + "median_ns": 657500.0, + "primitive_sum_of_medians_ns": 337000.0, + "primitive_sum_complete": true, + "bytes_total": 11441, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1233.0, + "median_ns": 811000.0, + "primitive_sum_of_medians_ns": 454000.0, + "primitive_sum_complete": true, + "bytes_total": 14717, + "client_hello_bytes": 977, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2014.1, + "median_ns": 496500.0, + "primitive_sum_of_medians_ns": 212000.0, + "primitive_sum_complete": true, + "bytes_total": 9727, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1462.0, + "median_ns": 684000.0, + "primitive_sum_of_medians_ns": 348000.0, + "primitive_sum_complete": true, + "bytes_total": 12145, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1197.6, + "median_ns": 835000.0, + "primitive_sum_of_medians_ns": 465000.0, + "primitive_sum_complete": true, + "bytes_total": 15421, + "client_hello_bytes": 1361, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1926.8, + "median_ns": 519000.0, + "primitive_sum_of_medians_ns": 225000.0, + "primitive_sum_complete": true, + "bytes_total": 10591, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1398.6, + "median_ns": 715000.0, + "primitive_sum_of_medians_ns": 361000.0, + "primitive_sum_complete": true, + "bytes_total": 13009, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1152.1, + "median_ns": 868000.0, + "primitive_sum_of_medians_ns": 478000.0, + "primitive_sum_complete": true, + "bytes_total": 16285, + "client_hello_bytes": 1745, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1751.3, + "median_ns": 571000.0, + "primitive_sum_of_medians_ns": 282000.0, + "primitive_sum_complete": true, + "bytes_total": 9865, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1300.4, + "median_ns": 769000.0, + "primitive_sum_of_medians_ns": 418000.0, + "primitive_sum_complete": true, + "bytes_total": 12283, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1087.0, + "median_ns": 920000.0, + "primitive_sum_of_medians_ns": 535000.0, + "primitive_sum_complete": true, + "bytes_total": 15559, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1228.5, + "median_ns": 814000.0, + "primitive_sum_of_medians_ns": 233000.0, + "primitive_sum_complete": true, + "bytes_total": 5912, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 87.5, + "median_ns": 11430000.0, + "primitive_sum_of_medians_ns": 10812000.0, + "primitive_sum_complete": true, + "bytes_total": 37966, + "client_hello_bytes": 1469, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1624.7, + "median_ns": 615500.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 9931, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1278.8, + "median_ns": 782000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 12349, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1071.8, + "median_ns": 933000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 15625, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1207.7, + "median_ns": 828000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 5976, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 87.7, + "median_ns": 11406000.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 38032, + "client_hello_bytes": 1502, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2127.7, + "median_ns": 470000.0, + "primitive_sum_of_medians_ns": 201000.0, + "primitive_sum_complete": true, + "bytes_total": 9097, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1501.5, + "median_ns": 666000.0, + "primitive_sum_of_medians_ns": 337000.0, + "primitive_sum_complete": true, + "bytes_total": 11515, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1230.0, + "median_ns": 813000.0, + "primitive_sum_of_medians_ns": 454000.0, + "primitive_sum_complete": true, + "bytes_total": 14791, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1406.5, + "median_ns": 711000.0, + "primitive_sum_of_medians_ns": 152000.0, + "primitive_sum_complete": true, + "bytes_total": 5144, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 88.4, + "median_ns": 11317500.0, + "primitive_sum_of_medians_ns": 10731000.0, + "primitive_sum_complete": true, + "bytes_total": 37198, + "client_hello_bytes": 1053, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2024.3, + "median_ns": 494000.0, + "primitive_sum_of_medians_ns": 212000.0, + "primitive_sum_complete": true, + "bytes_total": 9801, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1450.3, + "median_ns": 689500.0, + "primitive_sum_of_medians_ns": 348000.0, + "primitive_sum_complete": true, + "bytes_total": 12219, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1186.2, + "median_ns": 843000.0, + "primitive_sum_of_medians_ns": 465000.0, + "primitive_sum_complete": true, + "bytes_total": 15495, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1356.9, + "median_ns": 737000.0, + "primitive_sum_of_medians_ns": 163000.0, + "primitive_sum_complete": true, + "bytes_total": 5847, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 88.6, + "median_ns": 11287500.0, + "primitive_sum_of_medians_ns": 10742000.0, + "primitive_sum_complete": true, + "bytes_total": 37902, + "client_hello_bytes": 1437, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1908.4, + "median_ns": 524000.0, + "primitive_sum_of_medians_ns": 225000.0, + "primitive_sum_complete": true, + "bytes_total": 10665, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1392.8, + "median_ns": 718000.0, + "primitive_sum_of_medians_ns": 361000.0, + "primitive_sum_complete": true, + "bytes_total": 13083, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1141.6, + "median_ns": 876000.0, + "primitive_sum_of_medians_ns": 478000.0, + "primitive_sum_complete": true, + "bytes_total": 16359, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1298.7, + "median_ns": 770000.0, + "primitive_sum_of_medians_ns": 176000.0, + "primitive_sum_complete": true, + "bytes_total": 6709, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 87.9, + "median_ns": 11380000.0, + "primitive_sum_of_medians_ns": 10755000.0, + "primitive_sum_complete": true, + "bytes_total": 38766, + "client_hello_bytes": 1821, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 7462.7, + "median_ns": 134000.0, + "primitive_sum_of_medians_ns": 76000.0, + "primitive_sum_complete": true, + "bytes_total": 1136, + "client_hello_bytes": 232, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 6060.6, + "median_ns": 165000.0, + "primitive_sum_of_medians_ns": 99000.0, + "primitive_sum_complete": true, + "bytes_total": 3408, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 5464.5, + "median_ns": 183000.0, + "primitive_sum_of_medians_ns": 119000.0, + "primitive_sum_complete": true, + "bytes_total": 3474, + "client_hello_bytes": 1449, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 8130.1, + "median_ns": 123000.0, + "primitive_sum_of_medians_ns": 63000.0, + "primitive_sum_complete": true, + "bytes_total": 3344, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 7518.8, + "median_ns": 133000.0, + "primitive_sum_of_medians_ns": 72000.0, + "primitive_sum_complete": true, + "bytes_total": 4208, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 5263.2, + "median_ns": 190000.0, + "primitive_sum_of_medians_ns": 116000.0, + "primitive_sum_complete": true, + "bytes_total": 9426, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 4415.0, + "median_ns": 226500.0, + "primitive_sum_of_medians_ns": 151000.0, + "primitive_sum_complete": true, + "bytes_total": 11844, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3703.7, + "median_ns": 270000.0, + "primitive_sum_of_medians_ns": 194000.0, + "primitive_sum_complete": true, + "bytes_total": 15120, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 6666.7, + "median_ns": 150000.0, + "primitive_sum_of_medians_ns": 80000.0, + "primitive_sum_complete": true, + "bytes_total": 9362, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 5291.0, + "median_ns": 189000.0, + "primitive_sum_of_medians_ns": 115000.0, + "primitive_sum_complete": true, + "bytes_total": 11780, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 4273.5, + "median_ns": 234000.0, + "primitive_sum_of_medians_ns": 158000.0, + "primitive_sum_complete": true, + "bytes_total": 15056, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 6250.0, + "median_ns": 160000.0, + "primitive_sum_of_medians_ns": 89000.0, + "primitive_sum_complete": true, + "bytes_total": 10226, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 5025.1, + "median_ns": 199000.0, + "primitive_sum_of_medians_ns": 124000.0, + "primitive_sum_complete": true, + "bytes_total": 12644, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 4115.2, + "median_ns": 243000.0, + "primitive_sum_of_medians_ns": 167000.0, + "primitive_sum_complete": true, + "bytes_total": 15920, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 3454.6, + "median_ns": 289465.5, + "primitive_sum_of_medians_ns": 180933.0, + "primitive_sum_complete": true, + "bytes_total": 1512, + "client_hello_bytes": 220, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 2662.7, + "median_ns": 375553.0, + "primitive_sum_of_medians_ns": 201545.0, + "primitive_sum_complete": true, + "bytes_total": 3776, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 2501.1, + "median_ns": 399826.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 3842, + "client_hello_bytes": 1429, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3703.8, + "median_ns": 269995.0, + "primitive_sum_of_medians_ns": 120825.0, + "primitive_sum_complete": true, + "bytes_total": 3008, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3352.0, + "median_ns": 298331.0, + "primitive_sum_of_medians_ns": 128019.0, + "primitive_sum_complete": true, + "bytes_total": 3712, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 3020.6, + "median_ns": 331064.5, + "primitive_sum_of_medians_ns": 135630.0, + "primitive_sum_complete": true, + "bytes_total": 4576, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1601.1, + "median_ns": 624584.0, + "primitive_sum_of_medians_ns": 144188.0, + "primitive_sum_complete": true, + "bytes_total": 9794, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1174.3, + "median_ns": 851546.5, + "primitive_sum_of_medians_ns": 178312.0, + "primitive_sum_complete": true, + "bytes_total": 12212, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 957.2, + "median_ns": 1044739.0, + "primitive_sum_of_medians_ns": 211419.0, + "primitive_sum_complete": true, + "bytes_total": 15488, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1944.2, + "median_ns": 514359.5, + "primitive_sum_of_medians_ns": 63468.0, + "primitive_sum_complete": true, + "bytes_total": 9026, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1345.2, + "median_ns": 743404.5, + "primitive_sum_of_medians_ns": 97592.0, + "primitive_sum_complete": true, + "bytes_total": 11444, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1079.7, + "median_ns": 926182.5, + "primitive_sum_of_medians_ns": 130699.0, + "primitive_sum_complete": true, + "bytes_total": 14720, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1845.1, + "median_ns": 541990.0, + "primitive_sum_of_medians_ns": 70662.0, + "primitive_sum_complete": true, + "bytes_total": 9730, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1299.1, + "median_ns": 769735.0, + "primitive_sum_of_medians_ns": 104786.0, + "primitive_sum_complete": true, + "bytes_total": 12148, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1041.5, + "median_ns": 960136.0, + "primitive_sum_of_medians_ns": 137893.0, + "primitive_sum_complete": true, + "bytes_total": 15424, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1735.8, + "median_ns": 576089.0, + "primitive_sum_of_medians_ns": 78273.0, + "primitive_sum_complete": true, + "bytes_total": 10594, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1242.9, + "median_ns": 804540.5, + "primitive_sum_of_medians_ns": 112397.0, + "primitive_sum_complete": true, + "bytes_total": 13012, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "openssl-native", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1014.6, + "median_ns": 985632.0, + "primitive_sum_of_medians_ns": 145504.0, + "primitive_sum_complete": true, + "bytes_total": 16288, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1601.3, + "median_ns": 624503.0, + "primitive_sum_of_medians_ns": 144188.0, + "primitive_sum_complete": true, + "bytes_total": 9792, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1177.5, + "median_ns": 849224.0, + "primitive_sum_of_medians_ns": 178312.0, + "primitive_sum_complete": true, + "bytes_total": 12210, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 975.1, + "median_ns": 1025567.0, + "primitive_sum_of_medians_ns": 211419.0, + "primitive_sum_complete": true, + "bytes_total": 15486, + "client_hello_bytes": 1396, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1549.7, + "median_ns": 645275.5, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 9858, + "client_hello_bytes": 1429, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1143.9, + "median_ns": 874207.0, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 12276, + "client_hello_bytes": 1429, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 954.7, + "median_ns": 1047480.5, + "primitive_sum_of_medians_ns": null, + "primitive_sum_complete": false, + "bytes_total": 15552, + "client_hello_bytes": 1429, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1933.4, + "median_ns": 517235.5, + "primitive_sum_of_medians_ns": 63468.0, + "primitive_sum_complete": true, + "bytes_total": 9024, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1345.3, + "median_ns": 743330.0, + "primitive_sum_of_medians_ns": 97592.0, + "primitive_sum_complete": true, + "bytes_total": 11442, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1088.4, + "median_ns": 918808.5, + "primitive_sum_of_medians_ns": 130699.0, + "primitive_sum_complete": true, + "bytes_total": 14718, + "client_hello_bytes": 980, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1845.0, + "median_ns": 541993.0, + "primitive_sum_of_medians_ns": 70662.0, + "primitive_sum_complete": true, + "bytes_total": 9728, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1304.4, + "median_ns": 766648.0, + "primitive_sum_of_medians_ns": 104786.0, + "primitive_sum_complete": true, + "bytes_total": 12146, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1051.4, + "median_ns": 951068.5, + "primitive_sum_of_medians_ns": 137893.0, + "primitive_sum_complete": true, + "bytes_total": 15422, + "client_hello_bytes": 1364, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1732.1, + "median_ns": 577349.0, + "primitive_sum_of_medians_ns": 78273.0, + "primitive_sum_complete": true, + "bytes_total": 10592, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1245.7, + "median_ns": 802773.0, + "primitive_sum_of_medians_ns": 112397.0, + "primitive_sum_complete": true, + "bytes_total": 13010, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "implementation": "oqs-provider", + "unstable_features": false, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 1020.7, + "median_ns": 979687.5, + "primitive_sum_of_medians_ns": 145504.0, + "primitive_sum_complete": true, + "bytes_total": 16286, + "client_hello_bytes": 1748, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "baseline", + "is_baseline_pair": true, + "handshakes_per_sec": 6788.5, + "median_ns": 147307.0, + "primitive_sum_of_medians_ns": 87226.0, + "primitive_sum_complete": true, + "bytes_total": 1136, + "client_hello_bytes": 232, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 5556.3, + "median_ns": 179976.5, + "primitive_sum_of_medians_ns": 113008.0, + "primitive_sum_complete": true, + "bytes_total": 3408, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 4837.2, + "median_ns": 206731.5, + "primitive_sum_of_medians_ns": 138020.0, + "primitive_sum_complete": true, + "bytes_total": 3474, + "client_hello_bytes": 1449, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 7148.9, + "median_ns": 139881.0, + "primitive_sum_of_medians_ns": 73606.0, + "primitive_sum_complete": true, + "bytes_total": 3344, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "implementation": "rustls-awslc", + "unstable_features": false, + "phase": "phase0", + "is_baseline_pair": false, + "handshakes_per_sec": 6609.1, + "median_ns": 151307.5, + "primitive_sum_of_medians_ns": 83151.0, + "primitive_sum_complete": true, + "bytes_total": 4208, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 4310.3, + "median_ns": 232000.5, + "primitive_sum_of_medians_ns": 147810.0, + "primitive_sum_complete": true, + "bytes_total": 9426, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3519.1, + "median_ns": 284160.0, + "primitive_sum_of_medians_ns": 198100.0, + "primitive_sum_complete": true, + "bytes_total": 11844, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 2874.3, + "median_ns": 347908.5, + "primitive_sum_of_medians_ns": 254212.0, + "primitive_sum_complete": true, + "bytes_total": 15120, + "client_hello_bytes": 1416, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 5279.8, + "median_ns": 189400.5, + "primitive_sum_of_medians_ns": 108408.0, + "primitive_sum_complete": true, + "bytes_total": 9362, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 4091.2, + "median_ns": 244427.5, + "primitive_sum_of_medians_ns": 158698.0, + "primitive_sum_complete": true, + "bytes_total": 11780, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3220.5, + "median_ns": 310510.5, + "primitive_sum_of_medians_ns": 214810.0, + "primitive_sum_complete": true, + "bytes_total": 15056, + "client_hello_bytes": 1384, + "client_hello_fragmented": false + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 4993.0, + "median_ns": 200280.5, + "primitive_sum_of_medians_ns": 117953.0, + "primitive_sum_complete": true, + "bytes_total": 10226, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3873.2, + "median_ns": 258187.5, + "primitive_sum_of_medians_ns": 168243.0, + "primitive_sum_complete": true, + "bytes_total": 12644, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "implementation": "rustls-awslc", + "unstable_features": true, + "phase": "phase2", + "is_baseline_pair": false, + "handshakes_per_sec": 3112.7, + "median_ns": 321260.5, + "primitive_sum_of_medians_ns": 224355.0, + "primitive_sum_complete": true, + "bytes_total": 15920, + "client_hello_bytes": 1768, + "client_hello_fragmented": true + } + ], + "kem_absent": [ + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "X25519MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "alg": "SecP256r1MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "X25519MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "alg": "SecP256r1MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "X25519MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "alg": "SecP256r1MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "X25519MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "alg": "SecP256r1MLKEM768", + "implementation": "liboqs", + "reason": "not enabled in this liboqs build" + } + ], + "sig_absent": [], + "tls_absent": [ + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "hostname": "rasberrypi5", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "is_rpi": true, + "is_baseline_grade": true, + "source_file": "rasberrypi5-20260720T143239Z.json", + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", + "hostname": "mehmetmac", + "cpu_brand": "Apple M3", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "mehmetmac-20260719T224937Z.json", + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "Mac/Apple M4 Pro@2026-07-30T14:10:03Z", + "hostname": "Mac", + "cpu_brand": "Apple M4 Pro", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "Mac-20260730T134951Z.json", + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "unstable_features": false, + "reason": "handshake failed" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "run_id": "fedora/Intel(R) Core(TM) Ultra 9 285HX@2026-07-30T12:13:11Z", + "hostname": "fedora", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "is_rpi": false, + "is_baseline_grade": false, + "source_file": "fedora-20260730T120637Z.json", + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + } + ] +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/dashboard/index.html b/tools/benchmarks/pqc/dashboard/index.html new file mode 100644 index 0000000..7fe347a --- /dev/null +++ b/tools/benchmarks/pqc/dashboard/index.html @@ -0,0 +1,106 @@ + + + + + +PQ Benchmark — RPi5 baseline + + + + + + +
    +

    Post-Quantum Crypto Benchmark Raspberry Pi 5 baseline

    +

    Migration cost: moving from what Logos uses today + (X25519 + Ed25519) to PQ candidates, on validator-grade hardware — measured + across independent implementations (liboqs, RustCrypto, aws-lc-rs) and three + TLS stacks (OpenSSL-native, oqs-provider, rustls), by migration phase.

    +
    + +
    + +
    + + +
    + +
    +

    TLS 1.3 — the migration phases baseline → phase 0 (hybrid KEM, classical sig) → phase 2 (PQ sig)

    +
    + Group family: + Stack: +
    +
    +
    +
    +
    +

    ◆ marker on latency bars = sum of the primitive-operation + medians that one handshake performs (KEM keygen+encaps+decaps + sign + + 2×verify, hybrids counting both components) — a derived figure, not a + measured latency; the gap between the marker and the bar is protocol + overhead. ×N labels are multipliers vs that platform's classical baseline.

    + +

    Full handshake matrix colored by phase, banded by stack; ᵁ = rides unstable cargo features

    +
    Run: +
    +
    +
    +
    +
    + +

    Primitives — same algorithm, independent implementations

    +
    + KEM op: + Signature op: + +
    +
    +
    +
    +
    +

    Only algorithms measured by ≥2 implementations appear here. + Falcon, Classic McEliece and FrodoKEM exist only in liboqs (no mature + pure-Rust implementation — itself a finding); see the security-level charts + below. Solid bars = hand-written asm / native code path; hatched = portable + code (secondary cue — the table is authoritative).

    +
    + +

    Primitives by security level classical baseline drawn on every chart

    +
    + Run: + Implementation: + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +

    Findings: deliberate absences disabled rows are results, not gaps

    +
    +
    + +
    +

    Generated by pq-bench-rpi5. Only runs whose card says + baseline-grade meet the reference bar (real Pi 5 · performance + governor · core-pinned · cortex-a76 flags · no throttling); the Mac run is a + deliberate cross-platform reference, shown and labelled — not hidden.

    +
    + + + + diff --git a/tools/benchmarks/pqc/dashboard/style.css b/tools/benchmarks/pqc/dashboard/style.css new file mode 100644 index 0000000..1e27b71 --- /dev/null +++ b/tools/benchmarks/pqc/dashboard/style.css @@ -0,0 +1,91 @@ +:root { + --bg:#0f1115; --panel:#181b22; --ink:#e6e8ee; --muted:#9aa3b2; + --accent:#3bd67a; --base:#e0533d; --pq:#3a7bff; --line:#2a2f3a; +} +* { box-sizing:border-box; } +body { margin:0; font:15px/1.5 -apple-system,Segoe UI,Roboto,sans-serif; + background:var(--bg); color:var(--ink); } +header { padding:24px 28px 8px; } +h1 { margin:0; font-size:22px; } +h1 .sub, h2 .sub { color:var(--muted); font-weight:400; font-size:0.7em; } +.framing { color:var(--muted); max-width:760px; } +h2 { margin:30px 28px 8px; border-bottom:1px solid var(--line); padding-bottom:6px; } + +#controls { display:flex; flex-wrap:wrap; gap:18px; align-items:center; + padding:12px 28px; background:var(--panel); margin:8px 0; } +#controls label { color:var(--muted); font-size:14px; } +#controls .hint { font-size:12px; opacity:.7; } +select, input[type=file] { color:var(--ink); background:#0c0e12; + border:1px solid var(--line); border-radius:6px; padding:4px 6px; } + +#quality-banner { margin:8px 28px; padding:12px 16px; border-radius:8px; font-weight:600; } +.banner-good { background:#12331f; border:1px solid #1f7a44; color:#7df0a8; } +.banner-warn { background:#3a2410; border:1px solid #aa6a1f; color:#ffce8a; } +.banner-warn ul { font-weight:400; margin:6px 0 0; color:#ffd9a8; } + +#env-summary { margin:0 28px 8px; color:var(--muted); font-size:13px; + display:flex; flex-wrap:wrap; gap:6px 18px; } +#env-summary b { color:var(--ink); } +#env-summary .chip { background:var(--panel); padding:3px 9px; border-radius:20px; + border:1px solid var(--line); } + +.chart-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(420px,1fr)); + gap:18px; padding:14px 28px; } +figure { margin:0; background:var(--panel); border:1px solid var(--line); + border-radius:10px; padding:12px; min-height:320px; } +canvas { max-height:340px; } + +footer { color:var(--muted); font-size:12px; padding:18px 28px 40px; max-width:820px; } +code { background:#0c0e12; padding:1px 5px; border-radius:4px; } +.empty { color:var(--muted); padding:30px; text-align:center; } + +/* ---- multi-implementation / phase views (stage-6 dashboard) ---------------- */ +h3 { margin:22px 28px 4px; color:var(--ink); font-size:16px; } +h3 .sub { color:var(--muted); font-weight:400; font-size:0.8em; } + +#run-cards { display:flex; flex-wrap:wrap; gap:12px; padding:10px 28px; } +.run-card { flex:1 1 380px; background:var(--panel); border-radius:10px; + padding:12px 16px; font-size:13px; color:var(--muted); } +.run-card.good { border:1px solid #1f7a44; } +.run-card.ref { border:1px solid #aa6a1f; } +.run-card b { color:var(--ink); } +.run-card .tag { display:inline-block; padding:2px 9px; border-radius:20px; + font-weight:600; margin-bottom:6px; } +.run-card.good .tag { background:#12331f; color:#7df0a8; } +.run-card.ref .tag { background:#3a2410; color:#ffce8a; } +.run-card details { margin-top:6px; } +.run-card summary { cursor:pointer; color:#ffce8a; } +.run-card .chips { display:flex; flex-wrap:wrap; gap:4px 10px; margin-top:6px; } +.run-card .chip { background:#0c0e12; padding:2px 8px; border-radius:14px; + border:1px solid var(--line); } + +.viewbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px 14px; + margin:6px 28px 0; color:var(--muted); font-size:13px; } +.pills { display:inline-flex; flex-wrap:wrap; gap:6px; } +.pill { cursor:pointer; padding:3px 12px; border-radius:20px; font-size:13px; + border:1px solid var(--line); background:var(--panel); color:var(--muted); } +.pill.on { background:#1d3a6e; border-color:var(--pq); color:var(--ink); } +.toggle { color:var(--muted); font-size:13px; } + +.note { color:var(--muted); font-size:12.5px; margin:2px 28px 8px; max-width:900px; } +.note b { color:var(--ink); } + +figure.tall { min-height:640px; } +figure.tall canvas { max-height:660px; } + +#accel-table { margin:6px 28px 10px; overflow-x:auto; } +#accel-table table { border-collapse:collapse; font-size:12.5px; width:100%; } +#accel-table th, #accel-table td { text-align:left; padding:5px 12px; + border-bottom:1px solid var(--line); color:var(--muted); } +#accel-table th { color:var(--ink); position:sticky; top:0; background:var(--bg); } +#accel-table td.alg { color:var(--ink); } +#accel-table .asm { color:#7df0a8; } +#accel-table .portable { color:#ffce8a; } + +#absences { display:grid; grid-template-columns:repeat(auto-fit,minmax(360px,1fr)); + gap:12px; padding:12px 28px; } +.absence { background:var(--panel); border:1px dashed #aa6a1f; border-radius:10px; + padding:12px 14px; font-size:13px; color:var(--muted); } +.absence b { color:#ffce8a; } +.absence .impl { font-size:11.5px; color:var(--ink); background:#0c0e12; + border-radius:12px; padding:1px 8px; margin-right:6px; } diff --git a/tools/benchmarks/pqc/results/.gitkeep b/tools/benchmarks/pqc/results/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tools/benchmarks/pqc/results/Mac-20260730T134951Z.json b/tools/benchmarks/pqc/results/Mac-20260730T134951Z.json new file mode 100644 index 0000000..5b5ba13 --- /dev/null +++ b/tools/benchmarks/pqc/results/Mac-20260730T134951Z.json @@ -0,0 +1,18519 @@ +{ + "schema_version": "2.0.0", + "tool_version": "0.2.0", + "generated_utc": "2026-07-30T14:10:03Z", + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'apple-m4-pro', not cortex-a76" + ], + "host": { + "hostname": "Mac", + "os": "macos", + "os_pretty": "macOS 26.6 (25G72)", + "arch": "arm64", + "kernel": "25.6.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M4 Pro", + "ncpu": 14, + "ram_bytes": 51539607552 + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-30T13:49:51Z", + "timestamp_end_utc": "2026-07-30T14:10:03Z", + "duration_s": 1212, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "Apple clang version 21.0.0 (clang-2100.1.1.101)", + "bench_cflags": "-O3 -mcpu=native", + "cflags_target": "apple-m4-pro", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET arm64-Darwin-25.5.0;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_SHA3_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.7", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "target_features_compiled": [ + "aes", + "bf16", + "bti", + "crc", + "dit", + "dotprod", + "dpb", + "dpb2", + "fcma", + "fhm", + "flagm", + "fp16", + "frintts", + "i8mm", + "jsconv", + "lor", + "lse", + "neon", + "paca", + "pacg", + "pan", + "pmuv3", + "ras", + "rcpc", + "rcpc2", + "rdm", + "sb", + "sha2", + "sha3", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": true + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1785419391, + null, + null, + null + ], + [ + 1785419391, + null, + null, + null + ], + [ + 1785419392, + null, + null, + null + ], + [ + 1785419393, + null, + null, + null + ], + [ + 1785419394, + null, + null, + null + ], + [ + 1785419395, + null, + null, + null + ], + [ + 1785419396, + null, + null, + null + ], + [ + 1785419397, + null, + null, + null + ], + [ + 1785419398, + null, + null, + null + ], + [ + 1785419399, + null, + null, + null + ], + [ + 1785419400, + null, + null, + null + ], + [ + 1785419401, + null, + null, + null + ], + [ + 1785419402, + null, + null, + null + ], + [ + 1785419403, + null, + null, + null + ], + [ + 1785419404, + null, + null, + null + ], + [ + 1785419405, + null, + null, + null + ], + [ + 1785419406, + null, + null, + null + ], + [ + 1785419407, + null, + null, + null + ], + [ + 1785419408, + null, + null, + null + ], + [ + 1785419409, + null, + null, + null + ], + [ + 1785419410, + null, + null, + null + ], + [ + 1785419411, + null, + null, + null + ], + [ + 1785419412, + null, + null, + null + ], + [ + 1785419413, + null, + null, + null + ], + [ + 1785419414, + null, + null, + null + ], + [ + 1785419415, + null, + null, + null + ], + [ + 1785419416, + null, + null, + null + ], + [ + 1785419417, + null, + null, + null + ], + [ + 1785419418, + null, + null, + null + ], + [ + 1785419419, + null, + null, + null + ], + [ + 1785419420, + null, + null, + null + ], + [ + 1785419421, + null, + null, + null + ], + [ + 1785419422, + null, + null, + null + ], + [ + 1785419423, + null, + null, + null + ], + [ + 1785419424, + null, + null, + null + ], + [ + 1785419425, + null, + null, + null + ], + [ + 1785419426, + null, + null, + null + ], + [ + 1785419427, + null, + null, + null + ], + [ + 1785419428, + null, + null, + null + ], + [ + 1785419429, + null, + null, + null + ], + [ + 1785419430, + null, + null, + null + ], + [ + 1785419431, + null, + null, + null + ], + [ + 1785419432, + null, + null, + null + ], + [ + 1785419433, + null, + null, + null + ], + [ + 1785419434, + null, + null, + null + ], + [ + 1785419435, + null, + null, + null + ], + [ + 1785419436, + null, + null, + null + ], + [ + 1785419437, + null, + null, + null + ], + [ + 1785419438, + null, + null, + null + ], + [ + 1785419439, + null, + null, + null + ], + [ + 1785419440, + null, + null, + null + ], + [ + 1785419441, + null, + null, + null + ], + [ + 1785419442, + null, + null, + null + ], + [ + 1785419443, + null, + null, + null + ], + [ + 1785419444, + null, + null, + null + ], + [ + 1785419445, + null, + null, + null + ], + [ + 1785419446, + null, + null, + null + ], + [ + 1785419447, + null, + null, + null + ], + [ + 1785419448, + null, + null, + null + ], + [ + 1785419449, + null, + null, + null + ], + [ + 1785419450, + null, + null, + null + ], + [ + 1785419451, + null, + null, + null + ], + [ + 1785419452, + null, + null, + null + ], + [ + 1785419453, + null, + null, + null + ], + [ + 1785419454, + null, + null, + null + ], + [ + 1785419455, + null, + null, + null + ], + [ + 1785419456, + null, + null, + null + ], + [ + 1785419457, + null, + null, + null + ], + [ + 1785419458, + null, + null, + null + ], + [ + 1785419459, + null, + null, + null + ], + [ + 1785419460, + null, + null, + null + ], + [ + 1785419461, + null, + null, + null + ], + [ + 1785419462, + null, + null, + null + ], + [ + 1785419463, + null, + null, + null + ], + [ + 1785419465, + null, + null, + null + ], + [ + 1785419466, + null, + null, + null + ], + [ + 1785419467, + null, + null, + null + ], + [ + 1785419468, + null, + null, + null + ], + [ + 1785419469, + null, + null, + null + ], + [ + 1785419470, + null, + null, + null + ], + [ + 1785419471, + null, + null, + null + ], + [ + 1785419472, + null, + null, + null + ], + [ + 1785419473, + null, + null, + null + ], + [ + 1785419474, + null, + null, + null + ], + [ + 1785419475, + null, + null, + null + ], + [ + 1785419476, + null, + null, + null + ], + [ + 1785419477, + null, + null, + null + ], + [ + 1785419478, + null, + null, + null + ], + [ + 1785419479, + null, + null, + null + ], + [ + 1785419480, + null, + null, + null + ], + [ + 1785419481, + null, + null, + null + ], + [ + 1785419482, + null, + null, + null + ], + [ + 1785419483, + null, + null, + null + ], + [ + 1785419484, + null, + null, + null + ], + [ + 1785419485, + null, + null, + null + ], + [ + 1785419486, + null, + null, + null + ], + [ + 1785419487, + null, + null, + null + ], + [ + 1785419488, + null, + null, + null + ], + [ + 1785419489, + null, + null, + null + ], + [ + 1785419490, + null, + null, + null + ], + [ + 1785419491, + null, + null, + null + ], + [ + 1785419492, + null, + null, + null + ], + [ + 1785419493, + null, + null, + null + ], + [ + 1785419494, + null, + null, + null + ], + [ + 1785419495, + null, + null, + null + ], + [ + 1785419496, + null, + null, + null + ], + [ + 1785419497, + null, + null, + null + ], + [ + 1785419498, + null, + null, + null + ], + [ + 1785419499, + null, + null, + null + ], + [ + 1785419500, + null, + null, + null + ], + [ + 1785419501, + null, + null, + null + ], + [ + 1785419502, + null, + null, + null + ], + [ + 1785419503, + null, + null, + null + ], + [ + 1785419504, + null, + null, + null + ], + [ + 1785419505, + null, + null, + null + ], + [ + 1785419506, + null, + null, + null + ], + [ + 1785419507, + null, + null, + null + ], + [ + 1785419508, + null, + null, + null + ], + [ + 1785419509, + null, + null, + null + ], + [ + 1785419510, + null, + null, + null + ], + [ + 1785419511, + null, + null, + null + ], + [ + 1785419512, + null, + null, + null + ], + [ + 1785419513, + null, + null, + null + ], + [ + 1785419514, + null, + null, + null + ], + [ + 1785419515, + null, + null, + null + ], + [ + 1785419516, + null, + null, + null + ], + [ + 1785419517, + null, + null, + null + ], + [ + 1785419518, + null, + null, + null + ], + [ + 1785419519, + null, + null, + null + ], + [ + 1785419520, + null, + null, + null + ], + [ + 1785419521, + null, + null, + null + ], + [ + 1785419522, + null, + null, + null + ], + [ + 1785419523, + null, + null, + null + ], + [ + 1785419524, + null, + null, + null + ], + [ + 1785419525, + null, + null, + null + ], + [ + 1785419526, + null, + null, + null + ], + [ + 1785419527, + null, + null, + null + ], + [ + 1785419528, + null, + null, + null + ], + [ + 1785419529, + null, + null, + null + ], + [ + 1785419530, + null, + null, + null + ], + [ + 1785419531, + null, + null, + null + ], + [ + 1785419532, + null, + null, + null + ], + [ + 1785419533, + null, + null, + null + ], + [ + 1785419534, + null, + null, + null + ], + [ + 1785419535, + null, + null, + null + ], + [ + 1785419536, + null, + null, + null + ], + [ + 1785419537, + null, + null, + null + ], + [ + 1785419538, + null, + null, + null + ], + [ + 1785419539, + null, + null, + null + ], + [ + 1785419540, + null, + null, + null + ], + [ + 1785419541, + null, + null, + null + ], + [ + 1785419542, + null, + null, + null + ], + [ + 1785419543, + null, + null, + null + ], + [ + 1785419544, + null, + null, + null + ], + [ + 1785419545, + null, + null, + null + ], + [ + 1785419546, + null, + null, + null + ], + [ + 1785419547, + null, + null, + null + ], + [ + 1785419548, + null, + null, + null + ], + [ + 1785419549, + null, + null, + null + ], + [ + 1785419550, + null, + null, + null + ], + [ + 1785419551, + null, + null, + null + ], + [ + 1785419552, + null, + null, + null + ], + [ + 1785419553, + null, + null, + null + ], + [ + 1785419554, + null, + null, + null + ], + [ + 1785419556, + null, + null, + null + ], + [ + 1785419557, + null, + null, + null + ], + [ + 1785419558, + null, + null, + null + ], + [ + 1785419559, + null, + null, + null + ], + [ + 1785419560, + null, + null, + null + ], + [ + 1785419561, + null, + null, + null + ], + [ + 1785419562, + null, + null, + null + ], + [ + 1785419563, + null, + null, + null + ], + [ + 1785419564, + null, + null, + null + ], + [ + 1785419565, + null, + null, + null + ], + [ + 1785419566, + null, + null, + null + ], + [ + 1785419567, + null, + null, + null + ], + [ + 1785419568, + null, + null, + null + ], + [ + 1785419569, + null, + null, + null + ], + [ + 1785419570, + null, + null, + null + ], + [ + 1785419571, + null, + null, + null + ], + [ + 1785419572, + null, + null, + null + ], + [ + 1785419573, + null, + null, + null + ], + [ + 1785419574, + null, + null, + null + ], + [ + 1785419575, + null, + null, + null + ], + [ + 1785419576, + null, + null, + null + ], + [ + 1785419577, + null, + null, + null + ], + [ + 1785419578, + null, + null, + null + ], + [ + 1785419579, + null, + null, + null + ], + [ + 1785419580, + null, + null, + null + ], + [ + 1785419581, + null, + null, + null + ], + [ + 1785419582, + null, + null, + null + ], + [ + 1785419583, + null, + null, + null + ], + [ + 1785419584, + null, + null, + null + ], + [ + 1785419585, + null, + null, + null + ], + [ + 1785419586, + null, + null, + null + ], + [ + 1785419587, + null, + null, + null + ], + [ + 1785419588, + null, + null, + null + ], + [ + 1785419589, + null, + null, + null + ], + [ + 1785419590, + null, + null, + null + ], + [ + 1785419591, + null, + null, + null + ], + [ + 1785419592, + null, + null, + null + ], + [ + 1785419593, + null, + null, + null + ], + [ + 1785419594, + null, + null, + null + ], + [ + 1785419595, + null, + null, + null + ], + [ + 1785419596, + null, + null, + null + ], + [ + 1785419597, + null, + null, + null + ], + [ + 1785419598, + null, + null, + null + ], + [ + 1785419599, + null, + null, + null + ], + [ + 1785419600, + null, + null, + null + ], + [ + 1785419601, + null, + null, + null + ], + [ + 1785419602, + null, + null, + null + ], + [ + 1785419603, + null, + null, + null + ], + [ + 1785419604, + null, + null, + null + ], + [ + 1785419605, + null, + null, + null + ], + [ + 1785419606, + null, + null, + null + ], + [ + 1785419607, + null, + null, + null + ], + [ + 1785419608, + null, + null, + null + ], + [ + 1785419609, + null, + null, + null + ], + [ + 1785419610, + null, + null, + null + ], + [ + 1785419611, + null, + null, + null + ], + [ + 1785419612, + null, + null, + null + ], + [ + 1785419613, + null, + null, + null + ], + [ + 1785419614, + null, + null, + null + ], + [ + 1785419615, + null, + null, + null + ], + [ + 1785419616, + null, + null, + null + ], + [ + 1785419617, + null, + null, + null + ], + [ + 1785419618, + null, + null, + null + ], + [ + 1785419619, + null, + null, + null + ], + [ + 1785419620, + null, + null, + null + ], + [ + 1785419621, + null, + null, + null + ], + [ + 1785419622, + null, + null, + null + ], + [ + 1785419623, + null, + null, + null + ], + [ + 1785419624, + null, + null, + null + ], + [ + 1785419625, + null, + null, + null + ], + [ + 1785419626, + null, + null, + null + ], + [ + 1785419627, + null, + null, + null + ], + [ + 1785419628, + null, + null, + null + ], + [ + 1785419629, + null, + null, + null + ], + [ + 1785419630, + null, + null, + null + ], + [ + 1785419631, + null, + null, + null + ], + [ + 1785419632, + null, + null, + null + ], + [ + 1785419633, + null, + null, + null + ], + [ + 1785419634, + null, + null, + null + ], + [ + 1785419635, + null, + null, + null + ], + [ + 1785419636, + null, + null, + null + ], + [ + 1785419637, + null, + null, + null + ], + [ + 1785419638, + null, + null, + null + ], + [ + 1785419639, + null, + null, + null + ], + [ + 1785419640, + null, + null, + null + ], + [ + 1785419641, + null, + null, + null + ], + [ + 1785419642, + null, + null, + null + ], + [ + 1785419643, + null, + null, + null + ], + [ + 1785419644, + null, + null, + null + ], + [ + 1785419645, + null, + null, + null + ], + [ + 1785419646, + null, + null, + null + ], + [ + 1785419647, + null, + null, + null + ], + [ + 1785419649, + null, + null, + null + ], + [ + 1785419650, + null, + null, + null + ], + [ + 1785419651, + null, + null, + null + ], + [ + 1785419652, + null, + null, + null + ], + [ + 1785419653, + null, + null, + null + ], + [ + 1785419654, + null, + null, + null + ], + [ + 1785419655, + null, + null, + null + ], + [ + 1785419656, + null, + null, + null + ], + [ + 1785419657, + null, + null, + null + ], + [ + 1785419658, + null, + null, + null + ], + [ + 1785419659, + null, + null, + null + ], + [ + 1785419660, + null, + null, + null + ], + [ + 1785419661, + null, + null, + null + ], + [ + 1785419662, + null, + null, + null + ], + [ + 1785419663, + null, + null, + null + ], + [ + 1785419664, + null, + null, + null + ], + [ + 1785419665, + null, + null, + null + ], + [ + 1785419666, + null, + null, + null + ], + [ + 1785419667, + null, + null, + null + ], + [ + 1785419668, + null, + null, + null + ], + [ + 1785419669, + null, + null, + null + ], + [ + 1785419670, + null, + null, + null + ], + [ + 1785419671, + null, + null, + null + ], + [ + 1785419672, + null, + null, + null + ], + [ + 1785419673, + null, + null, + null + ], + [ + 1785419674, + null, + null, + null + ], + [ + 1785419675, + null, + null, + null + ], + [ + 1785419676, + null, + null, + null + ], + [ + 1785419677, + null, + null, + null + ], + [ + 1785419678, + null, + null, + null + ], + [ + 1785419679, + null, + null, + null + ], + [ + 1785419680, + null, + null, + null + ], + [ + 1785419681, + null, + null, + null + ], + [ + 1785419682, + null, + null, + null + ], + [ + 1785419683, + null, + null, + null + ], + [ + 1785419684, + null, + null, + null + ], + [ + 1785419685, + null, + null, + null + ], + [ + 1785419686, + null, + null, + null + ], + [ + 1785419687, + null, + null, + null + ], + [ + 1785419688, + null, + null, + null + ], + [ + 1785419689, + null, + null, + null + ], + [ + 1785419690, + null, + null, + null + ], + [ + 1785419691, + null, + null, + null + ], + [ + 1785419692, + null, + null, + null + ], + [ + 1785419693, + null, + null, + null + ], + [ + 1785419694, + null, + null, + null + ], + [ + 1785419695, + null, + null, + null + ], + [ + 1785419696, + null, + null, + null + ], + [ + 1785419697, + null, + null, + null + ], + [ + 1785419698, + null, + null, + null + ], + [ + 1785419699, + null, + null, + null + ], + [ + 1785419700, + null, + null, + null + ], + [ + 1785419701, + null, + null, + null + ], + [ + 1785419702, + null, + null, + null + ], + [ + 1785419703, + null, + null, + null + ], + [ + 1785419704, + null, + null, + null + ], + [ + 1785419705, + null, + null, + null + ], + [ + 1785419706, + null, + null, + null + ], + [ + 1785419707, + null, + null, + null + ], + [ + 1785419708, + null, + null, + null + ], + [ + 1785419709, + null, + null, + null + ], + [ + 1785419710, + null, + null, + null + ], + [ + 1785419711, + null, + null, + null + ], + [ + 1785419712, + null, + null, + null + ], + [ + 1785419713, + null, + null, + null + ], + [ + 1785419714, + null, + null, + null + ], + [ + 1785419715, + null, + null, + null + ], + [ + 1785419716, + null, + null, + null + ], + [ + 1785419717, + null, + null, + null + ], + [ + 1785419718, + null, + null, + null + ], + [ + 1785419719, + null, + null, + null + ], + [ + 1785419720, + null, + null, + null + ], + [ + 1785419721, + null, + null, + null + ], + [ + 1785419722, + null, + null, + null + ], + [ + 1785419723, + null, + null, + null + ], + [ + 1785419724, + null, + null, + null + ], + [ + 1785419725, + null, + null, + null + ], + [ + 1785419726, + null, + null, + null + ], + [ + 1785419727, + null, + null, + null + ], + [ + 1785419728, + null, + null, + null + ], + [ + 1785419729, + null, + null, + null + ], + [ + 1785419730, + null, + null, + null + ], + [ + 1785419731, + null, + null, + null + ], + [ + 1785419732, + null, + null, + null + ], + [ + 1785419733, + null, + null, + null + ], + [ + 1785419734, + null, + null, + null + ], + [ + 1785419735, + null, + null, + null + ], + [ + 1785419736, + null, + null, + null + ], + [ + 1785419737, + null, + null, + null + ], + [ + 1785419738, + null, + null, + null + ], + [ + 1785419740, + null, + null, + null + ], + [ + 1785419741, + null, + null, + null + ], + [ + 1785419742, + null, + null, + null + ], + [ + 1785419743, + null, + null, + null + ], + [ + 1785419744, + null, + null, + null + ], + [ + 1785419745, + null, + null, + null + ], + [ + 1785419746, + null, + null, + null + ], + [ + 1785419747, + null, + null, + null + ], + [ + 1785419748, + null, + null, + null + ], + [ + 1785419749, + null, + null, + null + ], + [ + 1785419750, + null, + null, + null + ], + [ + 1785419751, + null, + null, + null + ], + [ + 1785419752, + null, + null, + null + ], + [ + 1785419753, + null, + null, + null + ], + [ + 1785419754, + null, + null, + null + ], + [ + 1785419755, + null, + null, + null + ], + [ + 1785419756, + null, + null, + null + ], + [ + 1785419757, + null, + null, + null + ], + [ + 1785419758, + null, + null, + null + ], + [ + 1785419759, + null, + null, + null + ], + [ + 1785419760, + null, + null, + null + ], + [ + 1785419761, + null, + null, + null + ], + [ + 1785419762, + null, + null, + null + ], + [ + 1785419763, + null, + null, + null + ], + [ + 1785419764, + null, + null, + null + ], + [ + 1785419765, + null, + null, + null + ], + [ + 1785419766, + null, + null, + null + ], + [ + 1785419767, + null, + null, + null + ], + [ + 1785419768, + null, + null, + null + ], + [ + 1785419769, + null, + null, + null + ], + [ + 1785419770, + null, + null, + null + ], + [ + 1785419771, + null, + null, + null + ], + [ + 1785419772, + null, + null, + null + ], + [ + 1785419773, + null, + null, + null + ], + [ + 1785419774, + null, + null, + null + ], + [ + 1785419775, + null, + null, + null + ], + [ + 1785419776, + null, + null, + null + ], + [ + 1785419777, + null, + null, + null + ], + [ + 1785419778, + null, + null, + null + ], + [ + 1785419779, + null, + null, + null + ], + [ + 1785419780, + null, + null, + null + ], + [ + 1785419781, + null, + null, + null + ], + [ + 1785419782, + null, + null, + null + ], + [ + 1785419783, + null, + null, + null + ], + [ + 1785419784, + null, + null, + null + ], + [ + 1785419785, + null, + null, + null + ], + [ + 1785419786, + null, + null, + null + ], + [ + 1785419787, + null, + null, + null + ], + [ + 1785419788, + null, + null, + null + ], + [ + 1785419789, + null, + null, + null + ], + [ + 1785419790, + null, + null, + null + ], + [ + 1785419791, + null, + null, + null + ], + [ + 1785419792, + null, + null, + null + ], + [ + 1785419793, + null, + null, + null + ], + [ + 1785419794, + null, + null, + null + ], + [ + 1785419795, + null, + null, + null + ], + [ + 1785419796, + null, + null, + null + ], + [ + 1785419797, + null, + null, + null + ], + [ + 1785419798, + null, + null, + null + ], + [ + 1785419799, + null, + null, + null + ], + [ + 1785419800, + null, + null, + null + ], + [ + 1785419801, + null, + null, + null + ], + [ + 1785419802, + null, + null, + null + ], + [ + 1785419803, + null, + null, + null + ], + [ + 1785419804, + null, + null, + null + ], + [ + 1785419805, + null, + null, + null + ], + [ + 1785419806, + null, + null, + null + ], + [ + 1785419807, + null, + null, + null + ], + [ + 1785419808, + null, + null, + null + ], + [ + 1785419809, + null, + null, + null + ], + [ + 1785419810, + null, + null, + null + ], + [ + 1785419811, + null, + null, + null + ], + [ + 1785419812, + null, + null, + null + ], + [ + 1785419813, + null, + null, + null + ], + [ + 1785419814, + null, + null, + null + ], + [ + 1785419815, + null, + null, + null + ], + [ + 1785419816, + null, + null, + null + ], + [ + 1785419817, + null, + null, + null + ], + [ + 1785419818, + null, + null, + null + ], + [ + 1785419819, + null, + null, + null + ], + [ + 1785419820, + null, + null, + null + ], + [ + 1785419821, + null, + null, + null + ], + [ + 1785419822, + null, + null, + null + ], + [ + 1785419823, + null, + null, + null + ], + [ + 1785419824, + null, + null, + null + ], + [ + 1785419825, + null, + null, + null + ], + [ + 1785419826, + null, + null, + null + ], + [ + 1785419827, + null, + null, + null + ], + [ + 1785419828, + null, + null, + null + ], + [ + 1785419830, + null, + null, + null + ], + [ + 1785419831, + null, + null, + null + ], + [ + 1785419832, + null, + null, + null + ], + [ + 1785419833, + null, + null, + null + ], + [ + 1785419834, + null, + null, + null + ], + [ + 1785419835, + null, + null, + null + ], + [ + 1785419836, + null, + null, + null + ], + [ + 1785419837, + null, + null, + null + ], + [ + 1785419838, + null, + null, + null + ], + [ + 1785419839, + null, + null, + null + ], + [ + 1785419840, + null, + null, + null + ], + [ + 1785419841, + null, + null, + null + ], + [ + 1785419842, + null, + null, + null + ], + [ + 1785419843, + null, + null, + null + ], + [ + 1785419844, + null, + null, + null + ], + [ + 1785419845, + null, + null, + null + ], + [ + 1785419846, + null, + null, + null + ], + [ + 1785419847, + null, + null, + null + ], + [ + 1785419848, + null, + null, + null + ], + [ + 1785419849, + null, + null, + null + ], + [ + 1785419850, + null, + null, + null + ], + [ + 1785419851, + null, + null, + null + ], + [ + 1785419852, + null, + null, + null + ], + [ + 1785419853, + null, + null, + null + ], + [ + 1785419854, + null, + null, + null + ], + [ + 1785419855, + null, + null, + null + ], + [ + 1785419856, + null, + null, + null + ], + [ + 1785419857, + null, + null, + null + ], + [ + 1785419858, + null, + null, + null + ], + [ + 1785419859, + null, + null, + null + ], + [ + 1785419860, + null, + null, + null + ], + [ + 1785419861, + null, + null, + null + ], + [ + 1785419862, + null, + null, + null + ], + [ + 1785419863, + null, + null, + null + ], + [ + 1785419864, + null, + null, + null + ], + [ + 1785419865, + null, + null, + null + ], + [ + 1785419866, + null, + null, + null + ], + [ + 1785419867, + null, + null, + null + ], + [ + 1785419868, + null, + null, + null + ], + [ + 1785419869, + null, + null, + null + ], + [ + 1785419870, + null, + null, + null + ], + [ + 1785419871, + null, + null, + null + ], + [ + 1785419872, + null, + null, + null + ], + [ + 1785419873, + null, + null, + null + ], + [ + 1785419874, + null, + null, + null + ], + [ + 1785419875, + null, + null, + null + ], + [ + 1785419876, + null, + null, + null + ], + [ + 1785419877, + null, + null, + null + ], + [ + 1785419878, + null, + null, + null + ], + [ + 1785419879, + null, + null, + null + ], + [ + 1785419880, + null, + null, + null + ], + [ + 1785419881, + null, + null, + null + ], + [ + 1785419882, + null, + null, + null + ], + [ + 1785419883, + null, + null, + null + ], + [ + 1785419884, + null, + null, + null + ], + [ + 1785419885, + null, + null, + null + ], + [ + 1785419886, + null, + null, + null + ], + [ + 1785419887, + null, + null, + null + ], + [ + 1785419888, + null, + null, + null + ], + [ + 1785419889, + null, + null, + null + ], + [ + 1785419890, + null, + null, + null + ], + [ + 1785419891, + null, + null, + null + ], + [ + 1785419892, + null, + null, + null + ], + [ + 1785419893, + null, + null, + null + ], + [ + 1785419894, + null, + null, + null + ], + [ + 1785419895, + null, + null, + null + ], + [ + 1785419896, + null, + null, + null + ], + [ + 1785419897, + null, + null, + null + ], + [ + 1785419898, + null, + null, + null + ], + [ + 1785419899, + null, + null, + null + ], + [ + 1785419900, + null, + null, + null + ], + [ + 1785419901, + null, + null, + null + ], + [ + 1785419902, + null, + null, + null + ], + [ + 1785419903, + null, + null, + null + ], + [ + 1785419904, + null, + null, + null + ], + [ + 1785419905, + null, + null, + null + ], + [ + 1785419906, + null, + null, + null + ], + [ + 1785419907, + null, + null, + null + ], + [ + 1785419908, + null, + null, + null + ], + [ + 1785419909, + null, + null, + null + ], + [ + 1785419910, + null, + null, + null + ], + [ + 1785419911, + null, + null, + null + ], + [ + 1785419912, + null, + null, + null + ], + [ + 1785419913, + null, + null, + null + ], + [ + 1785419914, + null, + null, + null + ], + [ + 1785419915, + null, + null, + null + ], + [ + 1785419916, + null, + null, + null + ], + [ + 1785419917, + null, + null, + null + ], + [ + 1785419918, + null, + null, + null + ], + [ + 1785419919, + null, + null, + null + ], + [ + 1785419920, + null, + null, + null + ], + [ + 1785419921, + null, + null, + null + ], + [ + 1785419922, + null, + null, + null + ], + [ + 1785419924, + null, + null, + null + ], + [ + 1785419925, + null, + null, + null + ], + [ + 1785419926, + null, + null, + null + ], + [ + 1785419927, + null, + null, + null + ], + [ + 1785419928, + null, + null, + null + ], + [ + 1785419929, + null, + null, + null + ], + [ + 1785419930, + null, + null, + null + ], + [ + 1785419931, + null, + null, + null + ], + [ + 1785419932, + null, + null, + null + ], + [ + 1785419933, + null, + null, + null + ], + [ + 1785419934, + null, + null, + null + ], + [ + 1785419935, + null, + null, + null + ], + [ + 1785419936, + null, + null, + null + ], + [ + 1785419937, + null, + null, + null + ], + [ + 1785419938, + null, + null, + null + ], + [ + 1785419939, + null, + null, + null + ], + [ + 1785419940, + null, + null, + null + ], + [ + 1785419941, + null, + null, + null + ], + [ + 1785419942, + null, + null, + null + ], + [ + 1785419943, + null, + null, + null + ], + [ + 1785419944, + null, + null, + null + ], + [ + 1785419945, + null, + null, + null + ], + [ + 1785419946, + null, + null, + null + ], + [ + 1785419947, + null, + null, + null + ], + [ + 1785419948, + null, + null, + null + ], + [ + 1785419949, + null, + null, + null + ], + [ + 1785419950, + null, + null, + null + ], + [ + 1785419951, + null, + null, + null + ], + [ + 1785419952, + null, + null, + null + ], + [ + 1785419953, + null, + null, + null + ], + [ + 1785419954, + null, + null, + null + ], + [ + 1785419955, + null, + null, + null + ], + [ + 1785419956, + null, + null, + null + ], + [ + 1785419957, + null, + null, + null + ], + [ + 1785419958, + null, + null, + null + ], + [ + 1785419959, + null, + null, + null + ], + [ + 1785419960, + null, + null, + null + ], + [ + 1785419961, + null, + null, + null + ], + [ + 1785419962, + null, + null, + null + ], + [ + 1785419963, + null, + null, + null + ], + [ + 1785419964, + null, + null, + null + ], + [ + 1785419965, + null, + null, + null + ], + [ + 1785419966, + null, + null, + null + ], + [ + 1785419967, + null, + null, + null + ], + [ + 1785419968, + null, + null, + null + ], + [ + 1785419969, + null, + null, + null + ], + [ + 1785419970, + null, + null, + null + ], + [ + 1785419971, + null, + null, + null + ], + [ + 1785419972, + null, + null, + null + ], + [ + 1785419973, + null, + null, + null + ], + [ + 1785419974, + null, + null, + null + ], + [ + 1785419975, + null, + null, + null + ], + [ + 1785419976, + null, + null, + null + ], + [ + 1785419977, + null, + null, + null + ], + [ + 1785419978, + null, + null, + null + ], + [ + 1785419979, + null, + null, + null + ], + [ + 1785419980, + null, + null, + null + ], + [ + 1785419981, + null, + null, + null + ], + [ + 1785419982, + null, + null, + null + ], + [ + 1785419983, + null, + null, + null + ], + [ + 1785419984, + null, + null, + null + ], + [ + 1785419985, + null, + null, + null + ], + [ + 1785419986, + null, + null, + null + ], + [ + 1785419987, + null, + null, + null + ], + [ + 1785419988, + null, + null, + null + ], + [ + 1785419989, + null, + null, + null + ], + [ + 1785419990, + null, + null, + null + ], + [ + 1785419991, + null, + null, + null + ], + [ + 1785419992, + null, + null, + null + ], + [ + 1785419993, + null, + null, + null + ], + [ + 1785419994, + null, + null, + null + ], + [ + 1785419995, + null, + null, + null + ], + [ + 1785419996, + null, + null, + null + ], + [ + 1785419997, + null, + null, + null + ], + [ + 1785419998, + null, + null, + null + ], + [ + 1785419999, + null, + null, + null + ], + [ + 1785420000, + null, + null, + null + ], + [ + 1785420001, + null, + null, + null + ], + [ + 1785420002, + null, + null, + null + ], + [ + 1785420003, + null, + null, + null + ], + [ + 1785420004, + null, + null, + null + ], + [ + 1785420005, + null, + null, + null + ], + [ + 1785420006, + null, + null, + null + ], + [ + 1785420007, + null, + null, + null + ], + [ + 1785420008, + null, + null, + null + ], + [ + 1785420009, + null, + null, + null + ], + [ + 1785420010, + null, + null, + null + ], + [ + 1785420011, + null, + null, + null + ], + [ + 1785420012, + null, + null, + null + ], + [ + 1785420013, + null, + null, + null + ], + [ + 1785420014, + null, + null, + null + ], + [ + 1785420016, + null, + null, + null + ], + [ + 1785420017, + null, + null, + null + ], + [ + 1785420018, + null, + null, + null + ], + [ + 1785420019, + null, + null, + null + ], + [ + 1785420020, + null, + null, + null + ], + [ + 1785420021, + null, + null, + null + ], + [ + 1785420022, + null, + null, + null + ], + [ + 1785420023, + null, + null, + null + ], + [ + 1785420024, + null, + null, + null + ], + [ + 1785420025, + null, + null, + null + ], + [ + 1785420026, + null, + null, + null + ], + [ + 1785420027, + null, + null, + null + ], + [ + 1785420028, + null, + null, + null + ], + [ + 1785420029, + null, + null, + null + ], + [ + 1785420030, + null, + null, + null + ], + [ + 1785420031, + null, + null, + null + ], + [ + 1785420032, + null, + null, + null + ], + [ + 1785420033, + null, + null, + null + ], + [ + 1785420034, + null, + null, + null + ], + [ + 1785420035, + null, + null, + null + ], + [ + 1785420036, + null, + null, + null + ], + [ + 1785420037, + null, + null, + null + ], + [ + 1785420038, + null, + null, + null + ], + [ + 1785420039, + null, + null, + null + ], + [ + 1785420040, + null, + null, + null + ], + [ + 1785420041, + null, + null, + null + ], + [ + 1785420042, + null, + null, + null + ], + [ + 1785420043, + null, + null, + null + ], + [ + 1785420044, + null, + null, + null + ], + [ + 1785420045, + null, + null, + null + ], + [ + 1785420046, + null, + null, + null + ], + [ + 1785420047, + null, + null, + null + ], + [ + 1785420048, + null, + null, + null + ], + [ + 1785420049, + null, + null, + null + ], + [ + 1785420050, + null, + null, + null + ], + [ + 1785420051, + null, + null, + null + ], + [ + 1785420052, + null, + null, + null + ], + [ + 1785420053, + null, + null, + null + ], + [ + 1785420054, + null, + null, + null + ], + [ + 1785420055, + null, + null, + null + ], + [ + 1785420056, + null, + null, + null + ], + [ + 1785420057, + null, + null, + null + ], + [ + 1785420058, + null, + null, + null + ], + [ + 1785420059, + null, + null, + null + ], + [ + 1785420060, + null, + null, + null + ], + [ + 1785420061, + null, + null, + null + ], + [ + 1785420062, + null, + null, + null + ], + [ + 1785420063, + null, + null, + null + ], + [ + 1785420064, + null, + null, + null + ], + [ + 1785420065, + null, + null, + null + ], + [ + 1785420066, + null, + null, + null + ], + [ + 1785420067, + null, + null, + null + ], + [ + 1785420068, + null, + null, + null + ], + [ + 1785420069, + null, + null, + null + ], + [ + 1785420070, + null, + null, + null + ], + [ + 1785420071, + null, + null, + null + ], + [ + 1785420072, + null, + null, + null + ], + [ + 1785420073, + null, + null, + null + ], + [ + 1785420074, + null, + null, + null + ], + [ + 1785420075, + null, + null, + null + ], + [ + 1785420076, + null, + null, + null + ], + [ + 1785420077, + null, + null, + null + ], + [ + 1785420078, + null, + null, + null + ], + [ + 1785420079, + null, + null, + null + ], + [ + 1785420080, + null, + null, + null + ], + [ + 1785420081, + null, + null, + null + ], + [ + 1785420082, + null, + null, + null + ], + [ + 1785420083, + null, + null, + null + ], + [ + 1785420084, + null, + null, + null + ], + [ + 1785420085, + null, + null, + null + ], + [ + 1785420086, + null, + null, + null + ], + [ + 1785420087, + null, + null, + null + ], + [ + 1785420088, + null, + null, + null + ], + [ + 1785420089, + null, + null, + null + ], + [ + 1785420090, + null, + null, + null + ], + [ + 1785420091, + null, + null, + null + ], + [ + 1785420092, + null, + null, + null + ], + [ + 1785420093, + null, + null, + null + ], + [ + 1785420094, + null, + null, + null + ], + [ + 1785420095, + null, + null, + null + ], + [ + 1785420096, + null, + null, + null + ], + [ + 1785420097, + null, + null, + null + ], + [ + 1785420098, + null, + null, + null + ], + [ + 1785420099, + null, + null, + null + ], + [ + 1785420100, + null, + null, + null + ], + [ + 1785420101, + null, + null, + null + ], + [ + 1785420102, + null, + null, + null + ], + [ + 1785420103, + null, + null, + null + ], + [ + 1785420104, + null, + null, + null + ], + [ + 1785420105, + null, + null, + null + ], + [ + 1785420107, + null, + null, + null + ], + [ + 1785420108, + null, + null, + null + ], + [ + 1785420109, + null, + null, + null + ], + [ + 1785420110, + null, + null, + null + ], + [ + 1785420111, + null, + null, + null + ], + [ + 1785420112, + null, + null, + null + ], + [ + 1785420113, + null, + null, + null + ], + [ + 1785420114, + null, + null, + null + ], + [ + 1785420115, + null, + null, + null + ], + [ + 1785420116, + null, + null, + null + ], + [ + 1785420117, + null, + null, + null + ], + [ + 1785420118, + null, + null, + null + ], + [ + 1785420119, + null, + null, + null + ], + [ + 1785420120, + null, + null, + null + ], + [ + 1785420121, + null, + null, + null + ], + [ + 1785420122, + null, + null, + null + ], + [ + 1785420123, + null, + null, + null + ], + [ + 1785420124, + null, + null, + null + ], + [ + 1785420125, + null, + null, + null + ], + [ + 1785420126, + null, + null, + null + ], + [ + 1785420127, + null, + null, + null + ], + [ + 1785420128, + null, + null, + null + ], + [ + 1785420129, + null, + null, + null + ], + [ + 1785420130, + null, + null, + null + ], + [ + 1785420131, + null, + null, + null + ], + [ + 1785420132, + null, + null, + null + ], + [ + 1785420133, + null, + null, + null + ], + [ + 1785420134, + null, + null, + null + ], + [ + 1785420135, + null, + null, + null + ], + [ + 1785420136, + null, + null, + null + ], + [ + 1785420137, + null, + null, + null + ], + [ + 1785420138, + null, + null, + null + ], + [ + 1785420139, + null, + null, + null + ], + [ + 1785420140, + null, + null, + null + ], + [ + 1785420141, + null, + null, + null + ], + [ + 1785420142, + null, + null, + null + ], + [ + 1785420143, + null, + null, + null + ], + [ + 1785420144, + null, + null, + null + ], + [ + 1785420145, + null, + null, + null + ], + [ + 1785420146, + null, + null, + null + ], + [ + 1785420147, + null, + null, + null + ], + [ + 1785420148, + null, + null, + null + ], + [ + 1785420149, + null, + null, + null + ], + [ + 1785420150, + null, + null, + null + ], + [ + 1785420151, + null, + null, + null + ], + [ + 1785420152, + null, + null, + null + ], + [ + 1785420153, + null, + null, + null + ], + [ + 1785420154, + null, + null, + null + ], + [ + 1785420155, + null, + null, + null + ], + [ + 1785420156, + null, + null, + null + ], + [ + 1785420157, + null, + null, + null + ], + [ + 1785420158, + null, + null, + null + ], + [ + 1785420159, + null, + null, + null + ], + [ + 1785420160, + null, + null, + null + ], + [ + 1785420161, + null, + null, + null + ], + [ + 1785420162, + null, + null, + null + ], + [ + 1785420163, + null, + null, + null + ], + [ + 1785420164, + null, + null, + null + ], + [ + 1785420165, + null, + null, + null + ], + [ + 1785420166, + null, + null, + null + ], + [ + 1785420167, + null, + null, + null + ], + [ + 1785420168, + null, + null, + null + ], + [ + 1785420169, + null, + null, + null + ], + [ + 1785420170, + null, + null, + null + ], + [ + 1785420171, + null, + null, + null + ], + [ + 1785420172, + null, + null, + null + ], + [ + 1785420173, + null, + null, + null + ], + [ + 1785420174, + null, + null, + null + ], + [ + 1785420175, + null, + null, + null + ], + [ + 1785420176, + null, + null, + null + ], + [ + 1785420177, + null, + null, + null + ], + [ + 1785420178, + null, + null, + null + ], + [ + 1785420179, + null, + null, + null + ], + [ + 1785420180, + null, + null, + null + ], + [ + 1785420181, + null, + null, + null + ], + [ + 1785420182, + null, + null, + null + ], + [ + 1785420183, + null, + null, + null + ], + [ + 1785420184, + null, + null, + null + ], + [ + 1785420185, + null, + null, + null + ], + [ + 1785420186, + null, + null, + null + ], + [ + 1785420187, + null, + null, + null + ], + [ + 1785420188, + null, + null, + null + ], + [ + 1785420189, + null, + null, + null + ], + [ + 1785420190, + null, + null, + null + ], + [ + 1785420191, + null, + null, + null + ], + [ + 1785420192, + null, + null, + null + ], + [ + 1785420193, + null, + null, + null + ], + [ + 1785420194, + null, + null, + null + ], + [ + 1785420195, + null, + null, + null + ], + [ + 1785420196, + null, + null, + null + ], + [ + 1785420197, + null, + null, + null + ], + [ + 1785420198, + null, + null, + null + ], + [ + 1785420200, + null, + null, + null + ], + [ + 1785420201, + null, + null, + null + ], + [ + 1785420202, + null, + null, + null + ], + [ + 1785420203, + null, + null, + null + ], + [ + 1785420204, + null, + null, + null + ], + [ + 1785420205, + null, + null, + null + ], + [ + 1785420206, + null, + null, + null + ], + [ + 1785420207, + null, + null, + null + ], + [ + 1785420208, + null, + null, + null + ], + [ + 1785420209, + null, + null, + null + ], + [ + 1785420210, + null, + null, + null + ], + [ + 1785420211, + null, + null, + null + ], + [ + 1785420212, + null, + null, + null + ], + [ + 1785420213, + null, + null, + null + ], + [ + 1785420214, + null, + null, + null + ], + [ + 1785420215, + null, + null, + null + ], + [ + 1785420216, + null, + null, + null + ], + [ + 1785420217, + null, + null, + null + ], + [ + 1785420218, + null, + null, + null + ], + [ + 1785420219, + null, + null, + null + ], + [ + 1785420220, + null, + null, + null + ], + [ + 1785420221, + null, + null, + null + ], + [ + 1785420222, + null, + null, + null + ], + [ + 1785420223, + null, + null, + null + ], + [ + 1785420224, + null, + null, + null + ], + [ + 1785420225, + null, + null, + null + ], + [ + 1785420226, + null, + null, + null + ], + [ + 1785420227, + null, + null, + null + ], + [ + 1785420228, + null, + null, + null + ], + [ + 1785420229, + null, + null, + null + ], + [ + 1785420230, + null, + null, + null + ], + [ + 1785420231, + null, + null, + null + ], + [ + 1785420232, + null, + null, + null + ], + [ + 1785420233, + null, + null, + null + ], + [ + 1785420234, + null, + null, + null + ], + [ + 1785420235, + null, + null, + null + ], + [ + 1785420236, + null, + null, + null + ], + [ + 1785420237, + null, + null, + null + ], + [ + 1785420238, + null, + null, + null + ], + [ + 1785420239, + null, + null, + null + ], + [ + 1785420240, + null, + null, + null + ], + [ + 1785420241, + null, + null, + null + ], + [ + 1785420242, + null, + null, + null + ], + [ + 1785420243, + null, + null, + null + ], + [ + 1785420244, + null, + null, + null + ], + [ + 1785420245, + null, + null, + null + ], + [ + 1785420246, + null, + null, + null + ], + [ + 1785420247, + null, + null, + null + ], + [ + 1785420248, + null, + null, + null + ], + [ + 1785420249, + null, + null, + null + ], + [ + 1785420250, + null, + null, + null + ], + [ + 1785420251, + null, + null, + null + ], + [ + 1785420252, + null, + null, + null + ], + [ + 1785420253, + null, + null, + null + ], + [ + 1785420254, + null, + null, + null + ], + [ + 1785420255, + null, + null, + null + ], + [ + 1785420256, + null, + null, + null + ], + [ + 1785420257, + null, + null, + null + ], + [ + 1785420258, + null, + null, + null + ], + [ + 1785420259, + null, + null, + null + ], + [ + 1785420260, + null, + null, + null + ], + [ + 1785420261, + null, + null, + null + ], + [ + 1785420262, + null, + null, + null + ], + [ + 1785420263, + null, + null, + null + ], + [ + 1785420264, + null, + null, + null + ], + [ + 1785420265, + null, + null, + null + ], + [ + 1785420266, + null, + null, + null + ], + [ + 1785420267, + null, + null, + null + ], + [ + 1785420268, + null, + null, + null + ], + [ + 1785420269, + null, + null, + null + ], + [ + 1785420270, + null, + null, + null + ], + [ + 1785420271, + null, + null, + null + ], + [ + 1785420272, + null, + null, + null + ], + [ + 1785420273, + null, + null, + null + ], + [ + 1785420274, + null, + null, + null + ], + [ + 1785420275, + null, + null, + null + ], + [ + 1785420276, + null, + null, + null + ], + [ + 1785420277, + null, + null, + null + ], + [ + 1785420278, + null, + null, + null + ], + [ + 1785420279, + null, + null, + null + ], + [ + 1785420280, + null, + null, + null + ], + [ + 1785420281, + null, + null, + null + ], + [ + 1785420282, + null, + null, + null + ], + [ + 1785420283, + null, + null, + null + ], + [ + 1785420284, + null, + null, + null + ], + [ + 1785420286, + null, + null, + null + ], + [ + 1785420287, + null, + null, + null + ], + [ + 1785420288, + null, + null, + null + ], + [ + 1785420289, + null, + null, + null + ], + [ + 1785420290, + null, + null, + null + ], + [ + 1785420291, + null, + null, + null + ], + [ + 1785420292, + null, + null, + null + ], + [ + 1785420293, + null, + null, + null + ], + [ + 1785420294, + null, + null, + null + ], + [ + 1785420295, + null, + null, + null + ], + [ + 1785420296, + null, + null, + null + ], + [ + 1785420297, + null, + null, + null + ], + [ + 1785420298, + null, + null, + null + ], + [ + 1785420299, + null, + null, + null + ], + [ + 1785420300, + null, + null, + null + ], + [ + 1785420301, + null, + null, + null + ], + [ + 1785420302, + null, + null, + null + ], + [ + 1785420303, + null, + null, + null + ], + [ + 1785420304, + null, + null, + null + ], + [ + 1785420305, + null, + null, + null + ], + [ + 1785420306, + null, + null, + null + ], + [ + 1785420307, + null, + null, + null + ], + [ + 1785420308, + null, + null, + null + ], + [ + 1785420309, + null, + null, + null + ], + [ + 1785420310, + null, + null, + null + ], + [ + 1785420311, + null, + null, + null + ], + [ + 1785420312, + null, + null, + null + ], + [ + 1785420313, + null, + null, + null + ], + [ + 1785420314, + null, + null, + null + ], + [ + 1785420315, + null, + null, + null + ], + [ + 1785420316, + null, + null, + null + ], + [ + 1785420317, + null, + null, + null + ], + [ + 1785420318, + null, + null, + null + ], + [ + 1785420319, + null, + null, + null + ], + [ + 1785420320, + null, + null, + null + ], + [ + 1785420321, + null, + null, + null + ], + [ + 1785420322, + null, + null, + null + ], + [ + 1785420323, + null, + null, + null + ], + [ + 1785420324, + null, + null, + null + ], + [ + 1785420325, + null, + null, + null + ], + [ + 1785420326, + null, + null, + null + ], + [ + 1785420327, + null, + null, + null + ], + [ + 1785420328, + null, + null, + null + ], + [ + 1785420329, + null, + null, + null + ], + [ + 1785420330, + null, + null, + null + ], + [ + 1785420331, + null, + null, + null + ], + [ + 1785420332, + null, + null, + null + ], + [ + 1785420333, + null, + null, + null + ], + [ + 1785420334, + null, + null, + null + ], + [ + 1785420335, + null, + null, + null + ], + [ + 1785420336, + null, + null, + null + ], + [ + 1785420337, + null, + null, + null + ], + [ + 1785420338, + null, + null, + null + ], + [ + 1785420339, + null, + null, + null + ], + [ + 1785420340, + null, + null, + null + ], + [ + 1785420341, + null, + null, + null + ], + [ + 1785420342, + null, + null, + null + ], + [ + 1785420343, + null, + null, + null + ], + [ + 1785420344, + null, + null, + null + ], + [ + 1785420345, + null, + null, + null + ], + [ + 1785420346, + null, + null, + null + ], + [ + 1785420347, + null, + null, + null + ], + [ + 1785420348, + null, + null, + null + ], + [ + 1785420349, + null, + null, + null + ], + [ + 1785420350, + null, + null, + null + ], + [ + 1785420351, + null, + null, + null + ], + [ + 1785420352, + null, + null, + null + ], + [ + 1785420353, + null, + null, + null + ], + [ + 1785420354, + null, + null, + null + ], + [ + 1785420355, + null, + null, + null + ], + [ + 1785420356, + null, + null, + null + ], + [ + 1785420357, + null, + null, + null + ], + [ + 1785420358, + null, + null, + null + ], + [ + 1785420359, + null, + null, + null + ], + [ + 1785420360, + null, + null, + null + ], + [ + 1785420361, + null, + null, + null + ], + [ + 1785420362, + null, + null, + null + ], + [ + 1785420363, + null, + null, + null + ], + [ + 1785420364, + null, + null, + null + ], + [ + 1785420365, + null, + null, + null + ], + [ + 1785420366, + null, + null, + null + ], + [ + 1785420367, + null, + null, + null + ], + [ + 1785420368, + null, + null, + null + ], + [ + 1785420369, + null, + null, + null + ], + [ + 1785420370, + null, + null, + null + ], + [ + 1785420371, + null, + null, + null + ], + [ + 1785420373, + null, + null, + null + ], + [ + 1785420374, + null, + null, + null + ], + [ + 1785420375, + null, + null, + null + ], + [ + 1785420376, + null, + null, + null + ], + [ + 1785420377, + null, + null, + null + ], + [ + 1785420378, + null, + null, + null + ], + [ + 1785420379, + null, + null, + null + ], + [ + 1785420380, + null, + null, + null + ], + [ + 1785420381, + null, + null, + null + ], + [ + 1785420382, + null, + null, + null + ], + [ + 1785420383, + null, + null, + null + ], + [ + 1785420384, + null, + null, + null + ], + [ + 1785420385, + null, + null, + null + ], + [ + 1785420386, + null, + null, + null + ], + [ + 1785420387, + null, + null, + null + ], + [ + 1785420388, + null, + null, + null + ], + [ + 1785420389, + null, + null, + null + ], + [ + 1785420390, + null, + null, + null + ], + [ + 1785420391, + null, + null, + null + ], + [ + 1785420392, + null, + null, + null + ], + [ + 1785420393, + null, + null, + null + ], + [ + 1785420394, + null, + null, + null + ], + [ + 1785420395, + null, + null, + null + ], + [ + 1785420396, + null, + null, + null + ], + [ + 1785420397, + null, + null, + null + ], + [ + 1785420398, + null, + null, + null + ], + [ + 1785420399, + null, + null, + null + ], + [ + 1785420400, + null, + null, + null + ], + [ + 1785420401, + null, + null, + null + ], + [ + 1785420402, + null, + null, + null + ], + [ + 1785420403, + null, + null, + null + ], + [ + 1785420404, + null, + null, + null + ], + [ + 1785420405, + null, + null, + null + ], + [ + 1785420406, + null, + null, + null + ], + [ + 1785420407, + null, + null, + null + ], + [ + 1785420408, + null, + null, + null + ], + [ + 1785420409, + null, + null, + null + ], + [ + 1785420410, + null, + null, + null + ], + [ + 1785420411, + null, + null, + null + ], + [ + 1785420412, + null, + null, + null + ], + [ + 1785420413, + null, + null, + null + ], + [ + 1785420414, + null, + null, + null + ], + [ + 1785420415, + null, + null, + null + ], + [ + 1785420416, + null, + null, + null + ], + [ + 1785420417, + null, + null, + null + ], + [ + 1785420418, + null, + null, + null + ], + [ + 1785420419, + null, + null, + null + ], + [ + 1785420420, + null, + null, + null + ], + [ + 1785420421, + null, + null, + null + ], + [ + 1785420422, + null, + null, + null + ], + [ + 1785420423, + null, + null, + null + ], + [ + 1785420424, + null, + null, + null + ], + [ + 1785420425, + null, + null, + null + ], + [ + 1785420426, + null, + null, + null + ], + [ + 1785420427, + null, + null, + null + ], + [ + 1785420428, + null, + null, + null + ], + [ + 1785420429, + null, + null, + null + ], + [ + 1785420430, + null, + null, + null + ], + [ + 1785420431, + null, + null, + null + ], + [ + 1785420432, + null, + null, + null + ], + [ + 1785420433, + null, + null, + null + ], + [ + 1785420434, + null, + null, + null + ], + [ + 1785420435, + null, + null, + null + ], + [ + 1785420436, + null, + null, + null + ], + [ + 1785420437, + null, + null, + null + ], + [ + 1785420438, + null, + null, + null + ], + [ + 1785420439, + null, + null, + null + ], + [ + 1785420440, + null, + null, + null + ], + [ + 1785420441, + null, + null, + null + ], + [ + 1785420442, + null, + null, + null + ], + [ + 1785420443, + null, + null, + null + ], + [ + 1785420444, + null, + null, + null + ], + [ + 1785420445, + null, + null, + null + ], + [ + 1785420446, + null, + null, + null + ], + [ + 1785420447, + null, + null, + null + ], + [ + 1785420448, + null, + null, + null + ], + [ + 1785420449, + null, + null, + null + ], + [ + 1785420450, + null, + null, + null + ], + [ + 1785420451, + null, + null, + null + ], + [ + 1785420452, + null, + null, + null + ], + [ + 1785420453, + null, + null, + null + ], + [ + 1785420454, + null, + null, + null + ], + [ + 1785420455, + null, + null, + null + ], + [ + 1785420456, + null, + null, + null + ], + [ + 1785420457, + null, + null, + null + ], + [ + 1785420458, + null, + null, + null + ], + [ + 1785420459, + null, + null, + null + ], + [ + 1785420461, + null, + null, + null + ], + [ + 1785420462, + null, + null, + null + ], + [ + 1785420463, + null, + null, + null + ], + [ + 1785420464, + null, + null, + null + ], + [ + 1785420465, + null, + null, + null + ], + [ + 1785420466, + null, + null, + null + ], + [ + 1785420467, + null, + null, + null + ], + [ + 1785420468, + null, + null, + null + ], + [ + 1785420469, + null, + null, + null + ], + [ + 1785420470, + null, + null, + null + ], + [ + 1785420471, + null, + null, + null + ], + [ + 1785420472, + null, + null, + null + ], + [ + 1785420473, + null, + null, + null + ], + [ + 1785420474, + null, + null, + null + ], + [ + 1785420475, + null, + null, + null + ], + [ + 1785420476, + null, + null, + null + ], + [ + 1785420477, + null, + null, + null + ], + [ + 1785420478, + null, + null, + null + ], + [ + 1785420479, + null, + null, + null + ], + [ + 1785420480, + null, + null, + null + ], + [ + 1785420481, + null, + null, + null + ], + [ + 1785420482, + null, + null, + null + ], + [ + 1785420483, + null, + null, + null + ], + [ + 1785420484, + null, + null, + null + ], + [ + 1785420485, + null, + null, + null + ], + [ + 1785420486, + null, + null, + null + ], + [ + 1785420487, + null, + null, + null + ], + [ + 1785420488, + null, + null, + null + ], + [ + 1785420489, + null, + null, + null + ], + [ + 1785420490, + null, + null, + null + ], + [ + 1785420491, + null, + null, + null + ], + [ + 1785420492, + null, + null, + null + ], + [ + 1785420493, + null, + null, + null + ], + [ + 1785420494, + null, + null, + null + ], + [ + 1785420495, + null, + null, + null + ], + [ + 1785420496, + null, + null, + null + ], + [ + 1785420497, + null, + null, + null + ], + [ + 1785420498, + null, + null, + null + ], + [ + 1785420499, + null, + null, + null + ], + [ + 1785420500, + null, + null, + null + ], + [ + 1785420501, + null, + null, + null + ], + [ + 1785420502, + null, + null, + null + ], + [ + 1785420503, + null, + null, + null + ], + [ + 1785420504, + null, + null, + null + ], + [ + 1785420505, + null, + null, + null + ], + [ + 1785420506, + null, + null, + null + ], + [ + 1785420507, + null, + null, + null + ], + [ + 1785420508, + null, + null, + null + ], + [ + 1785420509, + null, + null, + null + ], + [ + 1785420510, + null, + null, + null + ], + [ + 1785420511, + null, + null, + null + ], + [ + 1785420512, + null, + null, + null + ], + [ + 1785420513, + null, + null, + null + ], + [ + 1785420514, + null, + null, + null + ], + [ + 1785420515, + null, + null, + null + ], + [ + 1785420516, + null, + null, + null + ], + [ + 1785420517, + null, + null, + null + ], + [ + 1785420518, + null, + null, + null + ], + [ + 1785420519, + null, + null, + null + ], + [ + 1785420520, + null, + null, + null + ], + [ + 1785420521, + null, + null, + null + ], + [ + 1785420522, + null, + null, + null + ], + [ + 1785420523, + null, + null, + null + ], + [ + 1785420524, + null, + null, + null + ], + [ + 1785420525, + null, + null, + null + ], + [ + 1785420526, + null, + null, + null + ], + [ + 1785420527, + null, + null, + null + ], + [ + 1785420528, + null, + null, + null + ], + [ + 1785420529, + null, + null, + null + ], + [ + 1785420530, + null, + null, + null + ], + [ + 1785420531, + null, + null, + null + ], + [ + 1785420532, + null, + null, + null + ], + [ + 1785420533, + null, + null, + null + ], + [ + 1785420534, + null, + null, + null + ], + [ + 1785420535, + null, + null, + null + ], + [ + 1785420536, + null, + null, + null + ], + [ + 1785420537, + null, + null, + null + ], + [ + 1785420538, + null, + null, + null + ], + [ + 1785420539, + null, + null, + null + ], + [ + 1785420540, + null, + null, + null + ], + [ + 1785420541, + null, + null, + null + ], + [ + 1785420542, + null, + null, + null + ], + [ + 1785420543, + null, + null, + null + ], + [ + 1785420544, + null, + null, + null + ], + [ + 1785420545, + null, + null, + null + ], + [ + 1785420546, + null, + null, + null + ], + [ + 1785420547, + null, + null, + null + ], + [ + 1785420548, + null, + null, + null + ], + [ + 1785420550, + null, + null, + null + ], + [ + 1785420551, + null, + null, + null + ], + [ + 1785420552, + null, + null, + null + ], + [ + 1785420553, + null, + null, + null + ], + [ + 1785420554, + null, + null, + null + ], + [ + 1785420555, + null, + null, + null + ], + [ + 1785420556, + null, + null, + null + ], + [ + 1785420557, + null, + null, + null + ], + [ + 1785420558, + null, + null, + null + ], + [ + 1785420559, + null, + null, + null + ], + [ + 1785420560, + null, + null, + null + ], + [ + 1785420561, + null, + null, + null + ], + [ + 1785420562, + null, + null, + null + ], + [ + 1785420563, + null, + null, + null + ], + [ + 1785420564, + null, + null, + null + ], + [ + 1785420565, + null, + null, + null + ], + [ + 1785420566, + null, + null, + null + ], + [ + 1785420567, + null, + null, + null + ], + [ + 1785420568, + null, + null, + null + ], + [ + 1785420569, + null, + null, + null + ], + [ + 1785420570, + null, + null, + null + ], + [ + 1785420571, + null, + null, + null + ], + [ + 1785420572, + null, + null, + null + ], + [ + 1785420573, + null, + null, + null + ], + [ + 1785420574, + null, + null, + null + ], + [ + 1785420575, + null, + null, + null + ], + [ + 1785420576, + null, + null, + null + ], + [ + 1785420577, + null, + null, + null + ], + [ + 1785420578, + null, + null, + null + ], + [ + 1785420579, + null, + null, + null + ], + [ + 1785420580, + null, + null, + null + ], + [ + 1785420581, + null, + null, + null + ], + [ + 1785420582, + null, + null, + null + ], + [ + 1785420583, + null, + null, + null + ], + [ + 1785420584, + null, + null, + null + ], + [ + 1785420585, + null, + null, + null + ], + [ + 1785420586, + null, + null, + null + ], + [ + 1785420587, + null, + null, + null + ], + [ + 1785420588, + null, + null, + null + ], + [ + 1785420589, + null, + null, + null + ], + [ + 1785420590, + null, + null, + null + ], + [ + 1785420591, + null, + null, + null + ], + [ + 1785420592, + null, + null, + null + ], + [ + 1785420593, + null, + null, + null + ], + [ + 1785420594, + null, + null, + null + ], + [ + 1785420595, + null, + null, + null + ], + [ + 1785420596, + null, + null, + null + ], + [ + 1785420597, + null, + null, + null + ], + [ + 1785420598, + null, + null, + null + ], + [ + 1785420599, + null, + null, + null + ], + [ + 1785420600, + null, + null, + null + ], + [ + 1785420601, + null, + null, + null + ], + [ + 1785420602, + null, + null, + null + ] + ], + "temp_c": null, + "arm_clock_hz": null, + "throttling_detected": false + }, + "warnings": [ + "governor is 'unavailable', not 'performance' (need root on Linux, or unsupported on macOS)", + "core pinning unavailable (no taskset/numactl) \u2014 results will be noisier", + "NOT RPi5-baseline-grade: host is not a Raspberry Pi (model='', os=macos); CPU governor is 'unavailable', not 'performance'; benchmark was not pinned to a dedicated core (no taskset); build flags targeted 'apple-m4-pro', not cortex-a76" + ], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3161, + "timed_iters": 15803, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 15820.22, + "samples": 79015, + "median": 16000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 15000.0, + "q3": 16000.0, + "min": 13000.0, + "max": 55000.0, + "mean": 15747.44, + "stddev": 943.09, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 2745, + "timed_iters": 13726, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18212.99, + "samples": 68630, + "median": 19000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 18000.0, + "q3": 19000.0, + "min": 16000.0, + "max": 79000.0, + "mean": 18542.82, + "stddev": 1002.14, + "ops_per_sec": 52631.58, + "per_rep_median": [ + 19000.0, + 19000.0, + 19000.0, + 19000.0, + 19000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 35000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 10113, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4943.96, + "samples": 100000, + "median": 5000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 5000.0, + "q3": 5000.0, + "min": 4000.0, + "max": 63000.0, + "mean": 4956.68, + "stddev": 515.8, + "ops_per_sec": 200000.0, + "per_rep_median": [ + 5000.0, + 5000.0, + 5000.0, + 5000.0, + 5000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 9126, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5478.94, + "samples": 100000, + "median": 5000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 5000.0, + "q3": 6000.0, + "min": 4000.0, + "max": 46000.0, + "mean": 5494.02, + "stddev": 652.13, + "ops_per_sec": 200000.0, + "per_rep_median": [ + 5000.0, + 5000.0, + 5000.0, + 5000.0, + 5000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 7763, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6440.73, + "samples": 100000, + "median": 6000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 6000.0, + "q3": 7000.0, + "min": 5000.0, + "max": 57000.0, + "mean": 6480.64, + "stddev": 767.84, + "ops_per_sec": 166666.67, + "per_rep_median": [ + 6000.0, + 6000.0, + 6000.0, + 6000.0, + 6000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 16000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5996, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8339.44, + "samples": 100000, + "median": 8000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 8000.0, + "q3": 9000.0, + "min": 7000.0, + "max": 44000.0, + "mean": 8327.74, + "stddev": 776.01, + "ops_per_sec": 125000.0, + "per_rep_median": [ + 8000.0, + 8000.0, + 8000.0, + 8000.0, + 8000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5825, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8583.64, + "samples": 100000, + "median": 9000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 8000.0, + "q3": 9000.0, + "min": 7000.0, + "max": 67000.0, + "mean": 8780.17, + "stddev": 783.6, + "ops_per_sec": 111111.11, + "per_rep_median": [ + 9000.0, + 9000.0, + 9000.0, + 9000.0, + 9000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4872, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10262.03, + "samples": 100000, + "median": 10000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 10000.0, + "q3": 11000.0, + "min": 9000.0, + "max": 62000.0, + "mean": 10202.19, + "stddev": 918.83, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0, + 10000.0, + 10000.0, + 10000.0, + 10000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 27000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4018, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12445.18, + "samples": 100000, + "median": 12000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 10000.0, + "max": 39000.0, + "mean": 12418.06, + "stddev": 960.51, + "ops_per_sec": 83333.33, + "per_rep_median": [ + 12000.0, + 12000.0, + 12000.0, + 12000.0, + 12000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 3820, + "timed_iters": 19100, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13089.13, + "samples": 95500, + "median": 13000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 13000.0, + "q3": 14000.0, + "min": 11000.0, + "max": 1096000.0, + "mean": 13224.19, + "stddev": 3748.73, + "ops_per_sec": 76923.08, + "per_rep_median": [ + 13000.0, + 13000.0, + 13000.0, + 13000.0, + 13000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 3238, + "timed_iters": 16192, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 15440.16, + "samples": 80960, + "median": 15000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 15000.0, + "q3": 16000.0, + "min": 13000.0, + "max": 57000.0, + "mean": 15372.16, + "stddev": 1066.84, + "ops_per_sec": 66666.67, + "per_rep_median": [ + 15000.0, + 15000.0, + 15000.0, + 15000.0, + 15000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 40000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 209888000.0, + "samples": 150, + "median": 131410000.0, + "mad": 41603000.0, + "iqr": 82767500.0, + "q1": 90880250.0, + "q3": 173647750.0, + "min": 50622000.0, + "max": 691656000.0, + "mean": 152978426.67, + "stddev": 115068559.68, + "ops_per_sec": 7.61, + "per_rep_median": [ + 131680000.0, + 111557500.0, + 132558000.0, + 91862500.0, + 132571500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 3726, + "timed_iters": 18632, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13417.83, + "samples": 93160, + "median": 12000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 12000.0, + "q3": 14000.0, + "min": 10000.0, + "max": 41000.0, + "mean": 13466.47, + "stddev": 2682.93, + "ops_per_sec": 83333.33, + "per_rep_median": [ + 12000.0, + 12000.0, + 12000.0, + 12000.0, + 12000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12392666.67, + "samples": 150, + "median": 12173000.0, + "mad": 110000.0, + "iqr": 216500.0, + "q1": 12071500.0, + "q3": 12288000.0, + "min": 11996000.0, + "max": 13220000.0, + "mean": 12194733.33, + "stddev": 166804.38, + "ops_per_sec": 82.15, + "per_rep_median": [ + 12147500.0, + 12193000.0, + 12132000.0, + 12257500.0, + 12078500.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 143595000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 592664000.0, + "samples": 150, + "median": 313489500.0, + "mad": 141285500.0, + "iqr": 419627000.0, + "q1": 172720250.0, + "q3": 592347250.0, + "min": 169907000.0, + "max": 1721175000.0, + "mean": 457321413.33, + "stddev": 340206178.28, + "ops_per_sec": 3.19, + "per_rep_median": [ + 453394500.0, + 313881500.0, + 451402000.0, + 310677500.0, + 311724500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1590, + "timed_iters": 7951, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31440.86, + "samples": 39755, + "median": 29000.0, + "mad": 5000.0, + "iqr": 11000.0, + "q1": 24000.0, + "q3": 35000.0, + "min": 21000.0, + "max": 144000.0, + "mean": 31762.75, + "stddev": 10330.07, + "ops_per_sec": 34482.76, + "per_rep_median": [ + 29000.0, + 29000.0, + 29000.0, + 29000.0, + 29000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 28027666.67, + "samples": 150, + "median": 27859500.0, + "mad": 104000.0, + "iqr": 242000.0, + "q1": 27774750.0, + "q3": 28016750.0, + "min": 27723000.0, + "max": 28758000.0, + "mean": 27918633.33, + "stddev": 193023.54, + "ops_per_sec": 35.89, + "per_rep_median": [ + 27871000.0, + 27850500.0, + 27863000.0, + 27811000.0, + 27909500.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 341378000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 172103000.0, + "samples": 150, + "median": 172920500.0, + "mad": 889000.0, + "iqr": 2125750.0, + "q1": 172178500.0, + "q3": 174304250.0, + "min": 169369000.0, + "max": 191728000.0, + "mean": 173687686.67, + "stddev": 2788218.24, + "ops_per_sec": 5.78, + "per_rep_median": [ + 171993000.0, + 175091500.0, + 173419500.0, + 172797000.0, + 172841500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1761, + "timed_iters": 8803, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 28399.12, + "samples": 44015, + "median": 25000.0, + "mad": 5000.0, + "iqr": 11000.0, + "q1": 21000.0, + "q3": 32000.0, + "min": 18000.0, + "max": 326000.0, + "mean": 28366.76, + "stddev": 10608.27, + "ops_per_sec": 40000.0, + "per_rep_median": [ + 25000.0, + 25000.0, + 25000.0, + 25000.0, + 25000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 28225000.0, + "samples": 150, + "median": 28201500.0, + "mad": 230500.0, + "iqr": 575250.0, + "q1": 28006500.0, + "q3": 28581750.0, + "min": 27734000.0, + "max": 29741000.0, + "mean": 28325773.33, + "stddev": 420731.42, + "ops_per_sec": 35.46, + "per_rep_median": [ + 28200500.0, + 28134000.0, + 28261000.0, + 28154500.0, + 28260000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 201147000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1374907000.0, + "samples": 150, + "median": 1036491000.0, + "mad": 668292500.0, + "iqr": 1343190000.0, + "q1": 371256750.0, + "q3": 1714446750.0, + "min": 365886000.0, + "max": 5405800000.0, + "mean": 1306379820.0, + "stddev": 1064975164.2, + "ops_per_sec": 0.96, + "per_rep_median": [ + 705956000.0, + 1707812000.0, + 874986000.0, + 1037181500.0, + 706668000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 837, + "timed_iters": 4184, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59747.55, + "samples": 20920, + "median": 53000.0, + "mad": 9000.0, + "iqr": 22000.0, + "q1": 45000.0, + "q3": 67000.0, + "min": 39000.0, + "max": 340000.0, + "mean": 60605.21, + "stddev": 20569.91, + "ops_per_sec": 18867.92, + "per_rep_median": [ + 52000.0, + 52000.0, + 53000.0, + 53000.0, + 53000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54418000.0, + "samples": 150, + "median": 54393500.0, + "mad": 340000.0, + "iqr": 703500.0, + "q1": 54107000.0, + "q3": 54810500.0, + "min": 53537000.0, + "max": 67888000.0, + "mean": 54616786.67, + "stddev": 1320315.09, + "ops_per_sec": 18.38, + "per_rep_median": [ + 54236000.0, + 54433000.0, + 54427000.0, + 54379500.0, + 54730000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1090937500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 342167000.0, + "samples": 150, + "median": 655462000.0, + "mad": 313333000.0, + "iqr": 1240296750.0, + "q1": 343019500.0, + "q3": 1583316250.0, + "min": 340972000.0, + "max": 5308889000.0, + "mean": 1074018333.33, + "stddev": 907598985.14, + "ops_per_sec": 1.53, + "per_rep_median": [ + 497796000.0, + 654648500.0, + 966244000.0, + 809707500.0, + 810103500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 574, + "timed_iters": 2868, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 87170.25, + "samples": 14340, + "median": 83000.0, + "mad": 6000.0, + "iqr": 15000.0, + "q1": 77000.0, + "q3": 92000.0, + "min": 68000.0, + "max": 210000.0, + "mean": 87096.79, + "stddev": 14479.0, + "ops_per_sec": 12048.19, + "per_rep_median": [ + 83000.0, + 83000.0, + 83000.0, + 83000.0, + 83000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 52806000.0, + "samples": 150, + "median": 52452500.0, + "mad": 288500.0, + "iqr": 598000.0, + "q1": 52206750.0, + "q3": 52804750.0, + "min": 51810000.0, + "max": 55401000.0, + "mean": 52547853.33, + "stddev": 506820.53, + "ops_per_sec": 19.06, + "per_rep_median": [ + 52496500.0, + 52384000.0, + 52444000.0, + 52625500.0, + 52294500.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 707997500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 451201000.0, + "samples": 150, + "median": 1291255500.0, + "mad": 837109500.0, + "iqr": 1675725500.0, + "q1": 454402000.0, + "q3": 2130127500.0, + "min": 448982000.0, + "max": 5909002000.0, + "mean": 1593648446.67, + "stddev": 1253438514.71, + "ops_per_sec": 0.77, + "per_rep_median": [ + 871361500.0, + 1713193000.0, + 869985000.0, + 1501671000.0, + 890622000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 958, + "timed_iters": 4792, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 52168.13, + "samples": 23960, + "median": 48000.0, + "mad": 7000.0, + "iqr": 16000.0, + "q1": 41000.0, + "q3": 57000.0, + "min": 36000.0, + "max": 195000.0, + "mean": 52123.08, + "stddev": 14774.26, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 68373000.0, + "samples": 150, + "median": 67347000.0, + "mad": 496000.0, + "iqr": 1133750.0, + "q1": 66960500.0, + "q3": 68094250.0, + "min": 66013000.0, + "max": 73287000.0, + "mean": 67916693.33, + "stddev": 1562845.51, + "ops_per_sec": 14.85, + "per_rep_median": [ + 67632000.0, + 67099000.0, + 67655000.0, + 67366000.0, + 67231000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1358650500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 306, + "timed_iters": 1531, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 163301.96, + "samples": 7655, + "median": 164000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 160000.0, + "q3": 165000.0, + "min": 146000.0, + "max": 406000.0, + "mean": 163022.73, + "stddev": 6820.48, + "ops_per_sec": 6097.56, + "per_rep_median": [ + 164000.0, + 164000.0, + 164000.0, + 164000.0, + 164000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 242, + "timed_iters": 1209, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 206815.69, + "samples": 6045, + "median": 210000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 205000.0, + "q3": 213000.0, + "min": 187000.0, + "max": 679000.0, + "mean": 210153.68, + "stddev": 14919.42, + "ops_per_sec": 4761.9, + "per_rep_median": [ + 210000.0, + 211000.0, + 210000.0, + 209000.0, + 209000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 250, + "timed_iters": 1248, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 200301.96, + "samples": 6240, + "median": 202000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 198000.0, + "q3": 204000.0, + "min": 181000.0, + "max": 404000.0, + "mean": 201277.88, + "stddev": 7454.9, + "ops_per_sec": 4950.5, + "per_rep_median": [ + 202000.0, + 202000.0, + 203000.0, + 202000.0, + 203000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 576000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 180, + "timed_iters": 900, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 277889.76, + "samples": 4500, + "median": 277000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 275000.0, + "q3": 279000.0, + "min": 247000.0, + "max": 324000.0, + "mean": 276754.0, + "stddev": 5444.84, + "ops_per_sec": 3610.11, + "per_rep_median": [ + 277000.0, + 278000.0, + 277000.0, + 277000.0, + 277000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 141, + "timed_iters": 705, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 354858.27, + "samples": 3525, + "median": 363000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 359000.0, + "q3": 365000.0, + "min": 325000.0, + "max": 509000.0, + "mean": 362300.43, + "stddev": 9322.4, + "ops_per_sec": 2754.82, + "per_rep_median": [ + 362000.0, + 365000.0, + 362000.0, + 362000.0, + 361000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 145, + "timed_iters": 725, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 344590.55, + "samples": 3625, + "median": 346000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 342000.0, + "q3": 347000.0, + "min": 310000.0, + "max": 447000.0, + "mean": 344770.48, + "stddev": 7823.4, + "ops_per_sec": 2890.17, + "per_rep_median": [ + 346000.0, + 345000.0, + 344000.0, + 347000.0, + 346000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 986000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 103, + "timed_iters": 516, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 484158.73, + "samples": 2580, + "median": 487000.0, + "mad": 3000.0, + "iqr": 7000.0, + "q1": 483000.0, + "q3": 490000.0, + "min": 438000.0, + "max": 966000.0, + "mean": 486555.43, + "stddev": 14848.22, + "ops_per_sec": 2053.39, + "per_rep_median": [ + 488000.0, + 487000.0, + 488000.0, + 484000.0, + 486000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 79, + "timed_iters": 396, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 630666.67, + "samples": 1980, + "median": 629000.0, + "mad": 4000.0, + "iqr": 7000.0, + "q1": 626000.0, + "q3": 633000.0, + "min": 566000.0, + "max": 740000.0, + "mean": 628296.46, + "stddev": 12842.12, + "ops_per_sec": 1589.83, + "per_rep_median": [ + 631000.0, + 628000.0, + 630000.0, + 628000.0, + 629000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 82, + "timed_iters": 410, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 609746.03, + "samples": 2050, + "median": 608000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 604000.0, + "q3": 612000.0, + "min": 547000.0, + "max": 786000.0, + "mean": 608243.41, + "stddev": 17643.5, + "ops_per_sec": 1644.74, + "per_rep_median": [ + 607000.0, + 608000.0, + 609000.0, + 608000.0, + 610000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1724000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-640-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 60, + "timed_iters": 300, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 832111.11, + "samples": 1500, + "median": 828000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 826000.0, + "q3": 832000.0, + "min": 743000.0, + "max": 923000.0, + "mean": 829054.67, + "stddev": 14820.37, + "ops_per_sec": 1207.73, + "per_rep_median": [ + 827000.0, + 829000.0, + 829000.0, + 829000.0, + 828000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 53, + "timed_iters": 265, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 942031.75, + "samples": 1325, + "median": 928000.0, + "mad": 3000.0, + "iqr": 7000.0, + "q1": 926000.0, + "q3": 933000.0, + "min": 834000.0, + "max": 1091000.0, + "mean": 928517.74, + "stddev": 17844.0, + "ops_per_sec": 1077.59, + "per_rep_median": [ + 929000.0, + 928000.0, + 929000.0, + 927000.0, + 928000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 54, + "timed_iters": 270, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 925460.32, + "samples": 1350, + "median": 928000.0, + "mad": 7000.0, + "iqr": 14000.0, + "q1": 923000.0, + "q3": 937000.0, + "min": 827000.0, + "max": 1294000.0, + "mean": 932492.59, + "stddev": 30898.69, + "ops_per_sec": 1077.59, + "per_rep_median": [ + 927000.0, + 928000.0, + 927000.0, + 928000.0, + 937000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 2684000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-976-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 138, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1813548.39, + "samples": 690, + "median": 1791000.0, + "mad": 8000.0, + "iqr": 21000.0, + "q1": 1785000.0, + "q3": 1806000.0, + "min": 1655000.0, + "max": 2022000.0, + "mean": 1796837.68, + "stddev": 33302.45, + "ops_per_sec": 558.35, + "per_rep_median": [ + 1796000.0, + 1812000.0, + 1790000.0, + 1789000.0, + 1789000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 25, + "timed_iters": 123, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2028733.33, + "samples": 615, + "median": 2017000.0, + "mad": 4000.0, + "iqr": 10000.0, + "q1": 2013000.0, + "q3": 2023000.0, + "min": 1895000.0, + "max": 2574000.0, + "mean": 2020261.79, + "stddev": 29527.96, + "ops_per_sec": 495.79, + "per_rep_median": [ + 2018000.0, + 2017000.0, + 2018000.0, + 2017000.0, + 2017000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 25, + "timed_iters": 125, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2003333.33, + "samples": 625, + "median": 2003000.0, + "mad": 7000.0, + "iqr": 15000.0, + "q1": 1998000.0, + "q3": 2013000.0, + "min": 1896000.0, + "max": 2120000.0, + "mean": 2006193.6, + "stddev": 26036.82, + "ops_per_sec": 499.25, + "per_rep_median": [ + 2002000.0, + 2001000.0, + 2002000.0, + 2005000.0, + 2007000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 5811000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-1344-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 76, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3278600.0, + "samples": 380, + "median": 3259000.0, + "mad": 12000.0, + "iqr": 27250.0, + "q1": 3250000.0, + "q3": 3277250.0, + "min": 3096000.0, + "max": 3502000.0, + "mean": 3266192.11, + "stddev": 43227.42, + "ops_per_sec": 306.84, + "per_rep_median": [ + 3262500.0, + 3266500.0, + 3255000.0, + 3254000.0, + 3260000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 68, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3678800.0, + "samples": 340, + "median": 3661500.0, + "mad": 11500.0, + "iqr": 24000.0, + "q1": 3653000.0, + "q3": 3677000.0, + "min": 3474000.0, + "max": 3892000.0, + "mean": 3663282.35, + "stddev": 50581.72, + "ops_per_sec": 273.11, + "per_rep_median": [ + 3662000.0, + 3658000.0, + 3664000.0, + 3665000.0, + 3659500.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 69, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3639133.33, + "samples": 345, + "median": 3647000.0, + "mad": 8000.0, + "iqr": 17000.0, + "q1": 3641000.0, + "q3": 3658000.0, + "min": 3505000.0, + "max": 5417000.0, + "mean": 3656605.8, + "stddev": 102660.2, + "ops_per_sec": 274.2, + "per_rep_median": [ + 3647000.0, + 3644000.0, + 3645000.0, + 3648000.0, + 3651000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 10567500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4214, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11865.93, + "samples": 100000, + "median": 8000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 8000.0, + "q3": 9000.0, + "min": 7000.0, + "max": 183000.0, + "mean": 8380.09, + "stddev": 1255.12, + "ops_per_sec": 125000.0, + "per_rep_median": [ + 8000.0, + 8000.0, + 8000.0, + 8000.0, + 8000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 2460, + "timed_iters": 12301, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20323.4, + "samples": 61505, + "median": 20000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 20000.0, + "q3": 21000.0, + "min": 18000.0, + "max": 645000.0, + "mean": 20408.78, + "stddev": 4563.48, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 28000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4257, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11745.79, + "samples": 100000, + "median": 12000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 11000.0, + "q3": 12000.0, + "min": 9000.0, + "max": 162000.0, + "mean": 11726.18, + "stddev": 1442.91, + "ops_per_sec": 83333.33, + "per_rep_median": [ + 12000.0, + 12000.0, + 12000.0, + 12000.0, + 12000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5040, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9920.39, + "samples": 100000, + "median": 10000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 9000.0, + "q3": 10000.0, + "min": 8000.0, + "max": 206000.0, + "mean": 9949.23, + "stddev": 1306.59, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0, + 10000.0, + 10000.0, + 10000.0, + 10000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4258, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11741.64, + "samples": 100000, + "median": 12000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 11000.0, + "q3": 12000.0, + "min": 10000.0, + "max": 157000.0, + "mean": 11644.34, + "stddev": 1387.86, + "ops_per_sec": 83333.33, + "per_rep_median": [ + 12000.0, + 12000.0, + 12000.0, + 12000.0, + 12000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 34000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2514, + "timed_iters": 12571, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19887.64, + "samples": 62855, + "median": 20000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 19000.0, + "q3": 21000.0, + "min": 17000.0, + "max": 265000.0, + "mean": 19972.03, + "stddev": 2663.31, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2922, + "timed_iters": 14610, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17111.87, + "samples": 73050, + "median": 17000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 16000.0, + "q3": 17000.0, + "min": 14000.0, + "max": 937000.0, + "mean": 16966.09, + "stddev": 4313.35, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 17000.0, + 17000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2526, + "timed_iters": 12632, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19791.4, + "samples": 63160, + "median": 20000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 19000.0, + "q3": 20000.0, + "min": 17000.0, + "max": 49000.0, + "mean": 19628.04, + "stddev": 1124.84, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 57000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1610, + "timed_iters": 8049, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31061.58, + "samples": 40245, + "median": 32000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 29000.0, + "q3": 32000.0, + "min": 27000.0, + "max": 115000.0, + "mean": 31169.71, + "stddev": 2040.35, + "ops_per_sec": 31250.0, + "per_rep_median": [ + 32000.0, + 32000.0, + 32000.0, + 32000.0, + 32000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1918, + "timed_iters": 9591, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26065.95, + "samples": 47955, + "median": 27000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 26000.0, + "q3": 27000.0, + "min": 23000.0, + "max": 81000.0, + "mean": 26424.25, + "stddev": 1612.27, + "ops_per_sec": 37037.04, + "per_rep_median": [ + 27000.0, + 27000.0, + 27000.0, + 27000.0, + 27000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1682, + "timed_iters": 8408, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 29732.16, + "samples": 42040, + "median": 30000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 29000.0, + "q3": 31000.0, + "min": 27000.0, + "max": 128000.0, + "mean": 30000.33, + "stddev": 2043.68, + "ops_per_sec": 33333.33, + "per_rep_median": [ + 30000.0, + 30000.0, + 30000.0, + 30000.0, + 30000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 89000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 7962, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6279.45, + "samples": 100000, + "median": 6000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 5000.0, + "q3": 6000.0, + "min": 4000.0, + "max": 52000.0, + "mean": 5541.09, + "stddev": 672.31, + "ops_per_sec": 166666.67, + "per_rep_median": [ + 6000.0, + 6000.0, + 6000.0, + 6000.0, + 5000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 4057, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12324.3, + "samples": 100000, + "median": 12000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 10000.0, + "max": 1516000.0, + "mean": 12263.26, + "stddev": 4907.88, + "ops_per_sec": 83333.33, + "per_rep_median": [ + 12000.0, + 12000.0, + 12000.0, + 12000.0, + 12000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 18000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "secp256r1", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 6823, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7328.21, + "samples": 100000, + "median": 7000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 7000.0, + "q3": 7000.0, + "min": 5000.0, + "max": 65000.0, + "mean": 7172.96, + "stddev": 763.71, + "ops_per_sec": 142857.14, + "per_rep_median": [ + 7000.0, + 7000.0, + 7000.0, + 7000.0, + 7000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 2366, + "timed_iters": 11829, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21135.32, + "samples": 59145, + "median": 21000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 21000.0, + "q3": 22000.0, + "min": 18000.0, + "max": 635000.0, + "mean": 21219.71, + "stddev": 2889.08, + "ops_per_sec": 47619.05, + "per_rep_median": [ + 21000.0, + 21000.0, + 21000.0, + 21000.0, + 21000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 28000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 6757, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7400.0, + "samples": 100000, + "median": 7000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 7000.0, + "q3": 8000.0, + "min": 5000.0, + "max": 61000.0, + "mean": 7348.21, + "stddev": 912.8, + "ops_per_sec": 142857.14, + "per_rep_median": [ + 7000.0, + 7000.0, + 7000.0, + 7000.0, + 7000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5948, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8406.35, + "samples": 100000, + "median": 8000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 8000.0, + "q3": 9000.0, + "min": 6000.0, + "max": 121000.0, + "mean": 8390.2, + "stddev": 883.64, + "ops_per_sec": 125000.0, + "per_rep_median": [ + 8000.0, + 8000.0, + 8000.0, + 8000.0, + 8000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 6484, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7711.11, + "samples": 100000, + "median": 8000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 7000.0, + "q3": 8000.0, + "min": 6000.0, + "max": 96000.0, + "mean": 7648.46, + "stddev": 742.88, + "ops_per_sec": 125000.0, + "per_rep_median": [ + 8000.0, + 8000.0, + 8000.0, + 8000.0, + 8000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 23000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5121, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9764.1, + "samples": 100000, + "median": 10000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 9000.0, + "q3": 10000.0, + "min": 8000.0, + "max": 75000.0, + "mean": 9621.91, + "stddev": 779.05, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0, + 10000.0, + 10000.0, + 10000.0, + 10000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4485, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11149.21, + "samples": 100000, + "median": 11000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 11000.0, + "q3": 12000.0, + "min": 9000.0, + "max": 56000.0, + "mean": 11169.89, + "stddev": 915.19, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4635, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10787.55, + "samples": 100000, + "median": 11000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 11000.0, + "q3": 11000.0, + "min": 9000.0, + "max": 45000.0, + "mean": 10889.37, + "stddev": 741.79, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 32000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3076, + "timed_iters": 15379, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16255.5, + "samples": 76895, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 14000.0, + "max": 51000.0, + "mean": 16002.48, + "stddev": 695.4, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 3115, + "timed_iters": 15576, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16050.32, + "samples": 77880, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 14000.0, + "max": 112000.0, + "mean": 16123.41, + "stddev": 922.23, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1238, + "timed_iters": 6189, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 40396.87, + "samples": 30945, + "median": 40000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 40000.0, + "q3": 40000.0, + "min": 35000.0, + "max": 119000.0, + "mean": 40027.95, + "stddev": 1491.99, + "ops_per_sec": 25000.0, + "per_rep_median": [ + 40000.0, + 40000.0, + 40000.0, + 40000.0, + 40000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 72000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1541, + "timed_iters": 7706, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32443.79, + "samples": 38530, + "median": 32000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 32000.0, + "q3": 33000.0, + "min": 28000.0, + "max": 80000.0, + "mean": 32306.9, + "stddev": 2062.36, + "ops_per_sec": 31250.0, + "per_rep_median": [ + 32000.0, + 32000.0, + 32000.0, + 32000.0, + 32000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 327, + "timed_iters": 1633, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 153129.41, + "samples": 8165, + "median": 115000.0, + "mad": 54000.0, + "iqr": 107000.0, + "q1": 85000.0, + "q3": 192000.0, + "min": 54000.0, + "max": 950000.0, + "mean": 148950.64, + "stddev": 98331.22, + "ops_per_sec": 8695.65, + "per_rep_median": [ + 116000.0, + 115000.0, + 115000.0, + 116000.0, + 115000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1417, + "timed_iters": 7084, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 35288.37, + "samples": 35420, + "median": 35000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 35000.0, + "q3": 36000.0, + "min": 31000.0, + "max": 85000.0, + "mean": 35440.06, + "stddev": 1190.82, + "ops_per_sec": 28571.43, + "per_rep_median": [ + 35000.0, + 35000.0, + 35000.0, + 35000.0, + 36000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 182000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 779, + "timed_iters": 3895, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 64178.08, + "samples": 19475, + "median": 64000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 64000.0, + "q3": 65000.0, + "min": 56000.0, + "max": 158000.0, + "mean": 64187.98, + "stddev": 2947.83, + "ops_per_sec": 15625.0, + "per_rep_median": [ + 64000.0, + 64000.0, + 64000.0, + 64000.0, + 64000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 188, + "timed_iters": 939, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 266330.71, + "samples": 4695, + "median": 199000.0, + "mad": 80000.0, + "iqr": 188000.0, + "q1": 127000.0, + "q3": 315000.0, + "min": 81000.0, + "max": 1394000.0, + "mean": 248982.11, + "stddev": 173554.52, + "ops_per_sec": 5025.13, + "per_rep_median": [ + 199000.0, + 193000.0, + 199000.0, + 199000.0, + 207000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 822, + "timed_iters": 4112, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 60798.43, + "samples": 20560, + "median": 61000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 60000.0, + "q3": 61000.0, + "min": 54000.0, + "max": 174000.0, + "mean": 60740.52, + "stddev": 2625.56, + "ops_per_sec": 16393.44, + "per_rep_median": [ + 61000.0, + 61000.0, + 61000.0, + 61000.0, + 61000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 324000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 553, + "timed_iters": 2766, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 90371.82, + "samples": 13830, + "median": 90000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 89000.0, + "q3": 90000.0, + "min": 79000.0, + "max": 203000.0, + "mean": 89860.81, + "stddev": 3818.83, + "ops_per_sec": 11111.11, + "per_rep_median": [ + 90000.0, + 90000.0, + 90000.0, + 90000.0, + 90000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 177, + "timed_iters": 885, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 282354.33, + "samples": 4425, + "median": 250000.0, + "mad": 107000.0, + "iqr": 222000.0, + "q1": 148000.0, + "q3": 370000.0, + "min": 125000.0, + "max": 1787000.0, + "mean": 298817.63, + "stddev": 186348.5, + "ops_per_sec": 4000.0, + "per_rep_median": [ + 250000.0, + 243000.0, + 250000.0, + 251000.0, + 251000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 533, + "timed_iters": 2665, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 93819.96, + "samples": 13325, + "median": 94000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 94000.0, + "q3": 95000.0, + "min": 83000.0, + "max": 817000.0, + "mean": 94320.53, + "stddev": 8725.58, + "ops_per_sec": 10638.3, + "per_rep_median": [ + 94000.0, + 95000.0, + 94000.0, + 94000.0, + 94000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 434000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 79, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3145066.67, + "samples": 395, + "median": 2778000.0, + "mad": 376000.0, + "iqr": 874000.0, + "q1": 2473500.0, + "q3": 3347500.0, + "min": 2221000.0, + "max": 7049000.0, + "mean": 3023913.92, + "stddev": 756623.52, + "ops_per_sec": 359.97, + "per_rep_median": [ + 2817000.0, + 2725000.0, + 2776000.0, + 2961000.0, + 2698000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 479, + "timed_iters": 2396, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 104348.34, + "samples": 11980, + "median": 104000.0, + "mad": 3000.0, + "iqr": 5000.0, + "q1": 101000.0, + "q3": 106000.0, + "min": 89000.0, + "max": 196000.0, + "mean": 103778.96, + "stddev": 4940.1, + "ops_per_sec": 9615.38, + "per_rep_median": [ + 105000.0, + 104000.0, + 104000.0, + 105000.0, + 105000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 3125, + "timed_iters": 15624, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16000.98, + "samples": 78120, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 14000.0, + "max": 44000.0, + "mean": 16011.97, + "stddev": 1136.97, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 2898000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 6, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8929857.14, + "samples": 150, + "median": 8446500.0, + "mad": 723500.0, + "iqr": 1816000.0, + "q1": 7905500.0, + "q3": 9721500.0, + "min": 7418000.0, + "max": 20055000.0, + "mean": 9359573.33, + "stddev": 2398520.73, + "ops_per_sec": 118.39, + "per_rep_median": [ + 8326000.0, + 8755500.0, + 8543000.0, + 8404000.0, + 8407000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 244, + "timed_iters": 1219, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 205133.33, + "samples": 6095, + "median": 208000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 204000.0, + "q3": 212000.0, + "min": 183000.0, + "max": 724000.0, + "mean": 208989.01, + "stddev": 13808.71, + "ops_per_sec": 4807.69, + "per_rep_median": [ + 207000.0, + 208000.0, + 213000.0, + 208000.0, + 208000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1563, + "timed_iters": 7816, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31987.29, + "samples": 39080, + "median": 32000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 32000.0, + "q3": 32000.0, + "min": 28000.0, + "max": 130000.0, + "mean": 31982.19, + "stddev": 1554.95, + "ops_per_sec": 31250.0, + "per_rep_median": [ + 32000.0, + 32000.0, + 32000.0, + 32000.0, + 32000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 8686500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 104, + "timed_iters": 518, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 482619.05, + "samples": 2590, + "median": 484000.0, + "mad": 3000.0, + "iqr": 10000.0, + "q1": 477000.0, + "q3": 487000.0, + "min": 433000.0, + "max": 589000.0, + "mean": 480602.32, + "stddev": 12913.06, + "ops_per_sec": 2066.12, + "per_rep_median": [ + 484000.0, + 484000.0, + 484000.0, + 483000.0, + 484000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11371333.33, + "samples": 150, + "median": 11345500.0, + "mad": 19500.0, + "iqr": 37000.0, + "q1": 11328000.0, + "q3": 11365000.0, + "min": 10527000.0, + "max": 11778000.0, + "mean": 11308500.0, + "stddev": 158426.44, + "ops_per_sec": 88.14, + "per_rep_median": [ + 11244000.0, + 11352500.0, + 11353500.0, + 11346000.0, + 11355000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 75, + "timed_iters": 377, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 662666.67, + "samples": 1885, + "median": 676000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 675000.0, + "q3": 678000.0, + "min": 605000.0, + "max": 1101000.0, + "mean": 676692.84, + "stddev": 15974.42, + "ops_per_sec": 1479.29, + "per_rep_median": [ + 677000.0, + 676000.0, + 677000.0, + 675000.0, + 676000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 12505500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31056000.0, + "samples": 150, + "median": 30971000.0, + "mad": 174500.0, + "iqr": 511500.0, + "q1": 30556500.0, + "q3": 31068000.0, + "min": 29683000.0, + "max": 93580000.0, + "mean": 31644573.33, + "stddev": 6655172.86, + "ops_per_sec": 32.29, + "per_rep_median": [ + 30987500.0, + 30824500.0, + 30844000.0, + 30805000.0, + 31023500.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 235450000.0, + "samples": 150, + "median": 233588500.0, + "mad": 1540000.0, + "iqr": 3342250.0, + "q1": 232242750.0, + "q3": 235585000.0, + "min": 229211000.0, + "max": 274167000.0, + "mean": 234357560.0, + "stddev": 4466189.2, + "ops_per_sec": 4.28, + "per_rep_median": [ + 233886500.0, + 232998000.0, + 233632500.0, + 236764000.0, + 232431000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 226, + "timed_iters": 1131, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 221019.61, + "samples": 5655, + "median": 226000.0, + "mad": 4000.0, + "iqr": 10000.0, + "q1": 217000.0, + "q3": 227000.0, + "min": 202000.0, + "max": 381000.0, + "mean": 222685.41, + "stddev": 10181.27, + "ops_per_sec": 4424.78, + "per_rep_median": [ + 226000.0, + 226000.0, + 227000.0, + 224000.0, + 226000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 264785500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 363, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 688412.7, + "samples": 1815, + "median": 694000.0, + "mad": 11000.0, + "iqr": 25000.0, + "q1": 678000.0, + "q3": 703000.0, + "min": 627000.0, + "max": 2164000.0, + "mean": 690593.94, + "stddev": 44910.7, + "ops_per_sec": 1440.92, + "per_rep_median": [ + 691000.0, + 700000.0, + 694000.0, + 681000.0, + 701000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 3, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18409000.0, + "samples": 150, + "median": 18301000.0, + "mad": 270500.0, + "iqr": 570000.0, + "q1": 17962750.0, + "q3": 18532750.0, + "min": 17399000.0, + "max": 24260000.0, + "mean": 18389840.0, + "stddev": 863558.25, + "ops_per_sec": 54.64, + "per_rep_median": [ + 18279500.0, + 18239500.0, + 18222500.0, + 18407000.0, + 18330000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 51, + "timed_iters": 257, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 973841.27, + "samples": 1285, + "median": 998000.0, + "mad": 11000.0, + "iqr": 27000.0, + "q1": 977000.0, + "q3": 1004000.0, + "min": 896000.0, + "max": 1259000.0, + "mean": 989368.87, + "stddev": 31309.84, + "ops_per_sec": 1002.0, + "per_rep_median": [ + 989000.0, + 991000.0, + 991000.0, + 1001000.0, + 1000000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 19993000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 137, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1829064.52, + "samples": 685, + "median": 1853000.0, + "mad": 14000.0, + "iqr": 34000.0, + "q1": 1831000.0, + "q3": 1865000.0, + "min": 1665000.0, + "max": 2252000.0, + "mean": 1842383.94, + "stddev": 50333.33, + "ops_per_sec": 539.67, + "per_rep_median": [ + 1859000.0, + 1853000.0, + 1848000.0, + 1855000.0, + 1856000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37953000.0, + "samples": 150, + "median": 37961000.0, + "mad": 402000.0, + "iqr": 857000.0, + "q1": 37417750.0, + "q3": 38274750.0, + "min": 36452000.0, + "max": 61993000.0, + "mean": 38221580.0, + "stddev": 2417970.04, + "ops_per_sec": 26.34, + "per_rep_median": [ + 38122000.0, + 37920000.0, + 38061000.0, + 37809000.0, + 37885500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 48, + "timed_iters": 239, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1046161.29, + "samples": 1195, + "median": 1017000.0, + "mad": 13000.0, + "iqr": 31000.0, + "q1": 995000.0, + "q3": 1026000.0, + "min": 915000.0, + "max": 2281000.0, + "mean": 1010189.96, + "stddev": 50590.08, + "ops_per_sec": 983.28, + "per_rep_median": [ + 1006000.0, + 1021000.0, + 1023000.0, + 1013000.0, + 1022000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 40831000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 119, + "timed_iters": 596, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 419307.09, + "samples": 2980, + "median": 401000.0, + "mad": 8000.0, + "iqr": 16000.0, + "q1": 394000.0, + "q3": 410000.0, + "min": 350000.0, + "max": 833000.0, + "mean": 402512.42, + "stddev": 20963.41, + "ops_per_sec": 2493.77, + "per_rep_median": [ + 396000.0, + 404000.0, + 399500.0, + 405000.0, + 402000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9434571.43, + "samples": 150, + "median": 9571000.0, + "mad": 121000.0, + "iqr": 247500.0, + "q1": 9460000.0, + "q3": 9707500.0, + "min": 9123000.0, + "max": 10068000.0, + "mean": 9584273.33, + "stddev": 181542.05, + "ops_per_sec": 104.48, + "per_rep_median": [ + 9464000.0, + 9612000.0, + 9623000.0, + 9723000.0, + 9515000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 89, + "timed_iters": 443, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 564666.67, + "samples": 2215, + "median": 572000.0, + "mad": 9000.0, + "iqr": 18000.0, + "q1": 565000.0, + "q3": 583000.0, + "min": 509000.0, + "max": 922000.0, + "mean": 574339.5, + "stddev": 22213.05, + "ops_per_sec": 1748.25, + "per_rep_median": [ + 574000.0, + 567000.0, + 577000.0, + 572000.0, + 573000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 10544000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25690666.67, + "samples": 150, + "median": 25623500.0, + "mad": 254000.0, + "iqr": 497500.0, + "q1": 25417750.0, + "q3": 25915250.0, + "min": 24665000.0, + "max": 27056000.0, + "mean": 25682580.0, + "stddev": 400214.63, + "ops_per_sec": 39.03, + "per_rep_median": [ + 25662500.0, + 25598500.0, + 25623500.0, + 25899000.0, + 25439000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 194108000.0, + "samples": 150, + "median": 196122000.0, + "mad": 1549500.0, + "iqr": 3077500.0, + "q1": 194572750.0, + "q3": 197650250.0, + "min": 190890000.0, + "max": 208852000.0, + "mean": 196340780.0, + "stddev": 2574472.67, + "ops_per_sec": 5.1, + "per_rep_median": [ + 195724000.0, + 195853500.0, + 195824000.0, + 195986500.0, + 197532500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 247, + "timed_iters": 1235, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 202356.86, + "samples": 6175, + "median": 201000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 197000.0, + "q3": 205000.0, + "min": 177000.0, + "max": 488000.0, + "mean": 201130.85, + "stddev": 9996.97, + "ops_per_sec": 4975.12, + "per_rep_median": [ + 201000.0, + 200000.0, + 202000.0, + 202000.0, + 200000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 221946500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 85, + "timed_iters": 424, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 589619.05, + "samples": 2120, + "median": 585000.0, + "mad": 10000.0, + "iqr": 20000.0, + "q1": 576000.0, + "q3": 596000.0, + "min": 518000.0, + "max": 1068000.0, + "mean": 587949.06, + "stddev": 32417.44, + "ops_per_sec": 1709.4, + "per_rep_median": [ + 588000.0, + 592000.0, + 582000.0, + 576000.0, + 594000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 3, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 15900333.33, + "samples": 150, + "median": 15740500.0, + "mad": 170000.0, + "iqr": 358500.0, + "q1": 15603000.0, + "q3": 15961500.0, + "min": 15145000.0, + "max": 16838000.0, + "mean": 15785173.33, + "stddev": 271853.69, + "ops_per_sec": 63.53, + "per_rep_median": [ + 15657500.0, + 15677000.0, + 15746000.0, + 15903500.0, + 15712500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 60, + "timed_iters": 299, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 835746.03, + "samples": 1495, + "median": 852000.0, + "mad": 22000.0, + "iqr": 43000.0, + "q1": 831000.0, + "q3": 874000.0, + "min": 746000.0, + "max": 3544000.0, + "mean": 857191.3, + "stddev": 94816.78, + "ops_per_sec": 1173.71, + "per_rep_median": [ + 847000.0, + 847000.0, + 869000.0, + 859000.0, + 837000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 17177500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 31, + "timed_iters": 155, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1617548.39, + "samples": 775, + "median": 1592000.0, + "mad": 49000.0, + "iqr": 97500.0, + "q1": 1542500.0, + "q3": 1640000.0, + "min": 1371000.0, + "max": 4548000.0, + "mean": 1610065.81, + "stddev": 209188.25, + "ops_per_sec": 628.14, + "per_rep_median": [ + 1567000.0, + 1586000.0, + 1631000.0, + 1583000.0, + 1604000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32340000.0, + "samples": 150, + "median": 32635000.0, + "mad": 325500.0, + "iqr": 638000.0, + "q1": 32363250.0, + "q3": 33001250.0, + "min": 31600000.0, + "max": 38454000.0, + "mean": 32718253.33, + "stddev": 720490.35, + "ops_per_sec": 30.64, + "per_rep_median": [ + 32628500.0, + 32603500.0, + 32617000.0, + 32667500.0, + 32635000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 57, + "timed_iters": 285, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 878634.92, + "samples": 1425, + "median": 862000.0, + "mad": 8000.0, + "iqr": 15000.0, + "q1": 855000.0, + "q3": 870000.0, + "min": 776000.0, + "max": 943000.0, + "mean": 862281.4, + "stddev": 15915.47, + "ops_per_sec": 1160.09, + "per_rep_median": [ + 876000.0, + 865000.0, + 856000.0, + 855000.0, + 861000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 35089000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5959, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8391.21, + "samples": 100000, + "median": 8000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 8000.0, + "q3": 9000.0, + "min": 7000.0, + "max": 59000.0, + "mean": 8427.79, + "stddev": 799.9, + "ops_per_sec": 125000.0, + "per_rep_median": [ + 8000.0, + 8000.0, + 8000.0, + 8000.0, + 8000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 6201, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8063.74, + "samples": 100000, + "median": 8000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 8000.0, + "q3": 8000.0, + "min": 7000.0, + "max": 100000.0, + "mean": 7990.91, + "stddev": 727.92, + "ops_per_sec": 125000.0, + "per_rep_median": [ + 8000.0, + 8000.0, + 8000.0, + 8000.0, + 8000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2502, + "timed_iters": 12512, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19981.44, + "samples": 62560, + "median": 20000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 20000.0, + "q3": 20000.0, + "min": 17000.0, + "max": 110000.0, + "mean": 20062.72, + "stddev": 1572.73, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 2693, + "timed_iters": 13464, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18568.15, + "samples": 67320, + "median": 18000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 17000.0, + "q3": 18000.0, + "min": 15000.0, + "max": 107000.0, + "mean": 17834.97, + "stddev": 1656.79, + "ops_per_sec": 55555.56, + "per_rep_median": [ + 18000.0, + 18000.0, + 18000.0, + 18000.0, + 18000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 36000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 934, + "timed_iters": 4668, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 53552.3, + "samples": 23340, + "median": 54000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 53000.0, + "q3": 54000.0, + "min": 47000.0, + "max": 93000.0, + "mean": 53467.1, + "stddev": 2885.24, + "ops_per_sec": 18518.52, + "per_rep_median": [ + 54000.0, + 54000.0, + 54000.0, + 54000.0, + 54000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 396, + "timed_iters": 1980, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 126286.27, + "samples": 9900, + "median": 92000.0, + "mad": 52000.0, + "iqr": 105000.0, + "q1": 65000.0, + "q3": 170000.0, + "min": 35000.0, + "max": 912000.0, + "mean": 126957.98, + "stddev": 100379.87, + "ops_per_sec": 10869.57, + "per_rep_median": [ + 92000.0, + 92000.0, + 92000.0, + 92000.0, + 92000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1486, + "timed_iters": 7431, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33644.18, + "samples": 37155, + "median": 34000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 34000.0, + "q3": 34000.0, + "min": 30000.0, + "max": 675000.0, + "mean": 33852.29, + "stddev": 6317.15, + "ops_per_sec": 29411.76, + "per_rep_median": [ + 34000.0, + 34000.0, + 34000.0, + 34000.0, + 34000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 3281, + "timed_iters": 16406, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 15238.4, + "samples": 82030, + "median": 15000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 15000.0, + "q3": 15000.0, + "min": 13000.0, + "max": 180000.0, + "mean": 15213.03, + "stddev": 1377.96, + "ops_per_sec": 66666.67, + "per_rep_median": [ + 15000.0, + 15000.0, + 15000.0, + 15000.0, + 15000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 180000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 534, + "timed_iters": 2671, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 93596.87, + "samples": 13355, + "median": 94000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 92000.0, + "q3": 94000.0, + "min": 83000.0, + "max": 268000.0, + "mean": 93103.41, + "stddev": 3772.43, + "ops_per_sec": 10638.3, + "per_rep_median": [ + 94000.0, + 94000.0, + 94000.0, + 94000.0, + 94000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 231, + "timed_iters": 1154, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 216650.98, + "samples": 5770, + "median": 162000.0, + "mad": 79000.0, + "iqr": 184000.0, + "q1": 93000.0, + "q3": 277000.0, + "min": 49000.0, + "max": 2754000.0, + "mean": 210160.66, + "stddev": 183149.62, + "ops_per_sec": 6172.84, + "per_rep_median": [ + 162000.0, + 166000.0, + 164000.0, + 156000.0, + 154000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 887, + "timed_iters": 4437, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56344.09, + "samples": 22185, + "median": 56000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 55000.0, + "q3": 57000.0, + "min": 50000.0, + "max": 209000.0, + "mean": 55768.67, + "stddev": 3619.84, + "ops_per_sec": 17857.14, + "per_rep_median": [ + 56000.0, + 56000.0, + 56000.0, + 56000.0, + 56000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 2280, + "timed_iters": 11398, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21933.07, + "samples": 56990, + "median": 22000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 22000.0, + "q3": 22000.0, + "min": 19000.0, + "max": 77000.0, + "mean": 21886.72, + "stddev": 1305.93, + "ops_per_sec": 45454.55, + "per_rep_median": [ + 22000.0, + 22000.0, + 22000.0, + 22000.0, + 22000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 312000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 378, + "timed_iters": 1892, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 132109.8, + "samples": 9460, + "median": 133000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 129000.0, + "q3": 134000.0, + "min": 119000.0, + "max": 787000.0, + "mean": 132663.64, + "stddev": 10704.08, + "ops_per_sec": 7518.8, + "per_rep_median": [ + 133000.0, + 133000.0, + 134000.0, + 134000.0, + 133000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 210, + "timed_iters": 1049, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 238425.2, + "samples": 5245, + "median": 177000.0, + "mad": 100000.0, + "iqr": 169000.0, + "q1": 113000.0, + "q3": 282000.0, + "min": 66000.0, + "max": 1600000.0, + "mean": 222259.1, + "stddev": 172044.14, + "ops_per_sec": 5649.72, + "per_rep_median": [ + 178000.0, + 177000.0, + 177000.0, + 178000.0, + 177000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 557, + "timed_iters": 2786, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 89737.77, + "samples": 13930, + "median": 91000.0, + "mad": 1000.0, + "iqr": 5000.0, + "q1": 87000.0, + "q3": 92000.0, + "min": 81000.0, + "max": 226000.0, + "mean": 90130.15, + "stddev": 5219.89, + "ops_per_sec": 10989.01, + "per_rep_median": [ + 91000.0, + 91000.0, + 91000.0, + 91000.0, + 91000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 1593, + "timed_iters": 7964, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31391.01, + "samples": 39820, + "median": 31000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 31000.0, + "q3": 32000.0, + "min": 27000.0, + "max": 10762000.0, + "mean": 31857.11, + "stddev": 54190.95, + "ops_per_sec": 32258.06, + "per_rep_median": [ + 31000.0, + 31000.0, + 31000.0, + 31000.0, + 32000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 401000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 322, + "timed_iters": 1608, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 155450.98, + "samples": 8040, + "median": 155000.0, + "mad": 6000.0, + "iqr": 19000.0, + "q1": 149000.0, + "q3": 168000.0, + "min": 147000.0, + "max": 405000.0, + "mean": 159165.92, + "stddev": 13634.53, + "ops_per_sec": 6451.61, + "per_rep_median": [ + 166000.0, + 168000.0, + 152000.0, + 150000.0, + 150000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3463866.67, + "samples": 360, + "median": 3526000.0, + "mad": 41500.0, + "iqr": 79500.0, + "q1": 3491750.0, + "q3": 3571250.0, + "min": 3418000.0, + "max": 4638000.0, + "mean": 3538002.78, + "stddev": 93434.1, + "ops_per_sec": 283.61, + "per_rep_median": [ + 3561500.0, + 3515500.0, + 3538000.0, + 3532000.0, + 3504000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 239, + "timed_iters": 1196, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 208984.31, + "samples": 5980, + "median": 209000.0, + "mad": 6000.0, + "iqr": 14000.0, + "q1": 204000.0, + "q3": 218000.0, + "min": 202000.0, + "max": 271000.0, + "mean": 212212.21, + "stddev": 9987.36, + "ops_per_sec": 4784.69, + "per_rep_median": [ + 209000.0, + 207000.0, + 210000.0, + 209000.0, + 210000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 234, + "timed_iters": 1172, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 213227.45, + "samples": 5860, + "median": 209000.0, + "mad": 6000.0, + "iqr": 14000.0, + "q1": 204000.0, + "q3": 218000.0, + "min": 202000.0, + "max": 312000.0, + "mean": 211739.42, + "stddev": 9029.93, + "ops_per_sec": 4784.69, + "per_rep_median": [ + 208000.0, + 211000.0, + 210000.0, + 209000.0, + 209000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 3890000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9665142.86, + "samples": 150, + "median": 9684000.0, + "mad": 101000.0, + "iqr": 217500.0, + "q1": 9600250.0, + "q3": 9817750.0, + "min": 9375000.0, + "max": 10949000.0, + "mean": 9756680.0, + "stddev": 257207.86, + "ops_per_sec": 103.26, + "per_rep_median": [ + 9760500.0, + 10054000.0, + 9673500.0, + 9680500.0, + 9614000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 74142000.0, + "samples": 150, + "median": 73328500.0, + "mad": 448500.0, + "iqr": 871750.0, + "q1": 72957000.0, + "q3": 73828750.0, + "min": 71862000.0, + "max": 75770000.0, + "mean": 73418633.33, + "stddev": 733882.11, + "ops_per_sec": 13.64, + "per_rep_median": [ + 73662000.0, + 73433500.0, + 73415000.0, + 73180000.0, + 73021000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 716, + "timed_iters": 3578, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69874.76, + "samples": 17890, + "median": 67000.0, + "mad": 0.0, + "iqr": 6000.0, + "q1": 67000.0, + "q3": 73000.0, + "min": 66000.0, + "max": 156000.0, + "mean": 69638.12, + "stddev": 3815.58, + "ops_per_sec": 14925.37, + "per_rep_median": [ + 67000.0, + 67000.0, + 67000.0, + 68000.0, + 67000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 717, + "timed_iters": 3583, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69780.82, + "samples": 17915, + "median": 67000.0, + "mad": 0.0, + "iqr": 4000.0, + "q1": 67000.0, + "q3": 71000.0, + "min": 66000.0, + "max": 137000.0, + "mean": 69352.44, + "stddev": 3836.99, + "ops_per_sec": 14925.37, + "per_rep_median": [ + 67000.0, + 67000.0, + 67000.0, + 67000.0, + 67000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 83079500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 226, + "timed_iters": 1129, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 221466.67, + "samples": 5645, + "median": 220000.0, + "mad": 4000.0, + "iqr": 12000.0, + "q1": 216000.0, + "q3": 228000.0, + "min": 215000.0, + "max": 328000.0, + "mean": 222992.91, + "stddev": 9150.64, + "ops_per_sec": 4545.45, + "per_rep_median": [ + 220000.0, + 219000.0, + 219000.0, + 223000.0, + 220000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 41, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6146714.29, + "samples": 205, + "median": 6108000.0, + "mad": 52000.0, + "iqr": 108000.0, + "q1": 6046000.0, + "q3": 6154000.0, + "min": 5877000.0, + "max": 6927000.0, + "mean": 6108141.46, + "stddev": 129332.73, + "ops_per_sec": 163.72, + "per_rep_median": [ + 6126000.0, + 6059000.0, + 6143000.0, + 6079000.0, + 6117000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 153, + "timed_iters": 765, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 326850.39, + "samples": 3825, + "median": 326000.0, + "mad": 9000.0, + "iqr": 17000.0, + "q1": 318000.0, + "q3": 335000.0, + "min": 314000.0, + "max": 1113000.0, + "mean": 329767.84, + "stddev": 21523.52, + "ops_per_sec": 3067.48, + "per_rep_median": [ + 324000.0, + 326000.0, + 327000.0, + 322000.0, + 330000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 147, + "timed_iters": 735, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 340338.58, + "samples": 3675, + "median": 324000.0, + "mad": 8000.0, + "iqr": 19000.0, + "q1": 317000.0, + "q3": 336000.0, + "min": 314000.0, + "max": 535000.0, + "mean": 329231.84, + "stddev": 16412.47, + "ops_per_sec": 3086.42, + "per_rep_median": [ + 322000.0, + 323000.0, + 325000.0, + 323000.0, + 329000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 6654000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 84, + "timed_iters": 420, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 595857.14, + "samples": 2100, + "median": 595000.0, + "mad": 9000.0, + "iqr": 21000.0, + "q1": 582000.0, + "q3": 603000.0, + "min": 557000.0, + "max": 840000.0, + "mean": 594131.9, + "stddev": 21829.15, + "ops_per_sec": 1680.67, + "per_rep_median": [ + 597000.0, + 597000.0, + 592000.0, + 596000.0, + 594000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12780333.33, + "samples": 150, + "median": 12662000.0, + "mad": 120000.0, + "iqr": 255500.0, + "q1": 12504750.0, + "q3": 12760250.0, + "min": 12147000.0, + "max": 13510000.0, + "mean": 12633533.33, + "stddev": 219637.21, + "ops_per_sec": 78.98, + "per_rep_median": [ + 12682500.0, + 12633000.0, + 12705000.0, + 12601000.0, + 12734000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 151, + "timed_iters": 753, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 331952.76, + "samples": 3765, + "median": 332000.0, + "mad": 9000.0, + "iqr": 19000.0, + "q1": 322000.0, + "q3": 341000.0, + "min": 315000.0, + "max": 430000.0, + "mean": 332290.84, + "stddev": 12067.17, + "ops_per_sec": 3012.05, + "per_rep_median": [ + 329000.0, + 329000.0, + 336000.0, + 331000.0, + 334000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 150, + "timed_iters": 752, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 332417.32, + "samples": 3760, + "median": 333000.0, + "mad": 10000.0, + "iqr": 20000.0, + "q1": 323000.0, + "q3": 343000.0, + "min": 315000.0, + "max": 691000.0, + "mean": 334817.55, + "stddev": 16951.45, + "ops_per_sec": 3003.0, + "per_rep_median": [ + 332000.0, + 336000.0, + 334000.0, + 331000.0, + 334000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 13589000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8816, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5671.71, + "samples": 100000, + "median": 6000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 5000.0, + "q3": 6000.0, + "min": 4000.0, + "max": 29000.0, + "mean": 5565.43, + "stddev": 585.87, + "ops_per_sec": 166666.67, + "per_rep_median": [ + 6000.0, + 6000.0, + 6000.0, + 6000.0, + 6000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 12186, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4103.16, + "samples": 100000, + "median": 4000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 4000.0, + "q3": 4000.0, + "min": 3000.0, + "max": 25000.0, + "mean": 4121.86, + "stddev": 497.49, + "ops_per_sec": 250000.0, + "per_rep_median": [ + 4000.0, + 4000.0, + 4000.0, + 4000.0, + 4000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2757, + "timed_iters": 13786, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18133.85, + "samples": 68930, + "median": 18000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 18000.0, + "q3": 19000.0, + "min": 16000.0, + "max": 129000.0, + "mean": 18373.58, + "stddev": 1183.71, + "ops_per_sec": 55555.56, + "per_rep_median": [ + 18000.0, + 18000.0, + 18000.0, + 18000.0, + 18000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 28000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3484, + "timed_iters": 17419, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 14352.38, + "samples": 87095, + "median": 15000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 14000.0, + "q3": 15000.0, + "min": 12000.0, + "max": 101000.0, + "mean": 14438.73, + "stddev": 1009.63, + "ops_per_sec": 66666.67, + "per_rep_median": [ + 15000.0, + 15000.0, + 15000.0, + 15000.0, + 15000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1182, + "timed_iters": 5910, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 42300.1, + "samples": 29550, + "median": 33000.0, + "mad": 13000.0, + "iqr": 27000.0, + "q1": 24000.0, + "q3": 51000.0, + "min": 17000.0, + "max": 306000.0, + "mean": 40993.87, + "stddev": 24344.51, + "ops_per_sec": 30303.03, + "per_rep_median": [ + 33000.0, + 33000.0, + 33000.0, + 33000.0, + 34000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 4179, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11965.81, + "samples": 100000, + "median": 12000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 10000.0, + "max": 65000.0, + "mean": 12165.27, + "stddev": 1159.0, + "ops_per_sec": 83333.33, + "per_rep_median": [ + 12000.0, + 12000.0, + 12000.0, + 12000.0, + 12000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 60000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2114, + "timed_iters": 10570, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23652.66, + "samples": 52850, + "median": 24000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 22000.0, + "q3": 24000.0, + "min": 20000.0, + "max": 68000.0, + "mean": 23677.62, + "stddev": 1375.09, + "ops_per_sec": 41666.67, + "per_rep_median": [ + 24000.0, + 24000.0, + 24000.0, + 24000.0, + 24000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 796, + "timed_iters": 3980, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 62819.96, + "samples": 19900, + "median": 52000.0, + "mad": 18000.0, + "iqr": 40000.0, + "q1": 37000.0, + "q3": 77000.0, + "min": 26000.0, + "max": 396000.0, + "mean": 62709.1, + "stddev": 37116.55, + "ops_per_sec": 19230.77, + "per_rep_median": [ + 52000.0, + 52000.0, + 52500.0, + 52000.0, + 52000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2510, + "timed_iters": 12548, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19923.79, + "samples": 62740, + "median": 20000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 19000.0, + "q3": 21000.0, + "min": 18000.0, + "max": 1106000.0, + "mean": 20247.74, + "stddev": 6498.66, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 96000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1347, + "timed_iters": 6736, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37111.44, + "samples": 33680, + "median": 37000.0, + "mad": 1000.0, + "iqr": 4000.0, + "q1": 34000.0, + "q3": 38000.0, + "min": 32000.0, + "max": 143000.0, + "mean": 37092.73, + "stddev": 3893.22, + "ops_per_sec": 27027.03, + "per_rep_median": [ + 37000.0, + 37000.0, + 37000.0, + 37000.0, + 37000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 626, + "timed_iters": 3132, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 79812.13, + "samples": 15660, + "median": 69000.0, + "mad": 21000.0, + "iqr": 44000.0, + "q1": 52000.0, + "q3": 96000.0, + "min": 41000.0, + "max": 1060000.0, + "mean": 81012.45, + "stddev": 42378.72, + "ops_per_sec": 14492.75, + "per_rep_median": [ + 69000.0, + 70000.0, + 68000.0, + 69500.0, + 68000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1556, + "timed_iters": 7779, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32135.87, + "samples": 38895, + "median": 33000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 31000.0, + "q3": 33000.0, + "min": 29000.0, + "max": 150000.0, + "mean": 32632.19, + "stddev": 2917.27, + "ops_per_sec": 30303.03, + "per_rep_median": [ + 33000.0, + 33000.0, + 33000.0, + 33000.0, + 33000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 139000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 284000.0, + "p95": 302000.0, + "min": 254000.0, + "max": 445000.0, + "mean": 283915.0, + "stddev": 14097.9 + }, + "handshakes_per_sec": 3521.1, + "bytes_on_wire": { + "client_to_server": 297, + "server_to_client": 1212, + "total": 1509 + }, + "client_hello_bytes": 217, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 166000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 40000.0, + "subtotal_ns": 80000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 366000.0, + "p95": 404000.0, + "min": 328000.0, + "max": 545000.0, + "mean": 370450.0, + "stddev": 19679.9 + }, + "handshakes_per_sec": 2732.2, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 2300, + "total": 3773 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 193000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 40000.0, + "subtotal_ns": 80000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 375000.0, + "p95": 402000.0, + "min": 340000.0, + "max": 566000.0, + "mean": 376992.0, + "stddev": 19228.7 + }, + "handshakes_per_sec": 2666.7, + "bytes_on_wire": { + "client_to_server": 1506, + "server_to_client": 2333, + "total": 3839 + }, + "client_hello_bytes": 1426, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 40000.0, + "subtotal_ns": 80000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 261000.0, + "p95": 274000.0, + "min": 235000.0, + "max": 334000.0, + "mean": 260068.0, + "stddev": 10243.5 + }, + "handshakes_per_sec": 3831.4, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 1948, + "total": 3005 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 112000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 40000.0, + "subtotal_ns": 80000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 286000.0, + "p95": 299000.0, + "min": 257000.0, + "max": 851000.0, + "mean": 285440.0, + "stddev": 20967.0 + }, + "handshakes_per_sec": 3496.5, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 2268, + "total": 3709 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 123000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 40000.0, + "subtotal_ns": 80000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 317000.0, + "p95": 332000.0, + "min": 286000.0, + "max": 405000.0, + "mean": 316809.0, + "stddev": 10915.4 + }, + "handshakes_per_sec": 3154.6, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 2748, + "total": 4573 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 136000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 40000.0, + "subtotal_ns": 80000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 566000.0, + "p95": 954550.0, + "min": 425000.0, + "max": 1498000.0, + "mean": 618331.0, + "stddev": 157313.3 + }, + "handshakes_per_sec": 1766.8, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 8318, + "total": 9791 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 282000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 762500.0, + "p95": 1392650.0, + "min": 524000.0, + "max": 2512000.0, + "mean": 839178.0, + "stddev": 282331.6 + }, + "handshakes_per_sec": 1311.5, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 10736, + "total": 12209 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 418000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 912000.0, + "p95": 1634050.0, + "min": 674000.0, + "max": 2725000.0, + "mean": 1007128.0, + "stddev": 305839.2 + }, + "handshakes_per_sec": 1096.5, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 14012, + "total": 15485 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 535000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 462000.0, + "p95": 823050.0, + "min": 337000.0, + "max": 1841000.0, + "mean": 519895.0, + "stddev": 171547.9 + }, + "handshakes_per_sec": 2164.5, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 7966, + "total": 9023 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 201000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 657500.0, + "p95": 1353050.0, + "min": 431000.0, + "max": 2475000.0, + "mean": 738563.0, + "stddev": 298189.6 + }, + "handshakes_per_sec": 1520.9, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 10384, + "total": 11441 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 337000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 811000.0, + "p95": 1534050.0, + "min": 567000.0, + "max": 2888000.0, + "mean": 896141.0, + "stddev": 310008.7 + }, + "handshakes_per_sec": 1233.0, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 13660, + "total": 14717 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 454000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 496500.0, + "p95": 895150.0, + "min": 360000.0, + "max": 2125000.0, + "mean": 553576.0, + "stddev": 176252.8 + }, + "handshakes_per_sec": 2014.1, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 8286, + "total": 9727 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 212000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 684000.0, + "p95": 1327350.0, + "min": 446000.0, + "max": 2585000.0, + "mean": 756716.0, + "stddev": 285449.0 + }, + "handshakes_per_sec": 1462.0, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 10704, + "total": 12145 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 348000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 835000.0, + "p95": 1561050.0, + "min": 615000.0, + "max": 3487000.0, + "mean": 920837.0, + "stddev": 328614.0 + }, + "handshakes_per_sec": 1197.6, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 13980, + "total": 15421 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 465000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 519000.0, + "p95": 922050.0, + "min": 388000.0, + "max": 1943000.0, + "mean": 577831.0, + "stddev": 168033.4 + }, + "handshakes_per_sec": 1926.8, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 8766, + "total": 10591 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 225000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 715000.0, + "p95": 1467150.0, + "min": 478000.0, + "max": 2593000.0, + "mean": 795093.0, + "stddev": 304171.2 + }, + "handshakes_per_sec": 1398.6, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 11184, + "total": 13009 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 361000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 868000.0, + "p95": 1637750.0, + "min": 622000.0, + "max": 3656000.0, + "mean": 965031.0, + "stddev": 341617.1 + }, + "handshakes_per_sec": 1152.1, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 14460, + "total": 16285 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 478000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 571000.0, + "p95": 1007200.0, + "min": 431000.0, + "max": 1553000.0, + "mean": 631257.0, + "stddev": 174000.1 + }, + "handshakes_per_sec": 1751.3, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 8316, + "total": 9865 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 282000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 769000.0, + "p95": 1458350.0, + "min": 537000.0, + "max": 2584000.0, + "mean": 863066.0, + "stddev": 304964.3 + }, + "handshakes_per_sec": 1300.4, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 10734, + "total": 12283 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 418000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 920000.0, + "p95": 1639050.0, + "min": 666000.0, + "max": 2903000.0, + "mean": 999034.0, + "stddev": 300851.9 + }, + "handshakes_per_sec": 1087.0, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 14010, + "total": 15559 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 535000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 814000.0, + "p95": 826000.0, + "min": 745000.0, + "max": 995000.0, + "mean": 813110.0, + "stddev": 15618.5 + }, + "handshakes_per_sec": 1228.5, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 4363, + "total": 5912 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 233000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 11430000.0, + "p95": 11845150.0, + "min": 10744000.0, + "max": 23184000.0, + "mean": 11480896.0, + "stddev": 607896.0 + }, + "handshakes_per_sec": 87.5, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 36417, + "total": 37966 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 10812000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19000.0, + "subtotal_ns": 38000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 9571000.0, + "subtotal_ns": 9571000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 572000.0, + "subtotal_ns": 1144000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 615500.0, + "p95": 1085800.0, + "min": 444000.0, + "max": 2607000.0, + "mean": 681969.0, + "stddev": 223643.7 + }, + "handshakes_per_sec": 1624.7, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 8349, + "total": 9931 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 782000.0, + "p95": 1416050.0, + "min": 532000.0, + "max": 2527000.0, + "mean": 856239.0, + "stddev": 286613.8 + }, + "handshakes_per_sec": 1278.8, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 10767, + "total": 12349 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 933000.0, + "p95": 1662500.0, + "min": 685000.0, + "max": 3565000.0, + "mean": 1030490.0, + "stddev": 343026.2 + }, + "handshakes_per_sec": 1071.8, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 14043, + "total": 15625 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 828000.0, + "p95": 858000.0, + "min": 752000.0, + "max": 2514000.0, + "mean": 831596.0, + "stddev": 65557.3 + }, + "handshakes_per_sec": 1207.7, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 4394, + "total": 5976 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 11406000.0, + "p95": 11762050.0, + "min": 10767000.0, + "max": 13137000.0, + "mean": 11405178.0, + "stddev": 227987.9 + }, + "handshakes_per_sec": 87.7, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 36450, + "total": 38032 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 9571000.0, + "subtotal_ns": 9571000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 572000.0, + "subtotal_ns": 1144000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 470000.0, + "p95": 877450.0, + "min": 341000.0, + "max": 1475000.0, + "mean": 529856.0, + "stddev": 167890.1 + }, + "handshakes_per_sec": 2127.7, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 7964, + "total": 9097 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 201000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 666000.0, + "p95": 1314150.0, + "min": 450000.0, + "max": 3837000.0, + "mean": 749322.0, + "stddev": 314944.1 + }, + "handshakes_per_sec": 1501.5, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 10382, + "total": 11515 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 337000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 813000.0, + "p95": 1532100.0, + "min": 572000.0, + "max": 2635000.0, + "mean": 893858.0, + "stddev": 307312.3 + }, + "handshakes_per_sec": 1230.0, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 13658, + "total": 14791 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 454000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 711000.0, + "p95": 731050.0, + "min": 645000.0, + "max": 1843000.0, + "mean": 713195.0, + "stddev": 50144.3 + }, + "handshakes_per_sec": 1406.5, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 4011, + "total": 5144 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 152000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 11317500.0, + "p95": 11800350.0, + "min": 10640000.0, + "max": 69321000.0, + "mean": 11477659.0, + "stddev": 2395262.6 + }, + "handshakes_per_sec": 88.4, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 36065, + "total": 37198 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 10731000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 5000.0, + "subtotal_ns": 5000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 6000.0, + "subtotal_ns": 6000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 9571000.0, + "subtotal_ns": 9571000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 572000.0, + "subtotal_ns": 1144000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 494000.0, + "p95": 945150.0, + "min": 363000.0, + "max": 1757000.0, + "mean": 556594.0, + "stddev": 188222.7 + }, + "handshakes_per_sec": 2024.3, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 8284, + "total": 9801 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 212000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 689500.0, + "p95": 1314000.0, + "min": 463000.0, + "max": 2641000.0, + "mean": 748424.0, + "stddev": 268562.3 + }, + "handshakes_per_sec": 1450.3, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 10702, + "total": 12219 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 348000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 843000.0, + "p95": 1536350.0, + "min": 599000.0, + "max": 3087000.0, + "mean": 913240.0, + "stddev": 291939.1 + }, + "handshakes_per_sec": 1186.2, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 13978, + "total": 15495 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 465000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 737000.0, + "p95": 757000.0, + "min": 675000.0, + "max": 1053000.0, + "mean": 737264.0, + "stddev": 19393.1 + }, + "handshakes_per_sec": 1356.9, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 4330, + "total": 5847 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 163000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 11287500.0, + "p95": 11678000.0, + "min": 10680000.0, + "max": 14035000.0, + "mean": 11291956.0, + "stddev": 247423.3 + }, + "handshakes_per_sec": 88.6, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 36385, + "total": 37902 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 10742000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 9571000.0, + "subtotal_ns": 9571000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 572000.0, + "subtotal_ns": 1144000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 524000.0, + "p95": 925000.0, + "min": 392000.0, + "max": 1831000.0, + "mean": 577659.0, + "stddev": 163415.7 + }, + "handshakes_per_sec": 1908.4, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 8764, + "total": 10665 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 225000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 115000.0, + "subtotal_ns": 115000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 35000.0, + "subtotal_ns": 70000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 718000.0, + "p95": 1356100.0, + "min": 484000.0, + "max": 2779000.0, + "mean": 797345.0, + "stddev": 286477.9 + }, + "handshakes_per_sec": 1392.8, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 11182, + "total": 13083 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 361000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 199000.0, + "subtotal_ns": 199000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 61000.0, + "subtotal_ns": 122000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 876000.0, + "p95": 1601050.0, + "min": 625000.0, + "max": 2977000.0, + "mean": 969601.0, + "stddev": 311805.3 + }, + "handshakes_per_sec": 1141.6, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 14458, + "total": 16359 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 478000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 250000.0, + "subtotal_ns": 250000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 94000.0, + "subtotal_ns": 188000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 770000.0, + "p95": 826000.0, + "min": 700000.0, + "max": 1661000.0, + "mean": 774451.0, + "stddev": 40026.3 + }, + "handshakes_per_sec": 1298.7, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 4808, + "total": 6709 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 176000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 16000.0, + "subtotal_ns": 32000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 11380000.0, + "p95": 11807050.0, + "min": 10688000.0, + "max": 15648000.0, + "mean": 11402416.0, + "stddev": 276420.5 + }, + "handshakes_per_sec": 87.9, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 36865, + "total": 38766 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 10755000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 12000.0, + "subtotal_ns": 12000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 15000.0, + "subtotal_ns": 15000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 9571000.0, + "subtotal_ns": 9571000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 572000.0, + "subtotal_ns": 1144000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 134000.0, + "p95": 142000.0, + "min": 120000.0, + "max": 198000.0, + "mean": 132186.0, + "stddev": 6817.2 + }, + "handshakes_per_sec": 7462.7, + "bytes_on_wire": { + "client_to_server": 312, + "server_to_client": 824, + "total": 1136 + }, + "client_hello_bytes": 232, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 76000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 6000.0, + "subtotal_ns": 12000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4000.0, + "subtotal_ns": 4000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 18000.0, + "subtotal_ns": 36000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 165000.0, + "p95": 187000.0, + "min": 147000.0, + "max": 233000.0, + "mean": 165816.0, + "stddev": 11101.1 + }, + "handshakes_per_sec": 6060.6, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 1912, + "total": 3408 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 99000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 6000.0, + "subtotal_ns": 12000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4000.0, + "subtotal_ns": 4000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 18000.0, + "subtotal_ns": 36000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 183000.0, + "p95": 193000.0, + "min": 167000.0, + "max": 285000.0, + "mean": 182224.0, + "stddev": 8299.7 + }, + "handshakes_per_sec": 5464.5, + "bytes_on_wire": { + "client_to_server": 1529, + "server_to_client": 1945, + "total": 3474 + }, + "client_hello_bytes": 1449, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 119000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 7000.0, + "subtotal_ns": 14000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 21000.0, + "subtotal_ns": 42000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4000.0, + "subtotal_ns": 4000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 18000.0, + "subtotal_ns": 36000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 123000.0, + "p95": 133000.0, + "min": 113000.0, + "max": 170000.0, + "mean": 123206.0, + "stddev": 6725.2 + }, + "handshakes_per_sec": 8130.1, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 1880, + "total": 3344 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 63000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4000.0, + "subtotal_ns": 4000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 18000.0, + "subtotal_ns": 36000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 133000.0, + "p95": 139000.0, + "min": 122000.0, + "max": 160000.0, + "mean": 132472.0, + "stddev": 6183.6 + }, + "handshakes_per_sec": 7518.8, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 2360, + "total": 4208 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 72000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4000.0, + "subtotal_ns": 4000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 18000.0, + "subtotal_ns": 36000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 190000.0, + "p95": 251000.0, + "min": 160000.0, + "max": 319000.0, + "mean": 196542.0, + "stddev": 26807.0 + }, + "handshakes_per_sec": 5263.2, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 7930, + "total": 9426 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 116000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 6000.0, + "subtotal_ns": 12000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 33000.0, + "subtotal_ns": 33000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 226500.0, + "p95": 316000.0, + "min": 187000.0, + "max": 475000.0, + "mean": 236803.0, + "stddev": 40165.0 + }, + "handshakes_per_sec": 4415.0, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 10348, + "total": 11844 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 151000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 6000.0, + "subtotal_ns": 12000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 52000.0, + "subtotal_ns": 52000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 20000.0, + "subtotal_ns": 40000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 270000.0, + "p95": 363050.0, + "min": 230000.0, + "max": 545000.0, + "mean": 280204.0, + "stddev": 40449.5 + }, + "handshakes_per_sec": 3703.7, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 13624, + "total": 15120 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 194000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 6000.0, + "subtotal_ns": 12000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 69000.0, + "subtotal_ns": 69000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 33000.0, + "subtotal_ns": 66000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 150000.0, + "p95": 213000.0, + "min": 126000.0, + "max": 339000.0, + "mean": 157947.0, + "stddev": 27262.8 + }, + "handshakes_per_sec": 6666.7, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 7898, + "total": 9362 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 80000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 33000.0, + "subtotal_ns": 33000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 189000.0, + "p95": 269150.0, + "min": 155000.0, + "max": 392000.0, + "mean": 198879.0, + "stddev": 35330.9 + }, + "handshakes_per_sec": 5291.0, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 10316, + "total": 11780 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 115000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 52000.0, + "subtotal_ns": 52000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 20000.0, + "subtotal_ns": 40000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 234000.0, + "p95": 329000.0, + "min": 197000.0, + "max": 550000.0, + "mean": 246711.0, + "stddev": 42431.0 + }, + "handshakes_per_sec": 4273.5, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 13592, + "total": 15056 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 158000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 7000.0, + "subtotal_ns": 7000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8000.0, + "subtotal_ns": 8000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 69000.0, + "subtotal_ns": 69000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 33000.0, + "subtotal_ns": 66000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 160000.0, + "p95": 228050.0, + "min": 135000.0, + "max": 1203000.0, + "mean": 169900.0, + "stddev": 49508.3 + }, + "handshakes_per_sec": 6250.0, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 8378, + "total": 10226 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 89000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 33000.0, + "subtotal_ns": 33000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 12000.0, + "subtotal_ns": 24000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 199000.0, + "p95": 285050.0, + "min": 163000.0, + "max": 437000.0, + "mean": 209780.0, + "stddev": 37739.4 + }, + "handshakes_per_sec": 5025.1, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 10796, + "total": 12644 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 124000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 52000.0, + "subtotal_ns": 52000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 20000.0, + "subtotal_ns": 40000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 243000.0, + "p95": 336000.0, + "min": 206000.0, + "max": 498000.0, + "mean": 255979.0, + "stddev": 40944.7 + }, + "handshakes_per_sec": 4115.2, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 14072, + "total": 15920 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 167000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 69000.0, + "subtotal_ns": 69000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 33000.0, + "subtotal_ns": 66000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/example-macos-smoke.json b/tools/benchmarks/pqc/results/example-macos-smoke.json new file mode 100644 index 0000000..09149ce --- /dev/null +++ b/tools/benchmarks/pqc/results/example-macos-smoke.json @@ -0,0 +1,1984 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-06-07T21:58:43Z", + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'generic-fallback', not cortex-a76" + ], + "host": { + "hostname": "unknown52f9cccdc6d7.home", + "os": "macos", + "os_pretty": "macOS 26.3.1 (25D771280a)", + "arch": "arm64", + "kernel": "25.3.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M3", + "ncpu": 8, + "ram_bytes": 17179869184 + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-06-07T21:58:10Z", + "timestamp_end_utc": "2026-06-07T21:58:43Z", + "duration_s": 33, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "Apple clang version 17.0.0 (clang-1700.6.4.2)", + "bench_cflags": "-O3", + "cflags_target": "generic-fallback", + "liboqs_ref": "0.15.0", + "liboqs_commit": "not-built", + "liboqs_opt_defines": "", + "openssl": "system:3.6.0", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1780869490, + null, + null, + null + ], + [ + 1780869490, + null, + null, + null + ], + [ + 1780869491, + null, + null, + null + ], + [ + 1780869492, + null, + null, + null + ], + [ + 1780869493, + null, + null, + null + ], + [ + 1780869494, + null, + null, + null + ], + [ + 1780869495, + null, + null, + null + ], + [ + 1780869496, + null, + null, + null + ], + [ + 1780869497, + null, + null, + null + ], + [ + 1780869498, + null, + null, + null + ], + [ + 1780869499, + null, + null, + null + ], + [ + 1780869500, + null, + null, + null + ], + [ + 1780869501, + null, + null, + null + ], + [ + 1780869502, + null, + null, + null + ], + [ + 1780869503, + null, + null, + null + ], + [ + 1780869504, + null, + null, + null + ], + [ + 1780869505, + null, + null, + null + ], + [ + 1780869506, + null, + null, + null + ], + [ + 1780869507, + null, + null, + null + ], + [ + 1780869508, + null, + null, + null + ], + [ + 1780869509, + null, + null, + null + ], + [ + 1780869510, + null, + null, + null + ], + [ + 1780869511, + null, + null, + null + ], + [ + 1780869512, + null, + null, + null + ], + [ + 1780869513, + null, + null, + null + ], + [ + 1780869514, + null, + null, + null + ], + [ + 1780869515, + null, + null, + null + ], + [ + 1780869516, + null, + null, + null + ], + [ + 1780869517, + null, + null, + null + ], + [ + 1780869518, + null, + null, + null + ], + [ + 1780869519, + null, + null, + null + ], + [ + 1780869520, + null, + null, + null + ], + [ + 1780869521, + null, + null, + null + ], + [ + 1780869522, + null, + null, + null + ] + ], + "temp_c": null, + "arm_clock_hz": null, + "throttling_detected": false + }, + "warnings": [ + "governor is 'unavailable', not 'performance' (need root on Linux, or unsupported on macOS)", + "core pinning unavailable (no taskset/numactl) \u2014 results will be noisier", + "NOT RPi5-baseline-grade: host is not a Raspberry Pi (model='', os=macos); CPU governor is 'unavailable', not 'performance'; benchmark was not pinned to a dedicated core (no taskset); build flags targeted 'generic-fallback', not cortex-a76" + ], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 45000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 44000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 47000.0, + "mean": 44720.0, + "stddev": 678.23, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 43000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 43000.0, + "q3": 43000.0, + "min": 43000.0, + "max": 44000.0, + "mean": 43120.0, + "stddev": 331.66, + "ops_per_sec": 23255.81, + "per_rep_median": [ + 43000.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 10000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 9000.0, + "q3": 10000.0, + "min": 9000.0, + "max": 12000.0, + "mean": 9800.0, + "stddev": 707.11, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 11000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 11000.0, + "q3": 11000.0, + "min": 10000.0, + "max": 11000.0, + "mean": 10800.0, + "stddev": 408.25, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 13000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 12000.0, + "max": 15000.0, + "mean": 12720.0, + "stddev": 678.23, + "ops_per_sec": 76923.08, + "per_rep_median": [ + 13000.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 15000.0, + "max": 20000.0, + "mean": 16200.0, + "stddev": 1118.03, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 17000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 17000.0, + "q3": 17000.0, + "min": 16000.0, + "max": 17000.0, + "mean": 16920.0, + "stddev": 276.89, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 20000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 20000.0, + "q3": 20000.0, + "min": 19000.0, + "max": 23000.0, + "mean": 19960.0, + "stddev": 888.82, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 24000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 23000.0, + "q3": 24000.0, + "min": 23000.0, + "max": 26000.0, + "mean": 23880.0, + "stddev": 832.67, + "ops_per_sec": 41666.67, + "per_rep_median": [ + 24000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 26000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 25000.0, + "q3": 26000.0, + "min": 25000.0, + "max": 26000.0, + "mean": 25680.0, + "stddev": 476.1, + "ops_per_sec": 38461.54, + "per_rep_median": [ + 26000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 30000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 30000.0, + "q3": 30000.0, + "min": 30000.0, + "max": 32000.0, + "mean": 30080.0, + "stddev": 400.0, + "ops_per_sec": 33333.33, + "per_rep_median": [ + 30000.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 45000.0, + "mad": 0.0, + "iqr": 2000.0, + "q1": 45000.0, + "q3": 47000.0, + "min": 45000.0, + "max": 52000.0, + "mean": 46160.0, + "stddev": 1841.2, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 45000.0, + "mad": 0.0, + "iqr": 2000.0, + "q1": 45000.0, + "q3": 47000.0, + "min": 45000.0, + "max": 49000.0, + "mean": 45960.0, + "stddev": 1457.17, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 128000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 128000.0, + "q3": 128000.0, + "min": 127000.0, + "max": 134000.0, + "mean": 128240.0, + "stddev": 1562.05, + "ops_per_sec": 7812.5, + "per_rep_median": [ + 128000.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 63000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 62000.0, + "q3": 63000.0, + "min": 61000.0, + "max": 63000.0, + "mean": 62480.0, + "stddev": 585.95, + "ops_per_sec": 15873.02, + "per_rep_median": [ + 63000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 262000.0, + "mad": 137000.0, + "iqr": 328000.0, + "q1": 126000.0, + "q3": 454000.0, + "min": 115000.0, + "max": 1197000.0, + "mean": 328600.0, + "stddev": 249040.66, + "ops_per_sec": 3816.79, + "per_rep_median": [ + 262000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 67000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 67000.0, + "q3": 68000.0, + "min": 67000.0, + "max": 68000.0, + "mean": 67360.0, + "stddev": 489.9, + "ops_per_sec": 14925.37, + "per_rep_median": [ + 67000.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 123000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 122000.0, + "q3": 125000.0, + "min": 121000.0, + "max": 133000.0, + "mean": 124080.0, + "stddev": 2812.47, + "ops_per_sec": 8130.08, + "per_rep_median": [ + 123000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 418000.0, + "mad": 242000.0, + "iqr": 490000.0, + "q1": 254000.0, + "q3": 744000.0, + "min": 172000.0, + "max": 1509000.0, + "mean": 551920.0, + "stddev": 401189.06, + "ops_per_sec": 2392.34, + "per_rep_median": [ + 418000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 112000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 109000.0, + "q3": 113000.0, + "min": 109000.0, + "max": 116000.0, + "mean": 111160.0, + "stddev": 2095.23, + "ops_per_sec": 8928.57, + "per_rep_median": [ + 112000.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 177000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 175000.0, + "q3": 178000.0, + "min": 173000.0, + "max": 279000.0, + "mean": 180520.0, + "stddev": 20631.93, + "ops_per_sec": 5649.72, + "per_rep_median": [ + 177000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 455000.0, + "mad": 186000.0, + "iqr": 413000.0, + "q1": 270000.0, + "q3": 683000.0, + "min": 267000.0, + "max": 1076000.0, + "mean": 503520.0, + "stddev": 251255.2, + "ops_per_sec": 2197.8, + "per_rep_median": [ + 455000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 181000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 181000.0, + "q3": 181000.0, + "min": 180000.0, + "max": 183000.0, + "mean": 180920.0, + "stddev": 571.55, + "ops_per_sec": 5524.86, + "per_rep_median": [ + 181000.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 6687000.0, + "mad": 849000.0, + "iqr": 2341000.0, + "q1": 5897000.0, + "q3": 8238000.0, + "min": 5646000.0, + "max": 12033000.0, + "mean": 7198280.0, + "stddev": 1695393.35, + "ops_per_sec": 149.54, + "per_rep_median": [ + 6687000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 205000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 204000.0, + "q3": 207000.0, + "min": 200000.0, + "max": 213000.0, + "mean": 205600.0, + "stddev": 2783.88, + "ops_per_sec": 4878.05, + "per_rep_median": [ + 205000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 32000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 31000.0, + "q3": 32000.0, + "min": 31000.0, + "max": 32000.0, + "mean": 31680.0, + "stddev": 476.1, + "ops_per_sec": 31250.0, + "per_rep_median": [ + 32000.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 20789000.0, + "mad": 1209000.0, + "iqr": 1648000.0, + "q1": 19580000.0, + "q3": 21228000.0, + "min": 19074000.0, + "max": 35284000.0, + "mean": 21662440.0, + "stddev": 3564747.46, + "ops_per_sec": 48.1, + "per_rep_median": [ + 20789000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 414000.0, + "mad": 3000.0, + "iqr": 7000.0, + "q1": 410000.0, + "q3": 417000.0, + "min": 399000.0, + "max": 426000.0, + "mean": 413960.0, + "stddev": 5175.91, + "ops_per_sec": 2415.46, + "per_rep_median": [ + 414000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 62000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 61000.0, + "max": 65000.0, + "mean": 61880.0, + "stddev": 1129.9, + "ops_per_sec": 16129.03, + "per_rep_median": [ + 62000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 876000.0, + "mad": 4000.0, + "iqr": 28000.0, + "q1": 873000.0, + "q3": 901000.0, + "min": 871000.0, + "max": 908000.0, + "mean": 884280.0, + "stddev": 14310.6, + "ops_per_sec": 1141.55, + "per_rep_median": [ + 876000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 20450000.0, + "mad": 80000.0, + "iqr": 152000.0, + "q1": 20403000.0, + "q3": 20555000.0, + "min": 20267000.0, + "max": 21063000.0, + "mean": 20496960.0, + "stddev": 179759.9, + "ops_per_sec": 48.9, + "per_rep_median": [ + 20450000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 1257000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 1255000.0, + "q3": 1260000.0, + "min": 1249000.0, + "max": 1279000.0, + "mean": 1258480.0, + "stddev": 5598.51, + "ops_per_sec": 795.54, + "per_rep_median": [ + 1257000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 56080000.0, + "mad": 465000.0, + "iqr": 1017000.0, + "q1": 55411000.0, + "q3": 56428000.0, + "min": 54927000.0, + "max": 57378000.0, + "mean": 56011360.0, + "stddev": 673215.35, + "ops_per_sec": 17.83, + "per_rep_median": [ + 56080000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 424815000.0, + "mad": 997000.0, + "iqr": 1743000.0, + "q1": 423487000.0, + "q3": 425230000.0, + "min": 420032000.0, + "max": 427471000.0, + "mean": 424356920.0, + "stddev": 1941862.23, + "ops_per_sec": 2.35, + "per_rep_median": [ + 424815000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 428000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 428000.0, + "q3": 429000.0, + "min": 428000.0, + "max": 434000.0, + "mean": 429040.0, + "stddev": 1645.2, + "ops_per_sec": 2336.45, + "per_rep_median": [ + 428000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 1275000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 1274000.0, + "q3": 1277000.0, + "min": 1271000.0, + "max": 1279000.0, + "mean": 1275360.0, + "stddev": 2079.26, + "ops_per_sec": 784.31, + "per_rep_median": [ + 1275000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 33575000.0, + "mad": 221000.0, + "iqr": 338000.0, + "q1": 33458000.0, + "q3": 33796000.0, + "min": 33265000.0, + "max": 34036000.0, + "mean": 33614440.0, + "stddev": 252247.41, + "ops_per_sec": 29.78, + "per_rep_median": [ + 33575000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 1850000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 1849000.0, + "q3": 1851000.0, + "min": 1846000.0, + "max": 1858000.0, + "mean": 1850280.0, + "stddev": 2557.99, + "ops_per_sec": 540.54, + "per_rep_median": [ + 1850000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 3340000.0, + "mad": 11000.0, + "iqr": 25000.0, + "q1": 3320000.0, + "q3": 3345000.0, + "min": 3313000.0, + "max": 3351000.0, + "mean": 3333560.0, + "stddev": 13323.16, + "ops_per_sec": 299.4, + "per_rep_median": [ + 3340000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 68877000.0, + "mad": 345000.0, + "iqr": 579000.0, + "q1": 68515000.0, + "q3": 69094000.0, + "min": 68430000.0, + "max": 70399000.0, + "mean": 68939880.0, + "stddev": 520043.05, + "ops_per_sec": 14.52, + "per_rep_median": [ + 68877000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 25, + "repetitions": 1, + "samples": 25, + "median": 1862000.0, + "mad": 7000.0, + "iqr": 12000.0, + "q1": 1855000.0, + "q3": 1867000.0, + "min": 1853000.0, + "max": 1897000.0, + "mean": 1863640.0, + "stddev": 10491.58, + "ops_per_sec": 537.06, + "per_rep_median": [ + 1862000.0 + ] + } + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 718000.0, + "p95": 828550.0, + "min": 714000.0, + "max": 830000.0, + "mean": 757620.0, + "stddev": 53231.8 + }, + "handshakes_per_sec": 1392.8, + "bytes_on_wire": { + "client_to_server": 371, + "server_to_client": 1189, + "total": 1560 + }, + "client_hello_bytes": 291, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1164500.0, + "p95": 2062150.0, + "min": 984000.0, + "max": 2852000.0, + "mean": 1351120.0, + "stddev": 413406.3 + }, + "handshakes_per_sec": 858.7, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 8294, + "total": 9843 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1438500.0, + "p95": 2675000.0, + "min": 1184000.0, + "max": 2916000.0, + "mean": 1616580.0, + "stddev": 458735.5 + }, + "handshakes_per_sec": 695.2, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 10712, + "total": 12261 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1849500.0, + "p95": 3023150.0, + "min": 1493000.0, + "max": 3842000.0, + "mean": 1976920.0, + "stddev": 571179.5 + }, + "handshakes_per_sec": 540.7, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 13988, + "total": 15537 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1666000.0, + "p95": 1679650.0, + "min": 1658000.0, + "max": 1704000.0, + "mean": 1667740.0, + "stddev": 7501.9 + }, + "handshakes_per_sec": 600.2, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 4340, + "total": 5889 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 24694000.0, + "p95": 24968750.0, + "min": 24159000.0, + "max": 25160000.0, + "mean": 24587740.0, + "stddev": 286146.6 + }, + "handshakes_per_sec": 40.5, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 36394, + "total": 37943 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1162500.0, + "p95": 1870200.0, + "min": 978000.0, + "max": 2223000.0, + "mean": 1279720.0, + "stddev": 308337.7 + }, + "handshakes_per_sec": 860.2, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 8327, + "total": 9909 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1550500.0, + "p95": 2489750.0, + "min": 1177000.0, + "max": 3902000.0, + "mean": 1679860.0, + "stddev": 532703.9 + }, + "handshakes_per_sec": 645.0, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 10745, + "total": 12327 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1848500.0, + "p95": 2764400.0, + "min": 1488000.0, + "max": 3460000.0, + "mean": 2009540.0, + "stddev": 468264.5 + }, + "handshakes_per_sec": 541.0, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 14021, + "total": 15603 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1659000.0, + "p95": 1686500.0, + "min": 1647000.0, + "max": 1703000.0, + "mean": 1661640.0, + "stddev": 10974.5 + }, + "handshakes_per_sec": 602.8, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 4371, + "total": 5953 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 24647000.0, + "p95": 25309200.0, + "min": 24267000.0, + "max": 25345000.0, + "mean": 24707220.0, + "stddev": 259591.9 + }, + "handshakes_per_sec": 40.6, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 36427, + "total": 38009 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 979500.0, + "p95": 1615750.0, + "min": 750000.0, + "max": 2178000.0, + "mean": 1057340.0, + "stddev": 313571.1 + }, + "handshakes_per_sec": 1020.9, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 7942, + "total": 9075 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1214500.0, + "p95": 2321850.0, + "min": 947000.0, + "max": 3422000.0, + "mean": 1453700.0, + "stddev": 519516.9 + }, + "handshakes_per_sec": 823.4, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 10360, + "total": 11493 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1619500.0, + "p95": 3321500.0, + "min": 1259000.0, + "max": 4298000.0, + "mean": 1856960.0, + "stddev": 678196.3 + }, + "handshakes_per_sec": 617.5, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 13636, + "total": 14769 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1426500.0, + "p95": 1443200.0, + "min": 1418000.0, + "max": 1457000.0, + "mean": 1428400.0, + "stddev": 8076.2 + }, + "handshakes_per_sec": 701.0, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 3985, + "total": 5118 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 24783500.0, + "p95": 25203350.0, + "min": 24076000.0, + "max": 25279000.0, + "mean": 24785000.0, + "stddev": 300532.8 + }, + "handshakes_per_sec": 40.3, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 36042, + "total": 37175 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1064500.0, + "p95": 1649400.0, + "min": 798000.0, + "max": 2045000.0, + "mean": 1091380.0, + "stddev": 284858.9 + }, + "handshakes_per_sec": 939.4, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 8262, + "total": 9779 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1498000.0, + "p95": 2371300.0, + "min": 998000.0, + "max": 2498000.0, + "mean": 1557720.0, + "stddev": 441865.1 + }, + "handshakes_per_sec": 667.6, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 10680, + "total": 12197 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1505500.0, + "p95": 2934650.0, + "min": 1307000.0, + "max": 4169000.0, + "mean": 1781420.0, + "stddev": 605205.2 + }, + "handshakes_per_sec": 664.2, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 13956, + "total": 15473 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1470500.0, + "p95": 1488550.0, + "min": 1462000.0, + "max": 1494000.0, + "mean": 1472240.0, + "stddev": 7506.6 + }, + "handshakes_per_sec": 680.0, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 4304, + "total": 5821 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 24828000.0, + "p95": 25209050.0, + "min": 24098000.0, + "max": 25361000.0, + "mean": 24707580.0, + "stddev": 376056.4 + }, + "handshakes_per_sec": 40.3, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 36362, + "total": 37879 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 955500.0, + "p95": 1726350.0, + "min": 858000.0, + "max": 1840000.0, + "mean": 1074120.0, + "stddev": 277874.3 + }, + "handshakes_per_sec": 1046.6, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 8742, + "total": 10643 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1313000.0, + "p95": 2008600.0, + "min": 1058000.0, + "max": 2189000.0, + "mean": 1398980.0, + "stddev": 329537.9 + }, + "handshakes_per_sec": 761.6, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 11160, + "total": 13061 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1594500.0, + "p95": 3019350.0, + "min": 1368000.0, + "max": 4951000.0, + "mean": 1903960.0, + "stddev": 680464.9 + }, + "handshakes_per_sec": 627.2, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 14436, + "total": 16337 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 1534500.0, + "p95": 1552200.0, + "min": 1528000.0, + "max": 1561000.0, + "mean": 1536420.0, + "stddev": 7154.5 + }, + "handshakes_per_sec": 651.7, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 4785, + "total": 6686 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 50, + "succeeded": 50, + "handshake_latency_ns": { + "median": 24732000.0, + "p95": 25370350.0, + "min": 24139000.0, + "max": 25729000.0, + "mean": 24781760.0, + "stddev": 347989.0 + }, + "handshakes_per_sec": 40.4, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 36842, + "total": 38743 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/fedora-20260730T120637Z.json b/tools/benchmarks/pqc/results/fedora-20260730T120637Z.json new file mode 100644 index 0000000..112b30e --- /dev/null +++ b/tools/benchmarks/pqc/results/fedora-20260730T120637Z.json @@ -0,0 +1,12848 @@ +{ + "schema_version": "2.0.0", + "tool_version": "0.2.0", + "generated_utc": "2026-07-30T12:13:11Z", + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=linux)", + "build flags targeted 'generic-fallback', not cortex-a76" + ], + "host": { + "hostname": "fedora", + "os": "linux", + "os_pretty": "Fedora Linux 44 (Sway)", + "arch": "x86_64", + "kernel": "7.1.5-200.fc44.x86_64", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Intel(R) Core(TM) Ultra 9 285HX", + "ncpu": 24, + "ram_bytes": 269642162176 + }, + "cpu_features": { + "source": "/proc/cpuinfo (flags, x86)", + "neon": false, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-30T12:06:37Z", + "timestamp_end_utc": "2026-07-30T12:13:11Z", + "duration_s": 394, + "governor_requested": "performance", + "governor_before": "performance", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "not aarch64" + }, + "toolchain": { + "cc_version": "cc (GCC) 16.1.1 20260515 (Red Hat 16.1.1-2)", + "bench_cflags": "-O3", + "cflags_target": "generic-fallback", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_OPT_TARGET auto;", + "openssl": "system:3.5.7", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "x86_64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "", + "target_features_compiled": [ + "fxsr", + "sse", + "sse2" + ], + "cpu_features_runtime": null, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "x86_64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1785413197, + 800000000, + 27.8, + null + ], + [ + 1785413197, + 800000000, + 27.8, + null + ], + [ + 1785413198, + 5372117000, + 27.8, + null + ], + [ + 1785413199, + 5399362000, + 27.8, + null + ], + [ + 1785413200, + 5397551000, + 27.8, + null + ], + [ + 1785413201, + 5400000000, + 27.8, + null + ], + [ + 1785413202, + 5387075000, + 27.8, + null + ], + [ + 1785413203, + 5400000000, + 27.8, + null + ], + [ + 1785413204, + 5400000000, + 27.8, + null + ], + [ + 1785413205, + 5400000000, + 27.8, + null + ], + [ + 1785413206, + 5400000000, + 27.8, + null + ], + [ + 1785413207, + 5399751000, + 27.8, + null + ], + [ + 1785413208, + 5400000000, + 27.8, + null + ], + [ + 1785413209, + 5383281000, + 27.8, + null + ], + [ + 1785413210, + 5394145000, + 27.8, + null + ], + [ + 1785413211, + 5385897000, + 27.8, + null + ], + [ + 1785413212, + 5369365000, + 27.8, + null + ], + [ + 1785413213, + 5400000000, + 27.8, + null + ], + [ + 1785413214, + 5324796000, + 27.8, + null + ], + [ + 1785413215, + 5400000000, + 27.8, + null + ], + [ + 1785413216, + 5374208000, + 27.8, + null + ], + [ + 1785413217, + 5322044000, + 27.8, + null + ], + [ + 1785413218, + 5400000000, + 27.8, + null + ], + [ + 1785413219, + 5400000000, + 27.8, + null + ], + [ + 1785413220, + 5400000000, + 27.8, + null + ], + [ + 1785413221, + 5374196000, + 27.8, + null + ], + [ + 1785413222, + 5398780000, + 27.8, + null + ], + [ + 1785413223, + 5386586000, + 27.8, + null + ], + [ + 1785413224, + 5369912000, + 27.8, + null + ], + [ + 1785413225, + 5395387000, + 27.8, + null + ], + [ + 1785413226, + 5378261000, + 27.8, + null + ], + [ + 1785413227, + 5400000000, + 27.8, + null + ], + [ + 1785413228, + 5396377000, + 27.8, + null + ], + [ + 1785413229, + 5384348000, + 27.8, + null + ], + [ + 1785413230, + 5363716000, + 27.8, + null + ], + [ + 1785413231, + 5349303000, + 27.8, + null + ], + [ + 1785413232, + 5276430000, + 27.8, + null + ], + [ + 1785413233, + 5400000000, + 27.8, + null + ], + [ + 1785413234, + 5400000000, + 27.8, + null + ], + [ + 1785413235, + 5397235000, + 27.8, + null + ], + [ + 1785413236, + 5386975000, + 27.8, + null + ], + [ + 1785413237, + 5399758000, + 27.8, + null + ], + [ + 1785413238, + 5397009000, + 27.8, + null + ], + [ + 1785413239, + 5400000000, + 27.8, + null + ], + [ + 1785413240, + 5383427000, + 27.8, + null + ], + [ + 1785413241, + 5394336000, + 27.8, + null + ], + [ + 1785413242, + 5400000000, + 27.8, + null + ], + [ + 1785413243, + 5396942000, + 27.8, + null + ], + [ + 1785413244, + 5353082000, + 27.8, + null + ], + [ + 1785413245, + 5393263000, + 27.8, + null + ], + [ + 1785413246, + 5236890000, + 27.8, + null + ], + [ + 1785413247, + 5395728000, + 27.8, + null + ], + [ + 1785413248, + 5320911000, + 27.8, + null + ], + [ + 1785413249, + 5357944000, + 27.8, + null + ], + [ + 1785413250, + 5305309000, + 27.8, + null + ], + [ + 1785413251, + 5392729000, + 27.8, + null + ], + [ + 1785413252, + 5398042000, + 27.8, + null + ], + [ + 1785413253, + 5390187000, + 27.8, + null + ], + [ + 1785413254, + 5368900000, + 27.8, + null + ], + [ + 1785413255, + 5400000000, + 27.8, + null + ], + [ + 1785413256, + 5400000000, + 27.8, + null + ], + [ + 1785413257, + 5400000000, + 27.8, + null + ], + [ + 1785413258, + 5390119000, + 27.8, + null + ], + [ + 1785413259, + 5400000000, + 27.8, + null + ], + [ + 1785413260, + 5400000000, + 27.8, + null + ], + [ + 1785413261, + 5400000000, + 27.8, + null + ], + [ + 1785413262, + 5398743000, + 27.8, + null + ], + [ + 1785413263, + 5351088000, + 27.8, + null + ], + [ + 1785413264, + 5385198000, + 27.8, + null + ], + [ + 1785413265, + 5374756000, + 27.8, + null + ], + [ + 1785413266, + 5394247000, + 27.8, + null + ], + [ + 1785413267, + 5400000000, + 27.8, + null + ], + [ + 1785413268, + 5400000000, + 27.8, + null + ], + [ + 1785413269, + 5400000000, + 27.8, + null + ], + [ + 1785413270, + 5400000000, + 27.8, + null + ], + [ + 1785413271, + 5359256000, + 27.8, + null + ], + [ + 1785413272, + 5400000000, + 27.8, + null + ], + [ + 1785413273, + 5400000000, + 27.8, + null + ], + [ + 1785413274, + 5393527000, + 27.8, + null + ], + [ + 1785413275, + 5399029000, + 27.8, + null + ], + [ + 1785413276, + 5399802000, + 27.8, + null + ], + [ + 1785413277, + 5388818000, + 27.8, + null + ], + [ + 1785413278, + 5400000000, + 27.8, + null + ], + [ + 1785413279, + 5383331000, + 27.8, + null + ], + [ + 1785413280, + 5376828000, + 27.8, + null + ], + [ + 1785413281, + 5383333000, + 27.8, + null + ], + [ + 1785413282, + 5400000000, + 27.8, + null + ], + [ + 1785413283, + 5400000000, + 27.8, + null + ], + [ + 1785413284, + 5399814000, + 27.8, + null + ], + [ + 1785413285, + 5399945000, + 27.8, + null + ], + [ + 1785413286, + 5400000000, + 27.8, + null + ], + [ + 1785413287, + 5398509000, + 27.8, + null + ], + [ + 1785413288, + 5389869000, + 27.8, + null + ], + [ + 1785413289, + 5387212000, + 27.8, + null + ], + [ + 1785413290, + 5400000000, + 27.8, + null + ], + [ + 1785413291, + 5400000000, + 27.8, + null + ], + [ + 1785413292, + 5367133000, + 27.8, + null + ], + [ + 1785413293, + 5367224000, + 27.8, + null + ], + [ + 1785413294, + 5376431000, + 27.8, + null + ], + [ + 1785413295, + 5367355000, + 27.8, + null + ], + [ + 1785413296, + 5400000000, + 27.8, + null + ], + [ + 1785413297, + 5383333000, + 27.8, + null + ], + [ + 1785413298, + 5400000000, + 27.8, + null + ], + [ + 1785413299, + 5400000000, + 27.8, + null + ], + [ + 1785413300, + 5375505000, + 27.8, + null + ], + [ + 1785413301, + 5391686000, + 27.8, + null + ], + [ + 1785413302, + 5389608000, + 27.8, + null + ], + [ + 1785413303, + 5392887000, + 27.8, + null + ], + [ + 1785413304, + 5375178000, + 27.8, + null + ], + [ + 1785413305, + 5400000000, + 27.8, + null + ], + [ + 1785413306, + 5376557000, + 27.8, + null + ], + [ + 1785413307, + 5388245000, + 27.8, + null + ], + [ + 1785413308, + 5386731000, + 27.8, + null + ], + [ + 1785413309, + 5400000000, + 27.8, + null + ], + [ + 1785413310, + 5383333000, + 27.8, + null + ], + [ + 1785413311, + 5383329000, + 27.8, + null + ], + [ + 1785413312, + 5370171000, + 27.8, + null + ], + [ + 1785413313, + 5364023000, + 27.8, + null + ], + [ + 1785413314, + 5400000000, + 27.8, + null + ], + [ + 1785413315, + 5400000000, + 27.8, + null + ], + [ + 1785413316, + 5399945000, + 27.8, + null + ], + [ + 1785413317, + 5400000000, + 27.8, + null + ], + [ + 1785413318, + 5383329000, + 27.8, + null + ], + [ + 1785413319, + 5400000000, + 27.8, + null + ], + [ + 1785413320, + 5394285000, + 27.8, + null + ], + [ + 1785413321, + 5400000000, + 27.8, + null + ], + [ + 1785413322, + 5400000000, + 27.8, + null + ], + [ + 1785413323, + 5399945000, + 27.8, + null + ], + [ + 1785413324, + 5400000000, + 27.8, + null + ], + [ + 1785413325, + 5329410000, + 27.8, + null + ], + [ + 1785413326, + 5388287000, + 27.8, + null + ], + [ + 1785413327, + 5400000000, + 27.8, + null + ], + [ + 1785413328, + 5400000000, + 27.8, + null + ], + [ + 1785413329, + 5400000000, + 27.8, + null + ], + [ + 1785413330, + 5399945000, + 27.8, + null + ], + [ + 1785413331, + 5388575000, + 27.8, + null + ], + [ + 1785413332, + 5400000000, + 27.8, + null + ], + [ + 1785413333, + 5400000000, + 27.8, + null + ], + [ + 1785413334, + 5378576000, + 27.8, + null + ], + [ + 1785413335, + 5383334000, + 27.8, + null + ], + [ + 1785413336, + 5368041000, + 27.8, + null + ], + [ + 1785413337, + 5400000000, + 27.8, + null + ], + [ + 1785413338, + 5399945000, + 27.8, + null + ], + [ + 1785413339, + 5398166000, + 27.8, + null + ], + [ + 1785413340, + 5400000000, + 27.8, + null + ], + [ + 1785413342, + 5351651000, + 27.8, + null + ], + [ + 1785413343, + 5386965000, + 27.8, + null + ], + [ + 1785413344, + 5383333000, + 27.8, + null + ], + [ + 1785413345, + 5396816000, + 27.8, + null + ], + [ + 1785413346, + 5399945000, + 27.8, + null + ], + [ + 1785413347, + 5392408000, + 27.8, + null + ], + [ + 1785413348, + 5400000000, + 27.8, + null + ], + [ + 1785413349, + 5383335000, + 27.8, + null + ], + [ + 1785413350, + 5345481000, + 27.8, + null + ], + [ + 1785413351, + 5368927000, + 27.8, + null + ], + [ + 1785413352, + 5400000000, + 27.8, + null + ], + [ + 1785413353, + 5387304000, + 27.8, + null + ], + [ + 1785413354, + 5400000000, + 27.8, + null + ], + [ + 1785413355, + 5383333000, + 27.8, + null + ], + [ + 1785413356, + 5286802000, + 27.8, + null + ], + [ + 1785413357, + 5370186000, + 27.8, + null + ], + [ + 1785413358, + 5400000000, + 27.8, + null + ], + [ + 1785413359, + 5345278000, + 27.8, + null + ], + [ + 1785413360, + 5400000000, + 27.8, + null + ], + [ + 1785413361, + 5400000000, + 27.8, + null + ], + [ + 1785413362, + 5400000000, + 27.8, + null + ], + [ + 1785413363, + 5400000000, + 27.8, + null + ], + [ + 1785413364, + 5389408000, + 27.8, + null + ], + [ + 1785413365, + 5385914000, + 27.8, + null + ], + [ + 1785413366, + 5385292000, + 27.8, + null + ], + [ + 1785413367, + 5392292000, + 27.8, + null + ], + [ + 1785413368, + 5399945000, + 27.8, + null + ], + [ + 1785413369, + 5400000000, + 27.8, + null + ], + [ + 1785413370, + 5400000000, + 27.8, + null + ], + [ + 1785413371, + 5388305000, + 27.8, + null + ], + [ + 1785413372, + 5400000000, + 27.8, + null + ], + [ + 1785413373, + 5383280000, + 27.8, + null + ], + [ + 1785413374, + 5400000000, + 27.8, + null + ], + [ + 1785413375, + 5400000000, + 27.8, + null + ], + [ + 1785413376, + 5400000000, + 27.8, + null + ], + [ + 1785413377, + 5388027000, + 27.8, + null + ], + [ + 1785413378, + 5400000000, + 27.8, + null + ], + [ + 1785413379, + 5387597000, + 27.8, + null + ], + [ + 1785413380, + 5395214000, + 27.8, + null + ], + [ + 1785413381, + 5400000000, + 27.8, + null + ], + [ + 1785413382, + 5399945000, + 27.8, + null + ], + [ + 1785413383, + 5400000000, + 27.8, + null + ], + [ + 1785413384, + 5390777000, + 27.8, + null + ], + [ + 1785413385, + 5400000000, + 27.8, + null + ], + [ + 1785413386, + 5383279000, + 27.8, + null + ], + [ + 1785413387, + 5400000000, + 27.8, + null + ], + [ + 1785413388, + 5400000000, + 27.8, + null + ], + [ + 1785413389, + 5394311000, + 27.8, + null + ], + [ + 1785413390, + 5383401000, + 27.8, + null + ], + [ + 1785413391, + 5400000000, + 27.8, + null + ], + [ + 1785413392, + 5400000000, + 27.8, + null + ], + [ + 1785413393, + 5400000000, + 27.8, + null + ], + [ + 1785413394, + 5383333000, + 27.8, + null + ], + [ + 1785413395, + 5396842000, + 27.8, + null + ], + [ + 1785413396, + 5396644000, + 27.8, + null + ], + [ + 1785413397, + 5400000000, + 27.8, + null + ], + [ + 1785413398, + 5397170000, + 27.8, + null + ], + [ + 1785413399, + 5397658000, + 27.8, + null + ], + [ + 1785413400, + 5396990000, + 27.8, + null + ], + [ + 1785413401, + 5400000000, + 27.8, + null + ], + [ + 1785413402, + 5383331000, + 27.8, + null + ], + [ + 1785413403, + 5390033000, + 27.8, + null + ], + [ + 1785413404, + 5391364000, + 27.8, + null + ], + [ + 1785413405, + 5400054000, + 27.8, + null + ], + [ + 1785413406, + 5395936000, + 27.8, + null + ], + [ + 1785413407, + 5390594000, + 27.8, + null + ], + [ + 1785413408, + 5395223000, + 27.8, + null + ], + [ + 1785413409, + 5345103000, + 27.8, + null + ], + [ + 1785413410, + 5391664000, + 27.8, + null + ], + [ + 1785413411, + 5400000000, + 27.8, + null + ], + [ + 1785413412, + 5354404000, + 27.8, + null + ], + [ + 1785413413, + 5391034000, + 27.8, + null + ], + [ + 1785413414, + 5236810000, + 27.8, + null + ], + [ + 1785413415, + 5383333000, + 27.8, + null + ], + [ + 1785413416, + 5400000000, + 27.8, + null + ], + [ + 1785413417, + 5320241000, + 27.8, + null + ], + [ + 1785413418, + 5396243000, + 27.8, + null + ], + [ + 1785413419, + 5383334000, + 27.8, + null + ], + [ + 1785413420, + 5388344000, + 27.8, + null + ], + [ + 1785413421, + 5400000000, + 27.8, + null + ], + [ + 1785413422, + 5399907000, + 27.8, + null + ], + [ + 1785413423, + 5399945000, + 27.8, + null + ], + [ + 1785413424, + 5400000000, + 27.8, + null + ], + [ + 1785413425, + 5400000000, + 27.8, + null + ], + [ + 1785413426, + 5388340000, + 27.8, + null + ], + [ + 1785413427, + 5399535000, + 27.8, + null + ], + [ + 1785413428, + 5400000000, + 27.8, + null + ], + [ + 1785413429, + 5400000000, + 27.8, + null + ], + [ + 1785413430, + 5400000000, + 27.8, + null + ], + [ + 1785413431, + 5400000000, + 27.8, + null + ], + [ + 1785413432, + 5399945000, + 27.8, + null + ], + [ + 1785413433, + 5400000000, + 27.8, + null + ], + [ + 1785413434, + 5400000000, + 27.8, + null + ], + [ + 1785413435, + 5388053000, + 27.8, + null + ], + [ + 1785413436, + 5400000000, + 27.8, + null + ], + [ + 1785413437, + 5399945000, + 27.8, + null + ], + [ + 1785413438, + 5400000000, + 27.8, + null + ], + [ + 1785413439, + 5400000000, + 27.8, + null + ], + [ + 1785413440, + 5391625000, + 27.8, + null + ], + [ + 1785413441, + 5398270000, + 27.8, + null + ], + [ + 1785413442, + 5399945000, + 27.8, + null + ], + [ + 1785413443, + 5395185000, + 27.8, + null + ], + [ + 1785413444, + 5400000000, + 27.8, + null + ], + [ + 1785413445, + 5399945000, + 27.8, + null + ], + [ + 1785413446, + 5397238000, + 27.8, + null + ], + [ + 1785413447, + 5400000000, + 27.8, + null + ], + [ + 1785413448, + 5400000000, + 27.8, + null + ], + [ + 1785413449, + 5382023000, + 27.8, + null + ], + [ + 1785413450, + 5399811000, + 27.8, + null + ], + [ + 1785413451, + 5400000000, + 27.8, + null + ], + [ + 1785413452, + 5400000000, + 27.8, + null + ], + [ + 1785413453, + 5385546000, + 27.8, + null + ], + [ + 1785413454, + 5400000000, + 27.8, + null + ], + [ + 1785413455, + 5400000000, + 27.8, + null + ], + [ + 1785413456, + 5400000000, + 27.8, + null + ], + [ + 1785413457, + 5400000000, + 27.8, + null + ], + [ + 1785413458, + 5386574000, + 27.8, + null + ], + [ + 1785413459, + 5400000000, + 27.8, + null + ], + [ + 1785413460, + 5395395000, + 27.8, + null + ], + [ + 1785413461, + 5400000000, + 27.8, + null + ], + [ + 1785413462, + 5374100000, + 27.8, + null + ], + [ + 1785413463, + 5375191000, + 27.8, + null + ], + [ + 1785413464, + 5366806000, + 27.8, + null + ], + [ + 1785413465, + 5367647000, + 27.8, + null + ], + [ + 1785413466, + 5400000000, + 27.8, + null + ], + [ + 1785413467, + 5363929000, + 27.8, + null + ], + [ + 1785413468, + 5375080000, + 27.8, + null + ], + [ + 1785413469, + 5388899000, + 27.8, + null + ], + [ + 1785413470, + 5398471000, + 27.8, + null + ], + [ + 1785413471, + 5380493000, + 27.8, + null + ], + [ + 1785413472, + 5400000000, + 27.8, + null + ], + [ + 1785413473, + 5400000000, + 27.8, + null + ], + [ + 1785413474, + 5400000000, + 27.8, + null + ], + [ + 1785413475, + 5400000000, + 27.8, + null + ], + [ + 1785413476, + 5383281000, + 27.8, + null + ], + [ + 1785413477, + 5385798000, + 27.8, + null + ], + [ + 1785413478, + 5162429000, + 27.8, + null + ], + [ + 1785413479, + 5397696000, + 27.8, + null + ], + [ + 1785413480, + 5365759000, + 27.8, + null + ], + [ + 1785413481, + 5400000000, + 27.8, + null + ], + [ + 1785413482, + 5400000000, + 27.8, + null + ], + [ + 1785413483, + 5383335000, + 27.8, + null + ], + [ + 1785413484, + 5384411000, + 27.8, + null + ], + [ + 1785413485, + 5396345000, + 27.8, + null + ], + [ + 1785413486, + 5392780000, + 27.8, + null + ], + [ + 1785413487, + 5400000000, + 27.8, + null + ], + [ + 1785413488, + 5400054000, + 27.8, + null + ], + [ + 1785413489, + 5383332000, + 27.8, + null + ], + [ + 1785413490, + 5400000000, + 27.8, + null + ], + [ + 1785413491, + 5387040000, + 27.8, + null + ], + [ + 1785413492, + 5391025000, + 27.8, + null + ], + [ + 1785413493, + 5400000000, + 27.8, + null + ], + [ + 1785413494, + 5400000000, + 27.8, + null + ], + [ + 1785413495, + 5400000000, + 27.8, + null + ], + [ + 1785413496, + 5400000000, + 27.8, + null + ], + [ + 1785413497, + 5399945000, + 27.8, + null + ], + [ + 1785413498, + 5398306000, + 27.8, + null + ], + [ + 1785413499, + 5400054000, + 27.8, + null + ], + [ + 1785413500, + 5395134000, + 27.8, + null + ], + [ + 1785413501, + 5400000000, + 27.8, + null + ], + [ + 1785413502, + 5400000000, + 27.8, + null + ], + [ + 1785413503, + 5388988000, + 27.8, + null + ], + [ + 1785413504, + 5400000000, + 27.8, + null + ], + [ + 1785413505, + 5393877000, + 27.8, + null + ], + [ + 1785413506, + 5400000000, + 27.8, + null + ], + [ + 1785413507, + 5400000000, + 27.8, + null + ], + [ + 1785413508, + 5400054000, + 27.8, + null + ], + [ + 1785413509, + 5334643000, + 27.8, + null + ], + [ + 1785413510, + 5385937000, + 27.8, + null + ], + [ + 1785413511, + 5391458000, + 27.8, + null + ], + [ + 1785413512, + 5391877000, + 27.8, + null + ], + [ + 1785413513, + 5399945000, + 27.8, + null + ], + [ + 1785413514, + 5400000000, + 27.8, + null + ], + [ + 1785413515, + 5366973000, + 27.8, + null + ], + [ + 1785413516, + 5383335000, + 27.8, + null + ], + [ + 1785413517, + 5400000000, + 27.8, + null + ], + [ + 1785413518, + 5398986000, + 27.8, + null + ], + [ + 1785413519, + 5387746000, + 27.8, + null + ], + [ + 1785413520, + 5330826000, + 27.8, + null + ], + [ + 1785413521, + 5400000000, + 27.8, + null + ], + [ + 1785413522, + 5400000000, + 27.8, + null + ], + [ + 1785413523, + 5400000000, + 27.8, + null + ], + [ + 1785413524, + 5369751000, + 27.8, + null + ], + [ + 1785413525, + 5400000000, + 27.8, + null + ], + [ + 1785413527, + 5400000000, + 27.8, + null + ], + [ + 1785413528, + 5249499000, + 27.8, + null + ], + [ + 1785413529, + 5347371000, + 27.8, + null + ], + [ + 1785413530, + 5318608000, + 27.8, + null + ], + [ + 1785413531, + 5395070000, + 27.8, + null + ], + [ + 1785413532, + 5400000000, + 27.8, + null + ], + [ + 1785413533, + 5388855000, + 27.8, + null + ], + [ + 1785413534, + 5389906000, + 27.8, + null + ], + [ + 1785413535, + 5316569000, + 27.8, + null + ], + [ + 1785413536, + 5383331000, + 27.8, + null + ], + [ + 1785413537, + 5400000000, + 27.8, + null + ], + [ + 1785413538, + 5375970000, + 27.8, + null + ], + [ + 1785413539, + 5400000000, + 27.8, + null + ], + [ + 1785413540, + 5400000000, + 27.8, + null + ], + [ + 1785413541, + 5371176000, + 27.8, + null + ], + [ + 1785413542, + 5400000000, + 27.8, + null + ], + [ + 1785413543, + 5313518000, + 27.8, + null + ], + [ + 1785413544, + 5400000000, + 27.8, + null + ], + [ + 1785413545, + 5372806000, + 27.8, + null + ], + [ + 1785413546, + 5247069000, + 27.8, + null + ], + [ + 1785413547, + 5400000000, + 27.8, + null + ], + [ + 1785413548, + 5397885000, + 27.8, + null + ], + [ + 1785413549, + 5388294000, + 27.8, + null + ], + [ + 1785413550, + 5384028000, + 27.8, + null + ], + [ + 1785413551, + 5394326000, + 27.8, + null + ], + [ + 1785413552, + 5399945000, + 27.8, + null + ], + [ + 1785413553, + 5393819000, + 27.8, + null + ], + [ + 1785413554, + 5399945000, + 27.8, + null + ], + [ + 1785413555, + 5400000000, + 27.8, + null + ], + [ + 1785413556, + 5400000000, + 27.8, + null + ], + [ + 1785413557, + 5400000000, + 27.8, + null + ], + [ + 1785413558, + 5367890000, + 27.8, + null + ], + [ + 1785413559, + 5400000000, + 27.8, + null + ], + [ + 1785413560, + 5362348000, + 27.8, + null + ], + [ + 1785413561, + 800000000, + 27.8, + null + ], + [ + 1785413562, + 5391253000, + 27.8, + null + ], + [ + 1785413563, + 5375008000, + 27.8, + null + ], + [ + 1785413564, + 5400000000, + 27.8, + null + ], + [ + 1785413565, + 5400000000, + 27.8, + null + ], + [ + 1785413566, + 5221087000, + 27.8, + null + ], + [ + 1785413567, + 5380536000, + 27.8, + null + ], + [ + 1785413568, + 5394065000, + 27.8, + null + ], + [ + 1785413569, + 5380079000, + 27.8, + null + ], + [ + 1785413570, + 5389012000, + 27.8, + null + ], + [ + 1785413571, + 5396371000, + 27.8, + null + ], + [ + 1785413572, + 5400000000, + 27.8, + null + ], + [ + 1785413573, + 5400000000, + 27.8, + null + ], + [ + 1785413574, + 5374145000, + 27.8, + null + ], + [ + 1785413575, + 5400000000, + 27.8, + null + ], + [ + 1785413576, + 5382372000, + 27.8, + null + ], + [ + 1785413577, + 5375038000, + 27.8, + null + ], + [ + 1785413578, + 5360295000, + 27.8, + null + ], + [ + 1785413579, + 5382351000, + 27.8, + null + ], + [ + 1785413580, + 5372750000, + 27.8, + null + ], + [ + 1785413581, + 5378411000, + 27.8, + null + ], + [ + 1785413582, + 5388094000, + 27.8, + null + ], + [ + 1785413583, + 5364356000, + 27.8, + null + ], + [ + 1785413584, + 5364236000, + 27.8, + null + ], + [ + 1785413585, + 5390564000, + 27.8, + null + ], + [ + 1785413586, + 5379364000, + 27.8, + null + ], + [ + 1785413587, + 5375515000, + 27.8, + null + ], + [ + 1785413588, + 5352779000, + 27.8, + null + ], + [ + 1785413589, + 5384237000, + 27.8, + null + ], + [ + 1785413590, + 5383332000, + 27.8, + null + ], + [ + 1785413591, + 5400000000, + 27.8, + null + ] + ], + "temp_c": { + "min": 27.8, + "max": 27.8, + "mean": 27.8, + "samples": 394 + }, + "arm_clock_hz": { + "min": 800000000, + "max": 5400054000, + "mean": 5351046611.675, + "samples": 394, + "spread_frac": 0.8519 + }, + "throttling_detected": false + }, + "warnings": [ + "NOT RPi5-baseline-grade: host is not a Raspberry Pi (model='', os=linux); build flags targeted 'generic-fallback', not cortex-a76" + ], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2965, + "timed_iters": 14827, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16861.68, + "samples": 74135, + "median": 16975.0, + "mad": 147.0, + "iqr": 297.0, + "q1": 16838.0, + "q3": 17135.0, + "min": 16073.0, + "max": 249783.0, + "mean": 17091.48, + "stddev": 1032.59, + "ops_per_sec": 58910.16, + "per_rep_median": [ + 16913.0, + 16947.0, + 17299.0, + 16955.0, + 16967.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 2523, + "timed_iters": 12617, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19814.2, + "samples": 63085, + "median": 19788.0, + "mad": 70.0, + "iqr": 165.0, + "q1": 19731.0, + "q3": 19896.0, + "min": 19606.0, + "max": 146578.0, + "mean": 19949.95, + "stddev": 901.97, + "ops_per_sec": 50535.68, + "per_rep_median": [ + 19775.0, + 19792.0, + 19773.0, + 19804.0, + 19793.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 36763.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 12799, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3906.44, + "samples": 100000, + "median": 3877.0, + "mad": 23.0, + "iqr": 48.0, + "q1": 3857.0, + "q3": 3905.0, + "min": 3776.0, + "max": 236532.0, + "mean": 3906.67, + "stddev": 746.96, + "ops_per_sec": 257931.39, + "per_rep_median": [ + 3880.0, + 3877.0, + 3878.0, + 3877.0, + 3875.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 11633, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4298.11, + "samples": 100000, + "median": 4288.0, + "mad": 26.0, + "iqr": 54.0, + "q1": 4257.0, + "q3": 4311.0, + "min": 4083.0, + "max": 37213.0, + "mean": 4317.72, + "stddev": 237.49, + "ops_per_sec": 233208.96, + "per_rep_median": [ + 4287.0, + 4288.0, + 4284.0, + 4284.0, + 4304.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 9146, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5466.82, + "samples": 100000, + "median": 5253.0, + "mad": 37.0, + "iqr": 75.0, + "q1": 5210.0, + "q3": 5285.0, + "min": 5102.0, + "max": 27565.0, + "mean": 5260.84, + "stddev": 138.05, + "ops_per_sec": 190367.41, + "per_rep_median": [ + 5258.0, + 5243.0, + 5258.0, + 5261.0, + 5247.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 13418.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 7976, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6269.05, + "samples": 100000, + "median": 6193.0, + "mad": 35.0, + "iqr": 72.0, + "q1": 6162.0, + "q3": 6234.0, + "min": 6024.0, + "max": 246034.0, + "mean": 6259.73, + "stddev": 793.45, + "ops_per_sec": 161472.63, + "per_rep_median": [ + 6181.0, + 6191.0, + 6229.0, + 6187.0, + 6188.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 7819, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6394.88, + "samples": 100000, + "median": 6397.0, + "mad": 25.0, + "iqr": 52.0, + "q1": 6376.0, + "q3": 6428.0, + "min": 6293.0, + "max": 24819.0, + "mean": 6489.98, + "stddev": 284.85, + "ops_per_sec": 156323.28, + "per_rep_median": [ + 6401.0, + 6412.0, + 6409.0, + 6390.0, + 6383.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 6234, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8020.32, + "samples": 100000, + "median": 8022.0, + "mad": 23.0, + "iqr": 47.0, + "q1": 7998.0, + "q3": 8045.0, + "min": 7793.0, + "max": 22543.0, + "mean": 8032.25, + "stddev": 156.89, + "ops_per_sec": 124657.19, + "per_rep_median": [ + 8017.0, + 8017.0, + 8017.0, + 8026.0, + 8037.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 20612.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5864, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8526.95, + "samples": 100000, + "median": 8430.0, + "mad": 44.0, + "iqr": 91.0, + "q1": 8391.0, + "q3": 8482.0, + "min": 8210.0, + "max": 238531.0, + "mean": 8483.84, + "stddev": 757.96, + "ops_per_sec": 118623.96, + "per_rep_median": [ + 8431.0, + 8435.0, + 8430.0, + 8425.0, + 8429.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5663, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8829.91, + "samples": 100000, + "median": 8770.0, + "mad": 53.0, + "iqr": 108.0, + "q1": 8719.0, + "q3": 8827.0, + "min": 8570.0, + "max": 20332.0, + "mean": 8901.92, + "stddev": 378.27, + "ops_per_sec": 114025.09, + "per_rep_median": [ + 8772.0, + 9312.0, + 8757.0, + 8746.0, + 8758.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4328, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11551.66, + "samples": 100000, + "median": 11023.0, + "mad": 47.0, + "iqr": 98.0, + "q1": 10981.0, + "q3": 11079.0, + "min": 10815.0, + "max": 241676.0, + "mean": 11223.98, + "stddev": 900.07, + "ops_per_sec": 90719.4, + "per_rep_median": [ + 11020.0, + 11008.0, + 11009.0, + 11024.0, + 11527.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 28223.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17638611.67, + "samples": 150, + "median": 19582759.0, + "mad": 2871843.5, + "iqr": 8503844.5, + "q1": 16754437.75, + "q3": 25258282.25, + "min": 16659074.0, + "max": 50629643.0, + "mean": 22633472.39, + "stddev": 7066491.92, + "ops_per_sec": 51.07, + "per_rep_median": [ + 19774355.0, + 19515603.0, + 19526489.0, + 21002905.0, + 19799134.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5795, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8628.1, + "samples": 100000, + "median": 7967.0, + "mad": 288.0, + "iqr": 896.0, + "q1": 7768.0, + "q3": 8664.0, + "min": 7605.0, + "max": 26053.0, + "mean": 8480.97, + "stddev": 996.64, + "ops_per_sec": 125517.76, + "per_rep_median": [ + 7991.0, + 7969.0, + 7971.0, + 7954.0, + 7942.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 546, + "timed_iters": 2730, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 91578.49, + "samples": 13650, + "median": 91243.0, + "mad": 133.0, + "iqr": 750.0, + "q1": 91158.0, + "q3": 91908.0, + "min": 90973.0, + "max": 127762.0, + "mean": 91693.71, + "stddev": 974.18, + "ops_per_sec": 10959.74, + "per_rep_median": [ + 91215.0, + 91239.0, + 91226.0, + 91502.5, + 91244.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 19681969.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 51057166.0, + "samples": 150, + "median": 67194316.0, + "mad": 16218935.0, + "iqr": 32569538.25, + "q1": 51007863.75, + "q3": 83577402.0, + "min": 50749316.0, + "max": 283958968.0, + "mean": 73531526.78, + "stddev": 31657282.61, + "ops_per_sec": 14.88, + "per_rep_median": [ + 59120157.0, + 63189070.0, + 67254862.5, + 75314479.5, + 59591772.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 3007, + "timed_iters": 15036, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16626.4, + "samples": 75180, + "median": 15223.0, + "mad": 1658.0, + "iqr": 4645.0, + "q1": 13601.0, + "q3": 18246.0, + "min": 13248.0, + "max": 251023.0, + "mean": 16524.42, + "stddev": 3730.94, + "ops_per_sec": 65690.07, + "per_rep_median": [ + 15227.5, + 15210.5, + 15219.0, + 15230.5, + 15230.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 448, + "timed_iters": 2238, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 111729.49, + "samples": 11190, + "median": 110016.0, + "mad": 521.0, + "iqr": 2457.5, + "q1": 109638.0, + "q3": 112095.5, + "min": 109193.0, + "max": 173124.0, + "mean": 111725.57, + "stddev": 3557.34, + "ops_per_sec": 9089.59, + "per_rep_median": [ + 109715.0, + 109799.5, + 110721.0, + 117040.0, + 109802.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 67319555.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 50812402.0, + "samples": 150, + "median": 50885255.0, + "mad": 82965.5, + "iqr": 201576.75, + "q1": 50816762.75, + "q3": 51018339.5, + "min": 50656420.0, + "max": 51526343.0, + "mean": 50936844.55, + "stddev": 173809.01, + "ops_per_sec": 19.65, + "per_rep_median": [ + 50842647.5, + 50928739.0, + 50859447.5, + 50922488.0, + 50880378.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2998, + "timed_iters": 14988, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16680.45, + "samples": 74940, + "median": 15249.0, + "mad": 1645.0, + "iqr": 4578.0, + "q1": 13703.0, + "q3": 18281.0, + "min": 13292.0, + "max": 55721.0, + "mean": 16558.21, + "stddev": 3667.56, + "ops_per_sec": 65578.07, + "per_rep_median": [ + 15253.0, + 15250.5, + 15231.0, + 15239.0, + 15273.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 448, + "timed_iters": 2239, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 111638.24, + "samples": 11195, + "median": 109930.0, + "mad": 332.0, + "iqr": 1530.5, + "q1": 109655.0, + "q3": 111185.5, + "min": 109246.0, + "max": 340391.0, + "mean": 111408.75, + "stddev": 3811.17, + "ops_per_sec": 9096.7, + "per_rep_median": [ + 110015.0, + 109813.0, + 111033.0, + 109864.0, + 109863.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 51010434.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 90694456.0, + "samples": 150, + "median": 90257115.5, + "mad": 13916633.0, + "iqr": 54630807.5, + "q1": 76526983.5, + "q3": 131157791.0, + "min": 76100910.0, + "max": 257001900.0, + "mean": 106918154.33, + "stddev": 35664026.0, + "ops_per_sec": 11.08, + "per_rep_median": [ + 90013790.5, + 103860346.0, + 103808510.0, + 90153080.0, + 90131061.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2035, + "timed_iters": 10174, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24571.53, + "samples": 50870, + "median": 23354.0, + "mad": 2966.0, + "iqr": 6307.0, + "q1": 20416.0, + "q3": 26723.0, + "min": 19861.0, + "max": 82464.0, + "mean": 24424.29, + "stddev": 4995.15, + "ops_per_sec": 42819.22, + "per_rep_median": [ + 23253.5, + 23390.0, + 23349.0, + 23032.0, + 23431.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 432, + "timed_iters": 2162, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 115639.26, + "samples": 10810, + "median": 114408.0, + "mad": 265.0, + "iqr": 922.75, + "q1": 114217.0, + "q3": 115139.75, + "min": 113896.0, + "max": 344268.0, + "mean": 114994.76, + "stddev": 2683.54, + "ops_per_sec": 8740.65, + "per_rep_median": [ + 115095.0, + 114266.0, + 114711.0, + 114333.0, + 114317.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 90394877.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 65559937.0, + "samples": 150, + "median": 77485872.0, + "mad": 12158310.0, + "iqr": 46945655.75, + "q1": 65533100.25, + "q3": 112478756.0, + "min": 65152184.0, + "max": 208591158.0, + "mean": 94330526.13, + "stddev": 35280302.69, + "ops_per_sec": 12.91, + "per_rep_median": [ + 89028354.0, + 83179578.5, + 77341501.5, + 83078403.0, + 77139740.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1967, + "timed_iters": 9833, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25425.01, + "samples": 49165, + "median": 24119.0, + "mad": 1644.0, + "iqr": 4684.0, + "q1": 22505.0, + "q3": 27189.0, + "min": 22184.0, + "max": 257406.0, + "mean": 25381.46, + "stddev": 3739.65, + "ops_per_sec": 41461.09, + "per_rep_median": [ + 24148.0, + 24102.0, + 24135.0, + 24112.0, + 24097.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 441, + "timed_iters": 2206, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 113331.64, + "samples": 11030, + "median": 113075.0, + "mad": 208.0, + "iqr": 679.5, + "q1": 112932.25, + "q3": 113611.75, + "min": 112638.0, + "max": 344240.0, + "mean": 113562.29, + "stddev": 2485.36, + "ops_per_sec": 8843.69, + "per_rep_median": [ + 113493.5, + 113029.0, + 112960.0, + 113092.0, + 113173.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 77623066.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 88403281.0, + "samples": 150, + "median": 88399210.5, + "mad": 13832194.5, + "iqr": 41143686.5, + "q1": 74719905.5, + "q3": 115863592.0, + "min": 74236553.0, + "max": 335602788.0, + "mean": 105472713.47, + "stddev": 39727431.71, + "ops_per_sec": 11.31, + "per_rep_median": [ + 95231395.0, + 95196826.5, + 88373706.0, + 88239437.5, + 88410855.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1923, + "timed_iters": 9615, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26000.93, + "samples": 48075, + "median": 24703.0, + "mad": 1451.0, + "iqr": 4046.0, + "q1": 23302.0, + "q3": 27348.0, + "min": 23059.0, + "max": 253694.0, + "mean": 25828.8, + "stddev": 3246.36, + "ops_per_sec": 40480.91, + "per_rep_median": [ + 24818.0, + 24697.0, + 24672.0, + 24673.0, + 24732.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 437, + "timed_iters": 2183, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114522.37, + "samples": 10915, + "median": 114200.0, + "mad": 268.0, + "iqr": 836.0, + "q1": 113994.0, + "q3": 114830.0, + "min": 113654.0, + "max": 345768.0, + "mean": 114764.77, + "stddev": 2767.52, + "ops_per_sec": 8756.57, + "per_rep_median": [ + 114126.0, + 114289.0, + 115035.0, + 114070.0, + 114073.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 88538113.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 342, + "timed_iters": 1708, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 146374.53, + "samples": 8540, + "median": 146348.0, + "mad": 692.0, + "iqr": 1389.25, + "q1": 145562.0, + "q3": 146951.25, + "min": 143102.0, + "max": 392174.0, + "mean": 146603.23, + "stddev": 3837.24, + "ops_per_sec": 6833.03, + "per_rep_median": [ + 146324.0, + 146304.0, + 146264.0, + 146445.5, + 146415.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 257, + "timed_iters": 1286, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 194374.0, + "samples": 6430, + "median": 194560.0, + "mad": 735.5, + "iqr": 1490.5, + "q1": 193746.0, + "q3": 195236.5, + "min": 191311.0, + "max": 214726.0, + "mean": 194670.59, + "stddev": 1725.76, + "ops_per_sec": 5139.8, + "per_rep_median": [ + 194438.0, + 194455.5, + 194706.0, + 194591.0, + 194631.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 274, + "timed_iters": 1372, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 182170.38, + "samples": 6860, + "median": 181421.0, + "mad": 594.0, + "iqr": 1450.25, + "q1": 180931.0, + "q3": 182381.25, + "min": 180370.0, + "max": 3254925.0, + "mean": 186123.15, + "stddev": 100248.62, + "ops_per_sec": 5512.04, + "per_rep_median": [ + 182991.5, + 181242.0, + 181286.5, + 181267.0, + 181241.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 522329.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 167, + "timed_iters": 833, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 300051.39, + "samples": 4165, + "median": 298913.0, + "mad": 879.0, + "iqr": 1790.0, + "q1": 298133.0, + "q3": 299923.0, + "min": 295061.0, + "max": 528994.0, + "mean": 299435.12, + "stddev": 4314.69, + "ops_per_sec": 3345.46, + "per_rep_median": [ + 299544.0, + 298580.0, + 298736.0, + 299584.0, + 297985.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 129, + "timed_iters": 646, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 387008.83, + "samples": 3230, + "median": 386315.0, + "mad": 1124.0, + "iqr": 3298.25, + "q1": 385473.5, + "q3": 388771.75, + "min": 384091.0, + "max": 623911.0, + "mean": 388407.99, + "stddev": 6378.09, + "ops_per_sec": 2588.56, + "per_rep_median": [ + 385986.5, + 385712.0, + 386273.5, + 393431.5, + 386386.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 136, + "timed_iters": 681, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 367126.11, + "samples": 3405, + "median": 367192.0, + "mad": 962.0, + "iqr": 2401.0, + "q1": 366452.0, + "q3": 368853.0, + "min": 364516.0, + "max": 599788.0, + "mean": 368756.33, + "stddev": 5906.52, + "ops_per_sec": 2723.37, + "per_rep_median": [ + 366873.0, + 367112.0, + 366829.0, + 367117.0, + 373784.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1052420.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 93, + "timed_iters": 465, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 537574.76, + "samples": 2325, + "median": 529835.0, + "mad": 1361.0, + "iqr": 2730.0, + "q1": 528475.0, + "q3": 531205.0, + "min": 523949.0, + "max": 563878.0, + "mean": 529940.76, + "stddev": 2346.7, + "ops_per_sec": 1887.38, + "per_rep_median": [ + 530420.0, + 530366.0, + 530365.0, + 529410.0, + 528538.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 75, + "timed_iters": 373, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 670674.84, + "samples": 1865, + "median": 671003.0, + "mad": 1149.0, + "iqr": 2413.0, + "q1": 669964.0, + "q3": 672377.0, + "min": 666763.0, + "max": 909125.0, + "mean": 672699.63, + "stddev": 8018.09, + "ops_per_sec": 1490.31, + "per_rep_median": [ + 670098.0, + 672472.0, + 671122.0, + 671218.0, + 670925.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 78, + "timed_iters": 390, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 641077.44, + "samples": 1950, + "median": 640754.0, + "mad": 1138.5, + "iqr": 2288.75, + "q1": 639742.75, + "q3": 642031.5, + "min": 636372.0, + "max": 1470755.0, + "mean": 642334.73, + "stddev": 20172.33, + "ops_per_sec": 1560.66, + "per_rep_median": [ + 639413.0, + 641597.0, + 640425.0, + 641220.5, + 640954.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1841592.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-640-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 118, + "timed_iters": 592, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 422223.98, + "samples": 2960, + "median": 419766.5, + "mad": 1508.5, + "iqr": 3247.25, + "q1": 418417.0, + "q3": 421664.25, + "min": 416349.0, + "max": 665519.0, + "mean": 421693.3, + "stddev": 9220.1, + "ops_per_sec": 2382.28, + "per_rep_median": [ + 420974.0, + 419871.0, + 419009.0, + 418993.5, + 419357.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 111, + "timed_iters": 553, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 452433.4, + "samples": 2765, + "median": 453464.0, + "mad": 1338.0, + "iqr": 2675.0, + "q1": 452059.0, + "q3": 454734.0, + "min": 448687.0, + "max": 531785.0, + "mean": 454503.63, + "stddev": 6690.83, + "ops_per_sec": 2205.25, + "per_rep_median": [ + 453216.0, + 453292.0, + 454277.0, + 453128.0, + 453685.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 112, + "timed_iters": 561, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 445363.37, + "samples": 2805, + "median": 441386.0, + "mad": 1299.0, + "iqr": 2722.0, + "q1": 440352.0, + "q3": 443074.0, + "min": 437613.0, + "max": 679952.0, + "mean": 442906.86, + "stddev": 8500.57, + "ops_per_sec": 2265.59, + "per_rep_median": [ + 442591.0, + 441537.0, + 440989.0, + 441105.0, + 441022.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1314616.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-976-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 275, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 910477.54, + "samples": 1375, + "median": 909042.0, + "mad": 1573.0, + "iqr": 3781.0, + "q1": 907882.0, + "q3": 911663.0, + "min": 903855.0, + "max": 1066206.0, + "mean": 914892.24, + "stddev": 21102.73, + "ops_per_sec": 1100.06, + "per_rep_median": [ + 908537.0, + 909902.0, + 910102.0, + 908939.0, + 908839.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 52, + "timed_iters": 259, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 964531.87, + "samples": 1295, + "median": 963783.0, + "mad": 1972.0, + "iqr": 4610.5, + "q1": 962221.5, + "q3": 966832.0, + "min": 957597.0, + "max": 1216360.0, + "mean": 967978.55, + "stddev": 18295.22, + "ops_per_sec": 1037.58, + "per_rep_median": [ + 963473.0, + 963423.0, + 965908.0, + 963053.0, + 963940.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 53, + "timed_iters": 264, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 945998.29, + "samples": 1320, + "median": 943797.0, + "mad": 2507.5, + "iqr": 6425.75, + "q1": 941769.75, + "q3": 948195.5, + "min": 936256.0, + "max": 1117864.0, + "mean": 952754.56, + "stddev": 25485.4, + "ops_per_sec": 1059.55, + "per_rep_median": [ + 943867.5, + 945211.0, + 942279.0, + 943881.5, + 944860.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 2816622.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-1344-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 31, + "timed_iters": 153, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1636892.68, + "samples": 765, + "median": 1625942.0, + "mad": 3545.0, + "iqr": 7280.0, + "q1": 1621774.0, + "q3": 1629054.0, + "min": 1614872.0, + "max": 1673971.0, + "mean": 1626154.57, + "stddev": 7075.92, + "ops_per_sec": 615.03, + "per_rep_median": [ + 1625072.0, + 1624155.0, + 1626336.0, + 1627087.0, + 1627706.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 29, + "timed_iters": 143, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1746869.77, + "samples": 715, + "median": 1746632.0, + "mad": 3881.0, + "iqr": 8079.0, + "q1": 1743284.5, + "q3": 1751363.5, + "min": 1733248.0, + "max": 5635227.0, + "mean": 1772096.26, + "stddev": 227570.79, + "ops_per_sec": 572.53, + "per_rep_median": [ + 1746091.0, + 1746508.0, + 1745707.0, + 1747315.0, + 1748578.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 9, + "timed_iters": 47, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5289851.29, + "samples": 235, + "median": 1704306.0, + "mad": 2512.0, + "iqr": 5955.5, + "q1": 1700604.5, + "q3": 1706560.0, + "min": 1690053.0, + "max": 4962046.0, + "mean": 1809818.92, + "stddev": 503137.74, + "ops_per_sec": 586.75, + "per_rep_median": [ + 1706237.0, + 1703504.0, + 1704522.0, + 1704202.0, + 1703936.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 5076880.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5920, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8445.79, + "samples": 100000, + "median": 8429.0, + "mad": 63.0, + "iqr": 143.0, + "q1": 8384.0, + "q3": 8527.0, + "min": 8268.0, + "max": 24745.0, + "mean": 8534.61, + "stddev": 324.44, + "ops_per_sec": 118638.04, + "per_rep_median": [ + 8411.0, + 8407.0, + 8419.0, + 8472.0, + 8510.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1814, + "timed_iters": 9071, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 27560.12, + "samples": 45355, + "median": 27499.0, + "mad": 85.0, + "iqr": 214.0, + "q1": 27429.0, + "q3": 27643.0, + "min": 27188.0, + "max": 253693.0, + "mean": 27710.15, + "stddev": 1230.74, + "ops_per_sec": 36364.96, + "per_rep_median": [ + 27493.0, + 27479.0, + 27782.0, + 27470.0, + 27514.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 35928.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3729, + "timed_iters": 18646, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13407.67, + "samples": 93230, + "median": 13278.0, + "mad": 241.0, + "iqr": 489.0, + "q1": 13061.0, + "q3": 13550.0, + "min": 12458.0, + "max": 245327.0, + "mean": 13381.04, + "stddev": 920.78, + "ops_per_sec": 75312.55, + "per_rep_median": [ + 13258.0, + 13244.0, + 13257.0, + 13242.0, + 13455.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4183, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11953.27, + "samples": 100000, + "median": 11997.0, + "mad": 390.0, + "iqr": 784.0, + "q1": 11618.0, + "q3": 12402.0, + "min": 10913.0, + "max": 241790.0, + "mean": 12089.03, + "stddev": 984.63, + "ops_per_sec": 83354.17, + "per_rep_median": [ + 12051.0, + 12005.0, + 11872.0, + 12223.0, + 11901.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 3242, + "timed_iters": 16208, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 15424.66, + "samples": 81040, + "median": 15477.0, + "mad": 421.0, + "iqr": 846.0, + "q1": 15079.0, + "q3": 15925.0, + "min": 14216.0, + "max": 241632.0, + "mean": 15584.26, + "stddev": 1079.45, + "ops_per_sec": 64612.0, + "per_rep_median": [ + 15354.0, + 15430.0, + 16000.0, + 15388.0, + 15399.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 40752.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2102, + "timed_iters": 10510, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23786.8, + "samples": 52550, + "median": 23634.0, + "mad": 339.0, + "iqr": 686.0, + "q1": 23321.0, + "q3": 24007.0, + "min": 22198.0, + "max": 256235.0, + "mean": 23755.42, + "stddev": 1258.36, + "ops_per_sec": 42311.92, + "per_rep_median": [ + 23780.0, + 23546.0, + 23590.0, + 23671.0, + 23620.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2481, + "timed_iters": 12404, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20154.34, + "samples": 62020, + "median": 20089.0, + "mad": 419.0, + "iqr": 881.0, + "q1": 19716.0, + "q3": 20597.0, + "min": 19192.0, + "max": 67962.0, + "mean": 20263.87, + "stddev": 811.88, + "ops_per_sec": 49778.49, + "per_rep_median": [ + 20036.5, + 20150.0, + 20073.0, + 20023.0, + 20190.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1888, + "timed_iters": 9440, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26484.24, + "samples": 47200, + "median": 24791.5, + "mad": 429.0, + "iqr": 882.0, + "q1": 24404.0, + "q3": 25286.0, + "min": 23672.0, + "max": 256569.0, + "mean": 24939.57, + "stddev": 1343.21, + "ops_per_sec": 40336.41, + "per_rep_median": [ + 24892.0, + 24763.0, + 24739.0, + 24847.0, + 24750.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 68514.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1316, + "timed_iters": 6580, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37993.64, + "samples": 32900, + "median": 37890.0, + "mad": 510.0, + "iqr": 1057.0, + "q1": 37436.0, + "q3": 38493.0, + "min": 35703.0, + "max": 264465.0, + "mean": 38187.54, + "stddev": 1791.11, + "ops_per_sec": 26392.19, + "per_rep_median": [ + 37810.0, + 37958.0, + 38146.0, + 37776.0, + 37853.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1540, + "timed_iters": 7700, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32468.95, + "samples": 38500, + "median": 30762.0, + "mad": 573.0, + "iqr": 1240.0, + "q1": 30253.0, + "q3": 31493.0, + "min": 29696.0, + "max": 257651.0, + "mean": 31078.47, + "stddev": 1657.55, + "ops_per_sec": 32507.64, + "per_rep_median": [ + 30728.0, + 30640.0, + 30641.0, + 31101.0, + 30812.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1347, + "timed_iters": 6733, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37128.37, + "samples": 33665, + "median": 37214.0, + "mad": 603.0, + "iqr": 1302.0, + "q1": 36713.0, + "q3": 38015.0, + "min": 35947.0, + "max": 58153.0, + "mean": 37540.07, + "stddev": 1304.77, + "ops_per_sec": 26871.61, + "per_rep_median": [ + 37361.0, + 37576.0, + 37115.0, + 37046.0, + 37155.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 105866.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 9103, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5492.43, + "samples": 100000, + "median": 5553.0, + "mad": 23.0, + "iqr": 47.0, + "q1": 5531.0, + "q3": 5578.0, + "min": 5272.0, + "max": 17445.0, + "mean": 5554.1, + "stddev": 127.81, + "ops_per_sec": 180082.84, + "per_rep_median": [ + 5556.0, + 5555.0, + 5547.0, + 5549.0, + 5554.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 3534, + "timed_iters": 17669, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 14148.88, + "samples": 88345, + "median": 14148.0, + "mad": 33.0, + "iqr": 66.0, + "q1": 14116.0, + "q3": 14182.0, + "min": 13879.0, + "max": 246298.0, + "mean": 14220.79, + "stddev": 924.08, + "ops_per_sec": 70681.37, + "per_rep_median": [ + 14142.0, + 14157.0, + 14162.0, + 14136.0, + 14140.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 19701.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "secp256r1", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 7583, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6593.54, + "samples": 100000, + "median": 6611.0, + "mad": 26.0, + "iqr": 53.0, + "q1": 6582.0, + "q3": 6635.0, + "min": 6274.0, + "max": 19916.0, + "mean": 6604.95, + "stddev": 118.51, + "ops_per_sec": 151263.05, + "per_rep_median": [ + 6609.0, + 6611.0, + 6612.0, + 6602.0, + 6616.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1940, + "timed_iters": 9701, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25770.44, + "samples": 48505, + "median": 25596.0, + "mad": 104.0, + "iqr": 267.0, + "q1": 25515.0, + "q3": 25782.0, + "min": 25326.0, + "max": 44909.0, + "mean": 25807.01, + "stddev": 615.77, + "ops_per_sec": 39068.6, + "per_rep_median": [ + 25594.0, + 25587.0, + 25596.0, + 25597.0, + 25609.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 32207.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 6023, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8302.18, + "samples": 100000, + "median": 8167.0, + "mad": 47.0, + "iqr": 97.0, + "q1": 8126.0, + "q3": 8223.0, + "min": 7860.0, + "max": 238368.0, + "mean": 8240.29, + "stddev": 788.66, + "ops_per_sec": 122443.98, + "per_rep_median": [ + 8145.0, + 8162.0, + 8164.0, + 8173.0, + 8193.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 5686, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8793.95, + "samples": 100000, + "median": 8832.0, + "mad": 54.0, + "iqr": 109.0, + "q1": 8773.0, + "q3": 8882.0, + "min": 8496.0, + "max": 35350.0, + "mean": 8854.07, + "stddev": 216.3, + "ops_per_sec": 113224.64, + "per_rep_median": [ + 8842.0, + 8830.0, + 8826.0, + 8846.0, + 8808.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 5678, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8805.78, + "samples": 100000, + "median": 8783.0, + "mad": 53.0, + "iqr": 107.0, + "q1": 8732.0, + "q3": 8839.0, + "min": 8556.0, + "max": 237750.0, + "mean": 8840.11, + "stddev": 778.86, + "ops_per_sec": 113856.31, + "per_rep_median": [ + 8779.0, + 8781.0, + 8780.0, + 8792.0, + 8782.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 25782.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4540, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11013.23, + "samples": 100000, + "median": 10927.0, + "mad": 72.0, + "iqr": 173.0, + "q1": 10870.0, + "q3": 11043.0, + "min": 10561.0, + "max": 239785.0, + "mean": 11017.49, + "stddev": 780.31, + "ops_per_sec": 91516.43, + "per_rep_median": [ + 10909.0, + 10944.0, + 10918.0, + 10923.0, + 10941.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4109, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12167.24, + "samples": 100000, + "median": 12051.0, + "mad": 61.0, + "iqr": 123.0, + "q1": 11994.0, + "q3": 12117.0, + "min": 11688.0, + "max": 41707.0, + "mean": 12109.72, + "stddev": 327.91, + "ops_per_sec": 82980.67, + "per_rep_median": [ + 12049.0, + 12060.0, + 12034.0, + 12062.0, + 12051.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4027, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12416.4, + "samples": 100000, + "median": 12349.0, + "mad": 54.0, + "iqr": 110.0, + "q1": 12300.0, + "q3": 12410.0, + "min": 12084.0, + "max": 6412254.0, + "mean": 12734.58, + "stddev": 33592.09, + "ops_per_sec": 80978.22, + "per_rep_median": [ + 12368.0, + 12348.0, + 12335.0, + 12339.0, + 12355.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 35327.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2904, + "timed_iters": 14522, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17215.73, + "samples": 72610, + "median": 17254.0, + "mad": 124.0, + "iqr": 249.0, + "q1": 17132.0, + "q3": 17381.0, + "min": 16467.0, + "max": 247910.0, + "mean": 17280.79, + "stddev": 915.24, + "ops_per_sec": 57957.58, + "per_rep_median": [ + 17280.0, + 17246.0, + 17248.0, + 17261.0, + 17234.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2893, + "timed_iters": 14466, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17282.01, + "samples": 72330, + "median": 17221.0, + "mad": 128.0, + "iqr": 255.0, + "q1": 17095.0, + "q3": 17350.0, + "min": 16366.0, + "max": 242330.0, + "mean": 17253.85, + "stddev": 907.85, + "ops_per_sec": 58068.64, + "per_rep_median": [ + 17240.0, + 17210.0, + 17262.0, + 17197.0, + 17192.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1110, + "timed_iters": 5548, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45060.07, + "samples": 27740, + "median": 45093.0, + "mad": 435.0, + "iqr": 871.0, + "q1": 44661.0, + "q3": 45532.0, + "min": 43043.0, + "max": 269468.0, + "mean": 45258.64, + "stddev": 1694.85, + "ops_per_sec": 22176.39, + "per_rep_median": [ + 45136.0, + 45024.0, + 44937.0, + 45287.5, + 45083.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 79568.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4252, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11760.01, + "samples": 100000, + "median": 11748.0, + "mad": 49.0, + "iqr": 98.0, + "q1": 11702.0, + "q3": 11800.0, + "min": 11047.0, + "max": 27170.0, + "mean": 11865.39, + "stddev": 506.09, + "ops_per_sec": 85120.87, + "per_rep_median": [ + 11746.0, + 11742.0, + 11804.0, + 11742.0, + 11738.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1523, + "timed_iters": 7614, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32834.92, + "samples": 38070, + "median": 26240.0, + "mad": 10493.0, + "iqr": 20903.75, + "q1": 19980.0, + "q3": 40883.75, + "min": 15223.0, + "max": 270938.0, + "mean": 32962.27, + "stddev": 19904.37, + "ops_per_sec": 38109.76, + "per_rep_median": [ + 27515.5, + 26075.0, + 26099.0, + 26187.5, + 25996.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 4192, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11928.42, + "samples": 100000, + "median": 11905.0, + "mad": 30.0, + "iqr": 65.0, + "q1": 11880.0, + "q3": 11945.0, + "min": 11780.0, + "max": 245275.0, + "mean": 12080.83, + "stddev": 891.97, + "ops_per_sec": 83998.32, + "per_rep_median": [ + 11898.0, + 11908.0, + 11950.0, + 11899.0, + 11898.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 49893.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2471, + "timed_iters": 12357, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20232.17, + "samples": 61785, + "median": 20136.0, + "mad": 85.0, + "iqr": 202.0, + "q1": 20066.0, + "q3": 20268.0, + "min": 19768.0, + "max": 249403.0, + "mean": 20549.47, + "stddev": 1371.78, + "ops_per_sec": 49662.3, + "per_rep_median": [ + 20117.0, + 20123.0, + 20309.0, + 20211.0, + 20090.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 931, + "timed_iters": 4656, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 53694.18, + "samples": 23280, + "median": 44542.0, + "mad": 15226.0, + "iqr": 35599.0, + "q1": 31073.0, + "q3": 66672.0, + "min": 24079.0, + "max": 339245.0, + "mean": 53871.04, + "stddev": 32352.22, + "ops_per_sec": 22450.72, + "per_rep_median": [ + 44689.5, + 44619.0, + 44608.5, + 44029.5, + 44738.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2487, + "timed_iters": 12437, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20102.01, + "samples": 62185, + "median": 19816.0, + "mad": 47.0, + "iqr": 94.0, + "q1": 19772.0, + "q3": 19866.0, + "min": 19579.0, + "max": 78124.0, + "mean": 19919.08, + "stddev": 517.5, + "ops_per_sec": 50464.27, + "per_rep_median": [ + 19818.0, + 19818.0, + 19823.0, + 19813.0, + 19809.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 84494.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1576, + "timed_iters": 7881, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31722.8, + "samples": 39405, + "median": 31642.0, + "mad": 91.0, + "iqr": 184.0, + "q1": 31547.0, + "q3": 31731.0, + "min": 30616.0, + "max": 526030.0, + "mean": 31751.26, + "stddev": 2602.7, + "ops_per_sec": 31603.56, + "per_rep_median": [ + 31649.0, + 31668.0, + 31649.0, + 31618.0, + 31633.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 770, + "timed_iters": 3849, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 64945.31, + "samples": 19245, + "median": 54913.0, + "mad": 17697.0, + "iqr": 34569.0, + "q1": 40245.0, + "q3": 74814.0, + "min": 36795.0, + "max": 352137.0, + "mean": 63725.77, + "stddev": 30705.88, + "ops_per_sec": 18210.62, + "per_rep_median": [ + 54544.0, + 54818.0, + 55005.0, + 55148.0, + 54989.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1593, + "timed_iters": 7967, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31378.8, + "samples": 39835, + "median": 31184.0, + "mad": 68.0, + "iqr": 139.0, + "q1": 31120.0, + "q3": 31259.0, + "min": 30912.0, + "max": 516138.0, + "mean": 31391.78, + "stddev": 2543.99, + "ops_per_sec": 32067.73, + "per_rep_median": [ + 31186.0, + 31205.0, + 31181.0, + 31180.0, + 31169.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 117739.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3322431.73, + "samples": 375, + "median": 2990634.0, + "mad": 353085.0, + "iqr": 809186.5, + "q1": 2697942.5, + "q3": 3507129.0, + "min": 2541641.0, + "max": 7498267.0, + "mean": 3199526.54, + "stddev": 686395.86, + "ops_per_sec": 334.38, + "per_rep_median": [ + 2917810.0, + 2987417.0, + 2919116.0, + 3019137.0, + 3025060.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 499, + "timed_iters": 2496, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100141.95, + "samples": 12480, + "median": 100502.0, + "mad": 925.0, + "iqr": 1851.0, + "q1": 99610.0, + "q3": 101461.0, + "min": 95437.0, + "max": 332214.0, + "mean": 100734.82, + "stddev": 2825.42, + "ops_per_sec": 9950.05, + "per_rep_median": [ + 100521.0, + 100484.5, + 100431.5, + 100515.0, + 100549.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2460, + "timed_iters": 12301, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20323.39, + "samples": 61505, + "median": 20078.0, + "mad": 39.0, + "iqr": 80.0, + "q1": 20042.0, + "q3": 20122.0, + "min": 19774.0, + "max": 252267.0, + "mean": 20137.34, + "stddev": 987.56, + "ops_per_sec": 49805.76, + "per_rep_median": [ + 20061.0, + 20068.0, + 20097.0, + 20085.0, + 20090.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 3111214.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10407650.33, + "samples": 150, + "median": 9183299.0, + "mad": 648047.0, + "iqr": 1763013.0, + "q1": 8703488.75, + "q3": 10466501.75, + "min": 8307256.0, + "max": 24483010.0, + "mean": 10152713.42, + "stddev": 2469552.4, + "ops_per_sec": 108.89, + "per_rep_median": [ + 9303793.0, + 9130319.0, + 9148784.0, + 9834821.5, + 8852508.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 250, + "timed_iters": 1251, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 199771.3, + "samples": 6255, + "median": 199608.0, + "mad": 1371.0, + "iqr": 2734.5, + "q1": 198293.5, + "q3": 201028.0, + "min": 193382.0, + "max": 432201.0, + "mean": 199856.94, + "stddev": 3792.77, + "ops_per_sec": 5009.82, + "per_rep_median": [ + 199136.0, + 199259.0, + 199632.0, + 199503.0, + 200934.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1249, + "timed_iters": 6243, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 40042.45, + "samples": 31215, + "median": 39319.0, + "mad": 247.0, + "iqr": 505.0, + "q1": 39085.0, + "q3": 39590.0, + "min": 38611.0, + "max": 58289.0, + "mean": 39458.96, + "stddev": 645.61, + "ops_per_sec": 25433.0, + "per_rep_median": [ + 39619.0, + 39532.0, + 39145.0, + 39367.0, + 39131.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 9422226.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 96, + "timed_iters": 479, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 522407.56, + "samples": 2395, + "median": 521718.0, + "mad": 1080.0, + "iqr": 2412.5, + "q1": 520785.0, + "q3": 523197.5, + "min": 518559.0, + "max": 754545.0, + "mean": 525539.59, + "stddev": 11431.06, + "ops_per_sec": 1916.74, + "per_rep_median": [ + 521501.0, + 523786.0, + 521689.0, + 521610.0, + 521383.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12592376.0, + "samples": 150, + "median": 12241336.5, + "mad": 17780.0, + "iqr": 42615.25, + "q1": 12228096.75, + "q3": 12270712.0, + "min": 12204563.0, + "max": 13043541.0, + "mean": 12321360.96, + "stddev": 189275.46, + "ops_per_sec": 81.69, + "per_rep_median": [ + 12234330.5, + 12240148.5, + 12237726.0, + 12234324.5, + 12260772.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 68, + "timed_iters": 342, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 730381.6, + "samples": 1710, + "median": 727143.0, + "mad": 7066.0, + "iqr": 17552.5, + "q1": 720742.0, + "q3": 738294.5, + "min": 717680.0, + "max": 959524.0, + "mean": 730731.37, + "stddev": 12825.38, + "ops_per_sec": 1375.25, + "per_rep_median": [ + 724056.0, + 730034.5, + 728622.5, + 725913.5, + 725590.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 13490197.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33377579.0, + "samples": 150, + "median": 33373943.5, + "mad": 37094.0, + "iqr": 81154.0, + "q1": 33339236.0, + "q3": 33420390.0, + "min": 33302891.0, + "max": 35573837.0, + "mean": 33556354.75, + "stddev": 497879.96, + "ops_per_sec": 29.96, + "per_rep_median": [ + 33412346.5, + 33378635.5, + 33361052.5, + 33338440.5, + 33351407.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 254156399.0, + "samples": 150, + "median": 255742694.0, + "mad": 1325985.0, + "iqr": 3946790.75, + "q1": 254532209.5, + "q3": 258479000.25, + "min": 253979677.0, + "max": 331161483.0, + "mean": 257727116.01, + "stddev": 8024233.97, + "ops_per_sec": 3.91, + "per_rep_median": [ + 255884333.0, + 254625878.0, + 256463598.0, + 256930021.0, + 255389098.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 205, + "timed_iters": 1023, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 244385.02, + "samples": 5115, + "median": 242049.0, + "mad": 654.0, + "iqr": 1530.0, + "q1": 241493.5, + "q3": 243023.5, + "min": 240752.0, + "max": 466676.0, + "mean": 244223.05, + "stddev": 6016.02, + "ops_per_sec": 4131.39, + "per_rep_median": [ + 242008.0, + 241905.0, + 242140.0, + 242105.0, + 242114.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 289358686.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 64, + "timed_iters": 322, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 776401.1, + "samples": 1610, + "median": 773992.0, + "mad": 2112.5, + "iqr": 8067.5, + "q1": 772427.0, + "q3": 780494.5, + "min": 769714.0, + "max": 918856.0, + "mean": 779121.66, + "stddev": 13465.32, + "ops_per_sec": 1292.0, + "per_rep_median": [ + 773280.5, + 773860.0, + 773308.0, + 775052.5, + 775110.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20399409.67, + "samples": 150, + "median": 20407963.5, + "mad": 25753.0, + "iqr": 67037.25, + "q1": 20386031.0, + "q3": 20453068.25, + "min": 20339693.0, + "max": 21390135.0, + "mean": 20500486.29, + "stddev": 231939.3, + "ops_per_sec": 49.0, + "per_rep_median": [ + 20410864.5, + 20406412.5, + 20408799.0, + 20404348.0, + 20407342.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 45, + "timed_iters": 223, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1120869.68, + "samples": 1115, + "median": 1113882.0, + "mad": 2372.0, + "iqr": 13086.0, + "q1": 1111978.0, + "q3": 1125064.0, + "min": 1109514.0, + "max": 1351945.0, + "mean": 1119339.68, + "stddev": 12883.1, + "ops_per_sec": 897.76, + "per_rep_median": [ + 1113266.0, + 1114219.0, + 1113199.0, + 1113335.0, + 1114715.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 22295837.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 24, + "timed_iters": 122, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2051102.67, + "samples": 610, + "median": 2051162.5, + "mad": 7723.5, + "iqr": 19895.75, + "q1": 2045255.25, + "q3": 2065151.0, + "min": 2038465.0, + "max": 2379978.0, + "mean": 2064413.94, + "stddev": 43154.85, + "ops_per_sec": 487.53, + "per_rep_median": [ + 2047339.0, + 2053649.5, + 2068579.5, + 2047592.5, + 2048717.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 42446634.0, + "samples": 150, + "median": 42600336.5, + "mad": 89270.5, + "iqr": 184126.5, + "q1": 42528657.25, + "q3": 42712783.75, + "min": 42405479.0, + "max": 44046297.0, + "mean": 42694407.32, + "stddev": 306746.81, + "ops_per_sec": 23.47, + "per_rep_median": [ + 42664453.0, + 42557016.0, + 42632050.0, + 42562433.0, + 42602067.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 45, + "timed_iters": 223, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1121084.87, + "samples": 1115, + "median": 1115858.0, + "mad": 2517.0, + "iqr": 13178.5, + "q1": 1113952.5, + "q3": 1127131.0, + "min": 1111076.0, + "max": 4966080.0, + "mean": 1137148.64, + "stddev": 204869.11, + "ops_per_sec": 896.17, + "per_rep_median": [ + 1115323.0, + 1115619.0, + 1116379.0, + 1115978.0, + 1115760.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 45767357.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 192, + "timed_iters": 958, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 261030.46, + "samples": 4790, + "median": 134076.5, + "mad": 411.0, + "iqr": 871.0, + "q1": 133767.0, + "q3": 134638.0, + "min": 133066.0, + "max": 2952456.0, + "mean": 136629.06, + "stddev": 61047.82, + "ops_per_sec": 7458.43, + "per_rep_median": [ + 136329.0, + 133979.0, + 133957.0, + 133991.0, + 133978.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 79, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3157992.33, + "samples": 395, + "median": 3160673.0, + "mad": 7135.0, + "iqr": 22280.5, + "q1": 3155318.0, + "q3": 3177598.5, + "min": 3145694.0, + "max": 3502367.0, + "mean": 3177627.09, + "stddev": 47446.69, + "ops_per_sec": 316.39, + "per_rep_median": [ + 3170327.0, + 3158540.0, + 3155896.0, + 3184229.0, + 3163442.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 209, + "timed_iters": 1043, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 239786.9, + "samples": 5215, + "median": 239404.0, + "mad": 639.0, + "iqr": 1341.5, + "q1": 238873.0, + "q3": 240214.5, + "min": 237549.0, + "max": 467422.0, + "mean": 240530.87, + "stddev": 5619.7, + "ops_per_sec": 4177.04, + "per_rep_median": [ + 239270.0, + 239088.0, + 239913.0, + 239878.0, + 239395.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 3534153.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 6, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8516436.57, + "samples": 150, + "median": 8521316.5, + "mad": 7189.0, + "iqr": 14804.5, + "q1": 8515513.25, + "q3": 8530317.75, + "min": 8493725.0, + "max": 8875318.0, + "mean": 8544530.09, + "stddev": 68835.41, + "ops_per_sec": 117.35, + "per_rep_median": [ + 8525382.5, + 8520157.0, + 8522693.0, + 8602855.0, + 8516902.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 64994306.0, + "samples": 150, + "median": 65101880.0, + "mad": 128570.0, + "iqr": 862177.25, + "q1": 65011017.25, + "q3": 65873194.5, + "min": 64938017.0, + "max": 67901160.0, + "mean": 65460841.28, + "stddev": 659256.23, + "ops_per_sec": 15.36, + "per_rep_median": [ + 65105450.5, + 65231453.0, + 65092476.0, + 65083161.5, + 65148185.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 536, + "timed_iters": 2679, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 93321.18, + "samples": 13395, + "median": 93135.0, + "mad": 353.0, + "iqr": 960.5, + "q1": 92865.0, + "q3": 93825.5, + "min": 92335.0, + "max": 126366.0, + "mean": 93724.28, + "stddev": 1874.1, + "ops_per_sec": 10737.1, + "per_rep_median": [ + 93151.0, + 93176.0, + 92856.0, + 93133.0, + 93735.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 73716331.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 247, + "timed_iters": 1236, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 202209.94, + "samples": 6180, + "median": 202329.0, + "mad": 616.0, + "iqr": 1346.5, + "q1": 201811.0, + "q3": 203157.5, + "min": 200847.0, + "max": 430656.0, + "mean": 203222.35, + "stddev": 4379.59, + "ops_per_sec": 4942.45, + "per_rep_median": [ + 201974.5, + 202691.5, + 203587.0, + 202194.5, + 202143.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 9, + "timed_iters": 45, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5548091.14, + "samples": 225, + "median": 5539384.0, + "mad": 3657.0, + "iqr": 10118.0, + "q1": 5536426.0, + "q3": 5546544.0, + "min": 5531492.0, + "max": 5797150.0, + "mean": 5557036.85, + "stddev": 46647.55, + "ops_per_sec": 180.53, + "per_rep_median": [ + 5550859.0, + 5539009.0, + 5537637.0, + 5538465.0, + 5542675.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 132, + "timed_iters": 660, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 378807.65, + "samples": 3300, + "median": 377806.5, + "mad": 755.0, + "iqr": 1616.5, + "q1": 377137.0, + "q3": 378753.5, + "min": 375412.0, + "max": 603490.0, + "mean": 379692.34, + "stddev": 8603.61, + "ops_per_sec": 2646.86, + "per_rep_median": [ + 377615.5, + 377916.5, + 377698.5, + 378211.0, + 377759.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 6119519.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 94, + "timed_iters": 470, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 532421.81, + "samples": 2350, + "median": 532266.0, + "mad": 1009.0, + "iqr": 3301.75, + "q1": 531482.25, + "q3": 534784.0, + "min": 530322.0, + "max": 3619456.0, + "mean": 550396.07, + "stddev": 173589.25, + "ops_per_sec": 1878.76, + "per_rep_median": [ + 531769.0, + 531927.5, + 555556.5, + 531900.0, + 532251.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11348358.33, + "samples": 150, + "median": 11352566.5, + "mad": 18647.5, + "iqr": 152075.25, + "q1": 11343080.5, + "q3": 11495155.75, + "min": 11327219.0, + "max": 12177510.0, + "mean": 11447497.43, + "stddev": 177012.06, + "ops_per_sec": 88.09, + "per_rep_median": [ + 11348082.0, + 11493112.5, + 11385633.5, + 11507309.0, + 11336192.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 129, + "timed_iters": 646, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 387057.35, + "samples": 3230, + "median": 387175.0, + "mad": 831.0, + "iqr": 1778.25, + "q1": 386450.5, + "q3": 388228.75, + "min": 384499.0, + "max": 432917.0, + "mean": 388175.78, + "stddev": 3926.74, + "ops_per_sec": 2582.81, + "per_rep_median": [ + 387355.0, + 388356.0, + 386733.5, + 386727.5, + 387272.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 12272007.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5552, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9006.32, + "samples": 100000, + "median": 8573.0, + "mad": 53.0, + "iqr": 127.0, + "q1": 8535.0, + "q3": 8662.0, + "min": 8429.0, + "max": 28119.0, + "mean": 8611.23, + "stddev": 187.16, + "ops_per_sec": 116645.28, + "per_rep_median": [ + 8570.0, + 8572.5, + 8572.0, + 8578.0, + 8574.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5539, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9026.76, + "samples": 100000, + "median": 8995.0, + "mad": 36.0, + "iqr": 84.0, + "q1": 8965.0, + "q3": 9049.0, + "min": 8828.0, + "max": 234442.0, + "mean": 9161.15, + "stddev": 841.28, + "ops_per_sec": 111172.87, + "per_rep_median": [ + 8988.0, + 8986.0, + 8987.0, + 8986.0, + 9622.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1831, + "timed_iters": 9153, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 27312.74, + "samples": 45765, + "median": 27267.0, + "mad": 38.0, + "iqr": 78.0, + "q1": 27233.0, + "q3": 27311.0, + "min": 27053.0, + "max": 253225.0, + "mean": 27357.33, + "stddev": 1111.3, + "ops_per_sec": 36674.37, + "per_rep_median": [ + 27270.0, + 27263.0, + 27268.0, + 27273.0, + 27263.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 2391, + "timed_iters": 11956, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20910.64, + "samples": 59780, + "median": 20761.0, + "mad": 73.0, + "iqr": 164.0, + "q1": 20700.0, + "q3": 20864.0, + "min": 20538.0, + "max": 37538.0, + "mean": 20905.03, + "stddev": 489.67, + "ops_per_sec": 48167.24, + "per_rep_median": [ + 20798.0, + 20761.0, + 20741.0, + 20743.0, + 20782.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 44835.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 617, + "timed_iters": 3085, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 81046.13, + "samples": 15425, + "median": 79271.0, + "mad": 426.0, + "iqr": 1021.0, + "q1": 78935.0, + "q3": 79956.0, + "min": 78000.0, + "max": 317038.0, + "mean": 79871.11, + "stddev": 2666.34, + "ops_per_sec": 12614.95, + "per_rep_median": [ + 79362.0, + 79243.0, + 79096.0, + 79621.0, + 79219.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 277, + "timed_iters": 1384, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 180656.31, + "samples": 6920, + "median": 117906.5, + "mad": 69160.5, + "iqr": 138239.5, + "q1": 81357.75, + "q3": 219597.25, + "min": 47242.0, + "max": 1363567.0, + "mean": 165888.79, + "stddev": 133964.58, + "ops_per_sec": 8481.3, + "per_rep_median": [ + 117844.0, + 117450.5, + 118706.0, + 117481.0, + 118100.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1090, + "timed_iters": 5448, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45888.59, + "samples": 27240, + "median": 45100.0, + "mad": 157.0, + "iqr": 451.0, + "q1": 44976.0, + "q3": 45427.0, + "min": 44622.0, + "max": 269607.0, + "mean": 45647.18, + "stddev": 1966.37, + "ops_per_sec": 22172.95, + "per_rep_median": [ + 45198.0, + 45041.0, + 45042.0, + 45244.5, + 45093.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 2505, + "timed_iters": 12525, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19960.75, + "samples": 62625, + "median": 19981.0, + "mad": 96.0, + "iqr": 288.0, + "q1": 19906.0, + "q3": 20194.0, + "min": 19662.0, + "max": 41046.0, + "mean": 20255.83, + "stddev": 726.2, + "ops_per_sec": 50047.55, + "per_rep_median": [ + 20055.0, + 20201.0, + 19963.0, + 19954.0, + 19952.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 242277.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 401, + "timed_iters": 2005, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 124676.58, + "samples": 10025, + "median": 123305.0, + "mad": 533.0, + "iqr": 1144.0, + "q1": 122850.0, + "q3": 123994.0, + "min": 121343.0, + "max": 359412.0, + "mean": 123688.4, + "stddev": 2849.7, + "ops_per_sec": 8109.97, + "per_rep_median": [ + 123297.0, + 123200.0, + 123469.0, + 123319.0, + 123288.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 175, + "timed_iters": 873, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 286531.09, + "samples": 4365, + "median": 210081.0, + "mad": 96745.0, + "iqr": 239196.0, + "q1": 114919.0, + "q3": 354115.0, + "min": 66370.0, + "max": 2312561.0, + "mean": 265831.68, + "stddev": 219908.28, + "ops_per_sec": 4760.07, + "per_rep_median": [ + 209554.0, + 210550.0, + 165127.0, + 210894.0, + 210877.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 690, + "timed_iters": 3449, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 72482.23, + "samples": 17245, + "median": 70811.0, + "mad": 413.0, + "iqr": 958.0, + "q1": 70479.0, + "q3": 71437.0, + "min": 69910.0, + "max": 294401.0, + "mean": 71376.46, + "stddev": 2572.73, + "ops_per_sec": 14122.1, + "per_rep_median": [ + 70821.0, + 70598.0, + 71033.0, + 70815.0, + 70893.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 1805, + "timed_iters": 9023, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 27707.86, + "samples": 45115, + "median": 27698.0, + "mad": 101.0, + "iqr": 238.0, + "q1": 27615.0, + "q3": 27853.0, + "min": 27339.0, + "max": 3086937.0, + "mean": 28838.25, + "stddev": 47406.54, + "ops_per_sec": 36103.69, + "per_rep_median": [ + 27636.0, + 27899.0, + 27690.0, + 27700.0, + 27720.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 404197.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 240, + "timed_iters": 1200, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 208276.17, + "samples": 6000, + "median": 191649.0, + "mad": 980.0, + "iqr": 3187.25, + "q1": 190910.0, + "q3": 194097.25, + "min": 189642.0, + "max": 453712.0, + "mean": 195512.21, + "stddev": 8747.84, + "ops_per_sec": 5217.87, + "per_rep_median": [ + 208081.5, + 191297.5, + 191393.0, + 191357.0, + 191253.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 188, + "timed_iters": 939, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 266277.37, + "samples": 4695, + "median": 224218.0, + "mad": 132629.0, + "iqr": 266741.5, + "q1": 92707.5, + "q3": 359449.0, + "min": 89805.0, + "max": 1829469.0, + "mean": 282131.93, + "stddev": 221461.42, + "ops_per_sec": 4459.95, + "per_rep_median": [ + 224364.0, + 224226.0, + 224770.0, + 224123.0, + 223653.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 433, + "timed_iters": 2164, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 115531.48, + "samples": 10820, + "median": 115503.0, + "mad": 507.0, + "iqr": 1131.5, + "q1": 115067.75, + "q3": 116199.25, + "min": 114295.0, + "max": 346735.0, + "mean": 116564.6, + "stddev": 4037.9, + "ops_per_sec": 8657.78, + "per_rep_median": [ + 115432.0, + 115389.0, + 115598.5, + 115835.0, + 115397.5 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 1243, + "timed_iters": 6214, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 40229.86, + "samples": 31070, + "median": 40103.0, + "mad": 120.0, + "iqr": 290.0, + "q1": 40005.0, + "q3": 40295.0, + "min": 39701.0, + "max": 266051.0, + "mean": 40254.85, + "stddev": 1379.24, + "ops_per_sec": 24935.79, + "per_rep_median": [ + 40185.5, + 40082.0, + 40086.0, + 40046.0, + 40197.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 531370.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 259, + "timed_iters": 1297, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 192710.92, + "samples": 6485, + "median": 191561.0, + "mad": 230.0, + "iqr": 625.0, + "q1": 191425.0, + "q3": 192050.0, + "min": 191071.0, + "max": 207172.0, + "mean": 191780.98, + "stddev": 760.15, + "ops_per_sec": 5220.27, + "per_rep_median": [ + 191565.0, + 191495.0, + 191583.0, + 191579.0, + 191556.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 11, + "timed_iters": 55, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4522443.86, + "samples": 275, + "median": 4505538.0, + "mad": 3109.0, + "iqr": 7309.5, + "q1": 4503115.0, + "q3": 4510424.5, + "min": 4498411.0, + "max": 4802525.0, + "mean": 4513530.93, + "stddev": 30751.25, + "ops_per_sec": 221.95, + "per_rep_median": [ + 4505101.0, + 4510024.0, + 4503781.0, + 4506149.0, + 4505538.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 189, + "timed_iters": 944, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 264935.02, + "samples": 4720, + "median": 264825.5, + "mad": 435.0, + "iqr": 871.0, + "q1": 264353.0, + "q3": 265224.0, + "min": 263913.0, + "max": 490185.0, + "mean": 265273.08, + "stddev": 4210.54, + "ops_per_sec": 3776.07, + "per_rep_median": [ + 265125.5, + 264560.5, + 265074.0, + 264380.0, + 264416.5 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 189, + "timed_iters": 947, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 263887.52, + "samples": 4735, + "median": 263289.0, + "mad": 297.0, + "iqr": 712.5, + "q1": 263148.0, + "q3": 263860.5, + "min": 262701.0, + "max": 899387.0, + "mean": 263880.25, + "stddev": 10015.15, + "ops_per_sec": 3798.11, + "per_rep_median": [ + 263415.0, + 263249.0, + 263224.0, + 263622.0, + 263346.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 4961924.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12213225.67, + "samples": 150, + "median": 12185176.5, + "mad": 13298.5, + "iqr": 26116.25, + "q1": 12174147.5, + "q3": 12200263.75, + "min": 12143765.0, + "max": 12567145.0, + "mean": 12194761.75, + "stddev": 45576.74, + "ops_per_sec": 82.07, + "per_rep_median": [ + 12179142.5, + 12179229.5, + 12175829.5, + 12199222.5, + 12191934.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 93835899.0, + "samples": 150, + "median": 93971360.0, + "mad": 72009.5, + "iqr": 155367.75, + "q1": 93911552.5, + "q3": 94066920.25, + "min": 93822325.0, + "max": 146119771.0, + "mean": 94551687.69, + "stddev": 4748961.88, + "ops_per_sec": 10.64, + "per_rep_median": [ + 93983889.0, + 93965890.5, + 93950340.5, + 93962017.0, + 93993508.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 519, + "timed_iters": 2593, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 96422.88, + "samples": 12965, + "median": 96335.0, + "mad": 49.0, + "iqr": 214.0, + "q1": 96297.0, + "q3": 96511.0, + "min": 96154.0, + "max": 326216.0, + "mean": 96502.54, + "stddev": 2122.88, + "ops_per_sec": 10380.44, + "per_rep_median": [ + 96372.0, + 96354.0, + 96342.0, + 96323.0, + 96307.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 512, + "timed_iters": 2562, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 97579.04, + "samples": 12810, + "median": 97522.0, + "mad": 39.0, + "iqr": 84.0, + "q1": 97493.0, + "q3": 97577.0, + "min": 97369.0, + "max": 322758.0, + "mean": 97778.33, + "stddev": 2357.08, + "ops_per_sec": 10254.1, + "per_rep_median": [ + 97507.0, + 97522.0, + 97521.0, + 97534.0, + 97535.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 106252871.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 174, + "timed_iters": 868, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 288093.0, + "samples": 4340, + "median": 287847.5, + "mad": 414.0, + "iqr": 898.25, + "q1": 287566.0, + "q3": 288464.25, + "min": 287031.0, + "max": 337565.0, + "mean": 288328.91, + "stddev": 2028.59, + "ops_per_sec": 3474.06, + "per_rep_median": [ + 287701.5, + 288754.0, + 287674.5, + 287681.0, + 287772.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 6, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8351246.43, + "samples": 150, + "median": 8347167.0, + "mad": 11107.0, + "iqr": 22081.75, + "q1": 8336126.25, + "q3": 8358208.0, + "min": 8321581.0, + "max": 8625359.0, + "mean": 8358546.89, + "stddev": 46546.97, + "ops_per_sec": 119.8, + "per_rep_median": [ + 8362043.5, + 8340432.0, + 8342536.0, + 8348730.5, + 8351304.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 111, + "timed_iters": 555, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 450826.65, + "samples": 2775, + "median": 445671.0, + "mad": 1285.0, + "iqr": 11212.5, + "q1": 444818.5, + "q3": 456031.0, + "min": 443798.0, + "max": 689368.0, + "mean": 451788.48, + "stddev": 11921.19, + "ops_per_sec": 2243.81, + "per_rep_median": [ + 445342.0, + 445272.0, + 446397.0, + 445553.0, + 446346.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 111, + "timed_iters": 554, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 450888.06, + "samples": 2770, + "median": 448934.0, + "mad": 556.0, + "iqr": 1139.0, + "q1": 448383.0, + "q3": 449522.0, + "min": 447579.0, + "max": 680885.0, + "mean": 450521.27, + "stddev": 7535.8, + "ops_per_sec": 2227.5, + "per_rep_median": [ + 448833.5, + 449045.0, + 449202.5, + 448888.5, + 448754.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 9080685.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 61, + "timed_iters": 305, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 819541.73, + "samples": 1525, + "median": 819343.0, + "mad": 803.0, + "iqr": 2096.0, + "q1": 818647.0, + "q3": 820743.0, + "min": 817401.0, + "max": 1050956.0, + "mean": 820631.21, + "stddev": 6910.73, + "ops_per_sec": 1220.49, + "per_rep_median": [ + 819258.0, + 819712.0, + 819765.0, + 818507.0, + 819890.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 3, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18299408.0, + "samples": 150, + "median": 18238139.5, + "mad": 22706.5, + "iqr": 56138.25, + "q1": 18221503.5, + "q3": 18277641.75, + "min": 18184643.0, + "max": 18607858.0, + "mean": 18255220.8, + "stddev": 54745.01, + "ops_per_sec": 54.83, + "per_rep_median": [ + 18231025.0, + 18261540.0, + 18234822.0, + 18245047.5, + 18233622.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 103, + "timed_iters": 513, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 487550.38, + "samples": 2565, + "median": 482067.0, + "mad": 1698.0, + "iqr": 14810.0, + "q1": 480981.0, + "q3": 495791.0, + "min": 480112.0, + "max": 747372.0, + "mean": 489557.19, + "stddev": 12738.63, + "ops_per_sec": 2074.4, + "per_rep_median": [ + 481787.0, + 481373.0, + 486548.0, + 488324.0, + 481836.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 101, + "timed_iters": 505, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 494612.02, + "samples": 2525, + "median": 480441.0, + "mad": 861.0, + "iqr": 8653.0, + "q1": 479839.0, + "q3": 488492.0, + "min": 478821.0, + "max": 713616.0, + "mean": 485423.85, + "stddev": 10821.7, + "ops_per_sec": 2081.42, + "per_rep_median": [ + 481405.0, + 480220.0, + 480066.0, + 482019.0, + 480248.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 19539549.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8850, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5649.44, + "samples": 100000, + "median": 5670.0, + "mad": 30.0, + "iqr": 60.0, + "q1": 5636.0, + "q3": 5696.0, + "min": 5362.0, + "max": 236141.0, + "mean": 5670.32, + "stddev": 741.64, + "ops_per_sec": 176366.84, + "per_rep_median": [ + 5650.0, + 5679.0, + 5671.0, + 5666.0, + 5674.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 10776, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4639.86, + "samples": 100000, + "median": 4596.0, + "mad": 22.0, + "iqr": 54.0, + "q1": 4578.0, + "q3": 4632.0, + "min": 4477.0, + "max": 25621.0, + "mean": 4638.03, + "stddev": 148.77, + "ops_per_sec": 217580.5, + "per_rep_median": [ + 4594.0, + 4596.0, + 4599.0, + 4596.0, + 4596.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2305, + "timed_iters": 11525, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21692.84, + "samples": 57625, + "median": 21614.0, + "mad": 93.0, + "iqr": 186.0, + "q1": 21524.0, + "q3": 21710.0, + "min": 20883.0, + "max": 246443.0, + "mean": 21755.96, + "stddev": 1070.5, + "ops_per_sec": 46266.31, + "per_rep_median": [ + 21611.0, + 21621.0, + 21611.0, + 21619.0, + 21610.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 31880.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2530, + "timed_iters": 12648, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19766.02, + "samples": 63240, + "median": 19776.0, + "mad": 105.0, + "iqr": 212.0, + "q1": 19666.0, + "q3": 19878.0, + "min": 18047.0, + "max": 29797.0, + "mean": 19776.41, + "stddev": 373.4, + "ops_per_sec": 50566.34, + "per_rep_median": [ + 19764.0, + 19757.0, + 19792.0, + 19776.0, + 19791.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 830, + "timed_iters": 4148, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 60264.51, + "samples": 20740, + "median": 47214.0, + "mad": 19288.5, + "iqr": 38532.75, + "q1": 35292.0, + "q3": 73824.75, + "min": 26370.0, + "max": 378397.0, + "mean": 59536.56, + "stddev": 37126.86, + "ops_per_sec": 21180.16, + "per_rep_median": [ + 47787.5, + 47042.0, + 46964.5, + 47243.0, + 47213.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 2815, + "timed_iters": 14077, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17759.32, + "samples": 70385, + "median": 17706.0, + "mad": 88.0, + "iqr": 190.0, + "q1": 17630.0, + "q3": 17820.0, + "min": 17332.0, + "max": 245729.0, + "mean": 17910.59, + "stddev": 1061.9, + "ops_per_sec": 56478.03, + "per_rep_median": [ + 17684.0, + 17737.0, + 17776.0, + 17677.0, + 17699.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 84696.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1147, + "timed_iters": 5736, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43584.94, + "samples": 28680, + "median": 43485.0, + "mad": 265.0, + "iqr": 533.0, + "q1": 43237.0, + "q3": 43770.0, + "min": 41989.0, + "max": 63941.0, + "mean": 43617.05, + "stddev": 780.78, + "ops_per_sec": 22996.44, + "per_rep_median": [ + 43484.0, + 43488.0, + 43459.0, + 43496.0, + 43500.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 561, + "timed_iters": 2803, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 89194.45, + "samples": 14015, + "median": 74622.0, + "mad": 26597.0, + "iqr": 60097.0, + "q1": 51494.5, + "q3": 111591.5, + "min": 39818.0, + "max": 581673.0, + "mean": 90379.26, + "stddev": 55038.15, + "ops_per_sec": 13400.87, + "per_rep_median": [ + 75026.0, + 73789.0, + 74924.0, + 74203.0, + 75061.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1685, + "timed_iters": 8425, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 29672.14, + "samples": 42125, + "median": 29147.0, + "mad": 112.0, + "iqr": 235.0, + "q1": 29049.0, + "q3": 29284.0, + "min": 28616.0, + "max": 43287.0, + "mean": 29346.93, + "stddev": 747.93, + "ops_per_sec": 34308.85, + "per_rep_median": [ + 29245.0, + 29122.0, + 29140.0, + 29134.0, + 29133.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 147254.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 975, + "timed_iters": 4874, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 51287.86, + "samples": 24370, + "median": 51241.0, + "mad": 185.0, + "iqr": 371.0, + "q1": 51059.0, + "q3": 51430.0, + "min": 48780.0, + "max": 283647.0, + "mean": 51506.3, + "stddev": 1977.65, + "ops_per_sec": 19515.62, + "per_rep_median": [ + 51226.0, + 51321.5, + 51225.0, + 51207.0, + 51239.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 410, + "timed_iters": 2052, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 121845.41, + "samples": 10260, + "median": 96258.0, + "mad": 33090.5, + "iqr": 66223.5, + "q1": 70887.0, + "q3": 137110.5, + "min": 61342.0, + "max": 580378.0, + "mean": 114645.14, + "stddev": 60325.61, + "ops_per_sec": 10388.75, + "per_rep_median": [ + 96784.5, + 95139.0, + 94736.0, + 100259.5, + 96236.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1076, + "timed_iters": 5381, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 46459.9, + "samples": 26905, + "median": 46385.0, + "mad": 108.0, + "iqr": 219.0, + "q1": 46286.0, + "q3": 46505.0, + "min": 45518.0, + "max": 273745.0, + "mean": 46570.44, + "stddev": 1570.91, + "ops_per_sec": 21558.69, + "per_rep_median": [ + 46320.0, + 46413.0, + 46404.0, + 46393.0, + 46402.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 193884.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 289465.5, + "p95": 293975.7, + "min": 284814.0, + "max": 345464.0, + "mean": 289857.3, + "stddev": 2901.8 + }, + "handshakes_per_sec": 3454.6, + "bytes_on_wire": { + "client_to_server": 300, + "server_to_client": 1212, + "total": 1512 + }, + "client_hello_bytes": 220, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 180933.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 17221.0, + "subtotal_ns": 17221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 45093.0, + "subtotal_ns": 90186.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 375553.0, + "p95": 380930.5, + "min": 369957.0, + "max": 394548.0, + "mean": 376129.2, + "stddev": 3030.5 + }, + "handshakes_per_sec": 2662.7, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 2300, + "total": 3776 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 201545.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 17221.0, + "subtotal_ns": 17221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 45093.0, + "subtotal_ns": 90186.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 399826.0, + "p95": 406237.3, + "min": 393698.0, + "max": 427686.0, + "mean": 400442.3, + "stddev": 3473.2 + }, + "handshakes_per_sec": 2501.1, + "bytes_on_wire": { + "client_to_server": 1509, + "server_to_client": 2333, + "total": 3842 + }, + "client_hello_bytes": 1429, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 17221.0, + "subtotal_ns": 17221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 45093.0, + "subtotal_ns": 90186.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 269995.0, + "p95": 274414.9, + "min": 265553.0, + "max": 288613.0, + "mean": 270406.5, + "stddev": 2490.0 + }, + "handshakes_per_sec": 3703.8, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 1948, + "total": 3008 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 120825.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 17221.0, + "subtotal_ns": 17221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 45093.0, + "subtotal_ns": 90186.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 298331.0, + "p95": 302975.7, + "min": 292480.0, + "max": 537388.0, + "mean": 298914.2, + "stddev": 8019.9 + }, + "handshakes_per_sec": 3352.0, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 2268, + "total": 3712 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 128019.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 17221.0, + "subtotal_ns": 17221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 45093.0, + "subtotal_ns": 90186.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 331064.5, + "p95": 336236.2, + "min": 326018.0, + "max": 354613.0, + "mean": 331415.0, + "stddev": 2671.2 + }, + "handshakes_per_sec": 3020.6, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 2748, + "total": 4576 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 135630.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 17221.0, + "subtotal_ns": 17221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 45093.0, + "subtotal_ns": 90186.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 624584.0, + "p95": 1090195.6, + "min": 513087.0, + "max": 1910004.0, + "mean": 698910.7, + "stddev": 198925.1 + }, + "handshakes_per_sec": 1601.1, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 8318, + "total": 9794 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 144188.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 851546.5, + "p95": 1641906.2, + "min": 633356.0, + "max": 3932454.0, + "mean": 949061.6, + "stddev": 366094.9 + }, + "handshakes_per_sec": 1174.3, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 10736, + "total": 12212 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 178312.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1044739.0, + "p95": 2068787.7, + "min": 823494.0, + "max": 5992451.0, + "mean": 1233549.1, + "stddev": 597430.1 + }, + "handshakes_per_sec": 957.2, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 14012, + "total": 15488 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 211419.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 514359.5, + "p95": 980891.6, + "min": 405916.0, + "max": 1701656.0, + "mean": 588642.7, + "stddev": 200128.8 + }, + "handshakes_per_sec": 1944.2, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 7966, + "total": 9026 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 63468.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 743404.5, + "p95": 1529630.2, + "min": 524530.0, + "max": 3486944.0, + "mean": 831535.4, + "stddev": 348415.0 + }, + "handshakes_per_sec": 1345.2, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 10384, + "total": 11444 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 97592.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 926182.5, + "p95": 1747769.3, + "min": 708989.0, + "max": 2991555.0, + "mean": 1023601.9, + "stddev": 352383.2 + }, + "handshakes_per_sec": 1079.7, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 13660, + "total": 14720 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 130699.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 541990.0, + "p95": 958227.6, + "min": 432635.0, + "max": 1892946.0, + "mean": 602859.1, + "stddev": 183615.8 + }, + "handshakes_per_sec": 1845.1, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 8286, + "total": 9730 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 70662.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 769735.0, + "p95": 1487520.7, + "min": 548823.0, + "max": 2845891.0, + "mean": 864150.9, + "stddev": 334657.9 + }, + "handshakes_per_sec": 1299.1, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 10704, + "total": 12148 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 104786.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 960136.0, + "p95": 1776797.2, + "min": 741987.0, + "max": 3192832.0, + "mean": 1052927.7, + "stddev": 351641.6 + }, + "handshakes_per_sec": 1041.5, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 13980, + "total": 15424 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 137893.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 576089.0, + "p95": 1047185.7, + "min": 468128.0, + "max": 1965961.0, + "mean": 648383.0, + "stddev": 206222.8 + }, + "handshakes_per_sec": 1735.8, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 8766, + "total": 10594 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 78273.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 804540.5, + "p95": 1521851.7, + "min": 584467.0, + "max": 3094856.0, + "mean": 895890.5, + "stddev": 338256.0 + }, + "handshakes_per_sec": 1242.9, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 11184, + "total": 13012 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 112397.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 985632.0, + "p95": 1802252.5, + "min": 770889.0, + "max": 3960324.0, + "mean": 1095565.5, + "stddev": 370310.4 + }, + "handshakes_per_sec": 1014.6, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 14460, + "total": 16288 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 145504.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 624503.0, + "p95": 1039814.4, + "min": 512887.0, + "max": 2623837.0, + "mean": 695376.9, + "stddev": 203918.8 + }, + "handshakes_per_sec": 1601.3, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 8316, + "total": 9792 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 144188.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 849224.0, + "p95": 1499780.4, + "min": 630765.0, + "max": 3564431.0, + "mean": 927441.7, + "stddev": 318047.9 + }, + "handshakes_per_sec": 1177.5, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 10734, + "total": 12210 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 178312.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1025567.0, + "p95": 1844999.9, + "min": 813567.0, + "max": 3275452.0, + "mean": 1135720.3, + "stddev": 353111.5 + }, + "handshakes_per_sec": 975.1, + "bytes_on_wire": { + "client_to_server": 1476, + "server_to_client": 14010, + "total": 15486 + }, + "client_hello_bytes": 1396, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 211419.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 16975.0, + "subtotal_ns": 33950.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 19788.0, + "subtotal_ns": 39576.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 645275.5, + "p95": 1160844.6, + "min": 534084.0, + "max": 2828458.0, + "mean": 726952.8, + "stddev": 224574.1 + }, + "handshakes_per_sec": 1549.7, + "bytes_on_wire": { + "client_to_server": 1509, + "server_to_client": 8349, + "total": 9858 + }, + "client_hello_bytes": 1429, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 874207.0, + "p95": 1659774.4, + "min": 654978.0, + "max": 2884429.0, + "mean": 966440.5, + "stddev": 331664.1 + }, + "handshakes_per_sec": 1143.9, + "bytes_on_wire": { + "client_to_server": 1509, + "server_to_client": 10767, + "total": 12276 + }, + "client_hello_bytes": 1429, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1047480.5, + "p95": 1782887.5, + "min": 837378.0, + "max": 2993340.0, + "mean": 1134844.0, + "stddev": 338782.3 + }, + "handshakes_per_sec": 954.7, + "bytes_on_wire": { + "client_to_server": 1509, + "server_to_client": 14043, + "total": 15552 + }, + "client_hello_bytes": 1429, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 517235.5, + "p95": 978933.0, + "min": 405475.0, + "max": 1645816.0, + "mean": 587765.0, + "stddev": 190239.1 + }, + "handshakes_per_sec": 1933.4, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 7964, + "total": 9024 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 63468.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 743330.0, + "p95": 1417902.1, + "min": 525348.0, + "max": 2677583.0, + "mean": 819840.5, + "stddev": 317246.5 + }, + "handshakes_per_sec": 1345.3, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 10382, + "total": 11442 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 97592.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 918808.5, + "p95": 1735831.4, + "min": 706941.0, + "max": 2978267.0, + "mean": 1022416.6, + "stddev": 348816.6 + }, + "handshakes_per_sec": 1088.4, + "bytes_on_wire": { + "client_to_server": 1060, + "server_to_client": 13658, + "total": 14718 + }, + "client_hello_bytes": 980, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 130699.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 3877.0, + "subtotal_ns": 3877.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 4288.0, + "subtotal_ns": 4288.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 5253.0, + "subtotal_ns": 5253.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 541993.0, + "p95": 1003434.0, + "min": 432916.0, + "max": 1946236.0, + "mean": 608378.4, + "stddev": 198568.0 + }, + "handshakes_per_sec": 1845.0, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 8284, + "total": 9728 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 70662.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 766648.0, + "p95": 1559940.2, + "min": 547885.0, + "max": 4910933.0, + "mean": 859600.8, + "stddev": 366852.1 + }, + "handshakes_per_sec": 1304.4, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 10702, + "total": 12146 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 104786.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 951068.5, + "p95": 1796519.3, + "min": 738246.0, + "max": 2933534.0, + "mean": 1057518.1, + "stddev": 363089.5 + }, + "handshakes_per_sec": 1051.4, + "bytes_on_wire": { + "client_to_server": 1444, + "server_to_client": 13978, + "total": 15422 + }, + "client_hello_bytes": 1364, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 137893.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 6193.0, + "subtotal_ns": 6193.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 6397.0, + "subtotal_ns": 6397.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8022.0, + "subtotal_ns": 8022.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 577349.0, + "p95": 1036471.8, + "min": 466948.0, + "max": 1865489.0, + "mean": 648113.0, + "stddev": 203718.8 + }, + "handshakes_per_sec": 1732.1, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 8764, + "total": 10592 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 78273.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 26240.0, + "subtotal_ns": 26240.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 11905.0, + "subtotal_ns": 23810.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 802773.0, + "p95": 1523343.0, + "min": 584934.0, + "max": 2663559.0, + "mean": 885650.0, + "stddev": 317212.2 + }, + "handshakes_per_sec": 1245.7, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 11182, + "total": 13010 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 112397.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 44542.0, + "subtotal_ns": 44542.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 19816.0, + "subtotal_ns": 39632.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 979687.5, + "p95": 1720279.6, + "min": 769230.0, + "max": 3785708.0, + "mean": 1065492.2, + "stddev": 339417.3 + }, + "handshakes_per_sec": 1020.7, + "bytes_on_wire": { + "client_to_server": 1828, + "server_to_client": 14458, + "total": 16286 + }, + "client_hello_bytes": 1748, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 145504.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8430.0, + "subtotal_ns": 8430.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8770.0, + "subtotal_ns": 8770.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 11023.0, + "subtotal_ns": 11023.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 54913.0, + "subtotal_ns": 54913.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31184.0, + "subtotal_ns": 62368.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": false, + "have_oqs_provider": true, + "reason": "handshake failed" + }, + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 147307.0, + "p95": 148609.0, + "min": 144095.0, + "max": 157786.0, + "mean": 147386.6, + "stddev": 1018.9 + }, + "handshakes_per_sec": 6788.5, + "bytes_on_wire": { + "client_to_server": 312, + "server_to_client": 824, + "total": 1136 + }, + "client_hello_bytes": 232, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 87226.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 5553.0, + "subtotal_ns": 11106.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 14148.0, + "subtotal_ns": 28296.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4596.0, + "subtotal_ns": 4596.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 21614.0, + "subtotal_ns": 43228.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 179976.5, + "p95": 182084.6, + "min": 176591.0, + "max": 190945.0, + "mean": 180077.0, + "stddev": 1256.9 + }, + "handshakes_per_sec": 5556.3, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 1912, + "total": 3408 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 113008.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 5553.0, + "subtotal_ns": 11106.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 14148.0, + "subtotal_ns": 28296.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4596.0, + "subtotal_ns": 4596.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 21614.0, + "subtotal_ns": 43228.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 206731.5, + "p95": 208923.1, + "min": 203334.0, + "max": 226252.0, + "mean": 206854.9, + "stddev": 1386.7 + }, + "handshakes_per_sec": 4837.2, + "bytes_on_wire": { + "client_to_server": 1529, + "server_to_client": 1945, + "total": 3474 + }, + "client_hello_bytes": 1449, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 138020.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 6611.0, + "subtotal_ns": 13222.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 25596.0, + "subtotal_ns": 51192.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4596.0, + "subtotal_ns": 4596.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 21614.0, + "subtotal_ns": 43228.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 139881.0, + "p95": 142047.2, + "min": 136726.0, + "max": 148321.0, + "mean": 139985.8, + "stddev": 1200.6 + }, + "handshakes_per_sec": 7148.9, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 1880, + "total": 3344 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 73606.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4596.0, + "subtotal_ns": 4596.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 21614.0, + "subtotal_ns": 43228.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 151307.5, + "p95": 153765.1, + "min": 148347.0, + "max": 392306.0, + "mean": 151726.0, + "stddev": 7726.0 + }, + "handshakes_per_sec": 6609.1, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 2360, + "total": 4208 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 83151.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10927.0, + "subtotal_ns": 10927.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 12051.0, + "subtotal_ns": 12051.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 12349.0, + "subtotal_ns": 12349.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 4596.0, + "subtotal_ns": 4596.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 21614.0, + "subtotal_ns": 43228.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 232000.5, + "p95": 319320.8, + "min": 207027.0, + "max": 451033.0, + "mean": 244232.2, + "stddev": 37185.2 + }, + "handshakes_per_sec": 4310.3, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 7930, + "total": 9426 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 147810.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 5553.0, + "subtotal_ns": 11106.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 14148.0, + "subtotal_ns": 28296.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 47214.0, + "subtotal_ns": 47214.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 17706.0, + "subtotal_ns": 35412.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 284160.0, + "p95": 415162.1, + "min": 247526.0, + "max": 622583.0, + "mean": 301961.9, + "stddev": 57397.5 + }, + "handshakes_per_sec": 3519.1, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 10348, + "total": 11844 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 198100.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 5553.0, + "subtotal_ns": 11106.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 14148.0, + "subtotal_ns": 28296.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 74622.0, + "subtotal_ns": 74622.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 29147.0, + "subtotal_ns": 58294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 347908.5, + "p95": 485410.3, + "min": 311106.0, + "max": 776680.0, + "mean": 365976.9, + "stddev": 61582.0 + }, + "handshakes_per_sec": 2874.3, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 13624, + "total": 15120 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 254212.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 5553.0, + "subtotal_ns": 11106.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 14148.0, + "subtotal_ns": 28296.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 96258.0, + "subtotal_ns": 96258.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 46385.0, + "subtotal_ns": 92770.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 189400.5, + "p95": 278424.4, + "min": 166483.0, + "max": 446166.0, + "mean": 202225.8, + "stddev": 38234.2 + }, + "handshakes_per_sec": 5279.8, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 7898, + "total": 9362 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 108408.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 47214.0, + "subtotal_ns": 47214.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 17706.0, + "subtotal_ns": 35412.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 244427.5, + "p95": 372501.5, + "min": 208649.0, + "max": 592945.0, + "mean": 261769.7, + "stddev": 55233.5 + }, + "handshakes_per_sec": 4091.2, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 10316, + "total": 11780 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 158698.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 74622.0, + "subtotal_ns": 74622.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 29147.0, + "subtotal_ns": 58294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 310510.5, + "p95": 447556.7, + "min": 271795.0, + "max": 745044.0, + "mean": 327791.8, + "stddev": 60136.0 + }, + "handshakes_per_sec": 3220.5, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 13592, + "total": 15056 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 214810.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 8167.0, + "subtotal_ns": 8167.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 8832.0, + "subtotal_ns": 8832.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 8783.0, + "subtotal_ns": 8783.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 96258.0, + "subtotal_ns": 96258.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 46385.0, + "subtotal_ns": 92770.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 200280.5, + "p95": 283560.2, + "min": 179171.0, + "max": 406109.0, + "mean": 212258.2, + "stddev": 36640.4 + }, + "handshakes_per_sec": 4993.0, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 8378, + "total": 10226 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 117953.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10927.0, + "subtotal_ns": 10927.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 12051.0, + "subtotal_ns": 12051.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 12349.0, + "subtotal_ns": 12349.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 47214.0, + "subtotal_ns": 47214.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 17706.0, + "subtotal_ns": 35412.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 258187.5, + "p95": 388514.3, + "min": 220720.0, + "max": 639953.0, + "mean": 275716.1, + "stddev": 58204.2 + }, + "handshakes_per_sec": 3873.2, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 10796, + "total": 12644 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 168243.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10927.0, + "subtotal_ns": 10927.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 12051.0, + "subtotal_ns": 12051.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 12349.0, + "subtotal_ns": 12349.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 74622.0, + "subtotal_ns": 74622.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 29147.0, + "subtotal_ns": 58294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 321260.5, + "p95": 462533.7, + "min": 282048.0, + "max": 782411.0, + "mean": 340419.6, + "stddev": 62272.8 + }, + "handshakes_per_sec": 3112.7, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 14072, + "total": 15920 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 224355.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10927.0, + "subtotal_ns": 10927.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 12051.0, + "subtotal_ns": 12051.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 12349.0, + "subtotal_ns": 12349.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 96258.0, + "subtotal_ns": 96258.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 46385.0, + "subtotal_ns": 92770.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + } + ] + } +} diff --git a/tools/benchmarks/pqc/results/mehmetmac-20260624T140033Z.json b/tools/benchmarks/pqc/results/mehmetmac-20260624T140033Z.json new file mode 100644 index 0000000..358c3ec --- /dev/null +++ b/tools/benchmarks/pqc/results/mehmetmac-20260624T140033Z.json @@ -0,0 +1,12521 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-06-24T14:29:31Z", + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'apple-m3', not cortex-a76" + ], + "host": { + "hostname": "mehmetmac", + "os": "macos", + "os_pretty": "macOS 26.3.1 (25D771280a)", + "arch": "arm64", + "kernel": "25.3.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M3", + "ncpu": 8, + "ram_bytes": 17179869184 + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-06-24T14:00:33Z", + "timestamp_end_utc": "2026-06-24T14:29:31Z", + "duration_s": 1738, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "Apple clang version 17.0.0 (clang-1700.6.4.2)", + "bench_cflags": "-O3 -mcpu=native", + "cflags_target": "apple-m3", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET arm64-Darwin-25.3.0;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_SHA3_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.6.0", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1782309633, + null, + null, + null + ], + [ + 1782309633, + null, + null, + null + ], + [ + 1782309634, + null, + null, + null + ], + [ + 1782309635, + null, + null, + null + ], + [ + 1782309636, + null, + null, + null + ], + [ + 1782309637, + null, + null, + null + ], + [ + 1782309638, + null, + null, + null + ], + [ + 1782309639, + null, + null, + null + ], + [ + 1782309640, + null, + null, + null + ], + [ + 1782309641, + null, + null, + null + ], + [ + 1782309642, + null, + null, + null + ], + [ + 1782309643, + null, + null, + null + ], + [ + 1782309644, + null, + null, + null + ], + [ + 1782309645, + null, + null, + null + ], + [ + 1782309646, + null, + null, + null + ], + [ + 1782309647, + null, + null, + null + ], + [ + 1782309648, + null, + null, + null + ], + [ + 1782309649, + null, + null, + null + ], + [ + 1782309650, + null, + null, + null + ], + [ + 1782309651, + null, + null, + null + ], + [ + 1782309652, + null, + null, + null + ], + [ + 1782309653, + null, + null, + null + ], + [ + 1782309654, + null, + null, + null + ], + [ + 1782309655, + null, + null, + null + ], + [ + 1782309656, + null, + null, + null + ], + [ + 1782309657, + null, + null, + null + ], + [ + 1782309658, + null, + null, + null + ], + [ + 1782309659, + null, + null, + null + ], + [ + 1782309660, + null, + null, + null + ], + [ + 1782309661, + null, + null, + null + ], + [ + 1782309662, + null, + null, + null + ], + [ + 1782309663, + null, + null, + null + ], + [ + 1782309664, + null, + null, + null + ], + [ + 1782309665, + null, + null, + null + ], + [ + 1782309666, + null, + null, + null + ], + [ + 1782309667, + null, + null, + null + ], + [ + 1782309668, + null, + null, + null + ], + [ + 1782309669, + null, + null, + null + ], + [ + 1782309670, + null, + null, + null + ], + [ + 1782309671, + null, + null, + null + ], + [ + 1782309672, + null, + null, + null + ], + [ + 1782309673, + null, + null, + null + ], + [ + 1782309674, + null, + null, + null + ], + [ + 1782309675, + null, + null, + null + ], + [ + 1782309676, + null, + null, + null + ], + [ + 1782309677, + null, + null, + null + ], + [ + 1782309678, + null, + null, + null + ], + [ + 1782309679, + null, + null, + null + ], + [ + 1782309680, + null, + null, + null + ], + [ + 1782309681, + null, + null, + null + ], + [ + 1782309682, + null, + null, + null + ], + [ + 1782309683, + null, + null, + null + ], + [ + 1782309684, + null, + null, + null + ], + [ + 1782309685, + null, + null, + null + ], + [ + 1782309686, + null, + null, + null + ], + [ + 1782309687, + null, + null, + null + ], + [ + 1782309688, + null, + null, + null + ], + [ + 1782309689, + null, + null, + null + ], + [ + 1782309690, + null, + null, + null + ], + [ + 1782309691, + null, + null, + null + ], + [ + 1782309692, + null, + null, + null + ], + [ + 1782309693, + null, + null, + null + ], + [ + 1782309694, + null, + null, + null + ], + [ + 1782309695, + null, + null, + null + ], + [ + 1782309696, + null, + null, + null + ], + [ + 1782309697, + null, + null, + null + ], + [ + 1782309698, + null, + null, + null + ], + [ + 1782309699, + null, + null, + null + ], + [ + 1782309700, + null, + null, + null + ], + [ + 1782309701, + null, + null, + null + ], + [ + 1782309702, + null, + null, + null + ], + [ + 1782309703, + null, + null, + null + ], + [ + 1782309705, + null, + null, + null + ], + [ + 1782309706, + null, + null, + null + ], + [ + 1782309707, + null, + null, + null + ], + [ + 1782309708, + null, + null, + null + ], + [ + 1782309709, + null, + null, + null + ], + [ + 1782309710, + null, + null, + null + ], + [ + 1782309711, + null, + null, + null + ], + [ + 1782309712, + null, + null, + null + ], + [ + 1782309713, + null, + null, + null + ], + [ + 1782309714, + null, + null, + null + ], + [ + 1782309715, + null, + null, + null + ], + [ + 1782309716, + null, + null, + null + ], + [ + 1782309717, + null, + null, + null + ], + [ + 1782309718, + null, + null, + null + ], + [ + 1782309719, + null, + null, + null + ], + [ + 1782309720, + null, + null, + null + ], + [ + 1782309721, + null, + null, + null + ], + [ + 1782309722, + null, + null, + null + ], + [ + 1782309723, + null, + null, + null + ], + [ + 1782309724, + null, + null, + null + ], + [ + 1782309725, + null, + null, + null + ], + [ + 1782309726, + null, + null, + null + ], + [ + 1782309727, + null, + null, + null + ], + [ + 1782309728, + null, + null, + null + ], + [ + 1782309729, + null, + null, + null + ], + [ + 1782309730, + null, + null, + null + ], + [ + 1782309731, + null, + null, + null + ], + [ + 1782309732, + null, + null, + null + ], + [ + 1782309733, + null, + null, + null + ], + [ + 1782309734, + null, + null, + null + ], + [ + 1782309735, + null, + null, + null + ], + [ + 1782309736, + null, + null, + null + ], + [ + 1782309737, + null, + null, + null + ], + [ + 1782309738, + null, + null, + null + ], + [ + 1782309739, + null, + null, + null + ], + [ + 1782309740, + null, + null, + null + ], + [ + 1782309741, + null, + null, + null + ], + [ + 1782309742, + null, + null, + null + ], + [ + 1782309743, + null, + null, + null + ], + [ + 1782309744, + null, + null, + null + ], + [ + 1782309745, + null, + null, + null + ], + [ + 1782309746, + null, + null, + null + ], + [ + 1782309747, + null, + null, + null + ], + [ + 1782309748, + null, + null, + null + ], + [ + 1782309749, + null, + null, + null + ], + [ + 1782309750, + null, + null, + null + ], + [ + 1782309751, + null, + null, + null + ], + [ + 1782309752, + null, + null, + null + ], + [ + 1782309753, + null, + null, + null + ], + [ + 1782309754, + null, + null, + null + ], + [ + 1782309755, + null, + null, + null + ], + [ + 1782309756, + null, + null, + null + ], + [ + 1782309757, + null, + null, + null + ], + [ + 1782309758, + null, + null, + null + ], + [ + 1782309759, + null, + null, + null + ], + [ + 1782309760, + null, + null, + null + ], + [ + 1782309761, + null, + null, + null + ], + [ + 1782309762, + null, + null, + null + ], + [ + 1782309763, + null, + null, + null + ], + [ + 1782309764, + null, + null, + null + ], + [ + 1782309765, + null, + null, + null + ], + [ + 1782309766, + null, + null, + null + ], + [ + 1782309767, + null, + null, + null + ], + [ + 1782309768, + null, + null, + null + ], + [ + 1782309769, + null, + null, + null + ], + [ + 1782309770, + null, + null, + null + ], + [ + 1782309771, + null, + null, + null + ], + [ + 1782309772, + null, + null, + null + ], + [ + 1782309773, + null, + null, + null + ], + [ + 1782309774, + null, + null, + null + ], + [ + 1782309775, + null, + null, + null + ], + [ + 1782309776, + null, + null, + null + ], + [ + 1782309777, + null, + null, + null + ], + [ + 1782309778, + null, + null, + null + ], + [ + 1782309779, + null, + null, + null + ], + [ + 1782309780, + null, + null, + null + ], + [ + 1782309781, + null, + null, + null + ], + [ + 1782309782, + null, + null, + null + ], + [ + 1782309783, + null, + null, + null + ], + [ + 1782309784, + null, + null, + null + ], + [ + 1782309785, + null, + null, + null + ], + [ + 1782309786, + null, + null, + null + ], + [ + 1782309787, + null, + null, + null + ], + [ + 1782309788, + null, + null, + null + ], + [ + 1782309789, + null, + null, + null + ], + [ + 1782309790, + null, + null, + null + ], + [ + 1782309791, + null, + null, + null + ], + [ + 1782309792, + null, + null, + null + ], + [ + 1782309793, + null, + null, + null + ], + [ + 1782309795, + null, + null, + null + ], + [ + 1782309796, + null, + null, + null + ], + [ + 1782309797, + null, + null, + null + ], + [ + 1782309798, + null, + null, + null + ], + [ + 1782309799, + null, + null, + null + ], + [ + 1782309800, + null, + null, + null + ], + [ + 1782309801, + null, + null, + null + ], + [ + 1782309802, + null, + null, + null + ], + [ + 1782309803, + null, + null, + null + ], + [ + 1782309804, + null, + null, + null + ], + [ + 1782309805, + null, + null, + null + ], + [ + 1782309806, + null, + null, + null + ], + [ + 1782309807, + null, + null, + null + ], + [ + 1782309808, + null, + null, + null + ], + [ + 1782309809, + null, + null, + null + ], + [ + 1782309810, + null, + null, + null + ], + [ + 1782309811, + null, + null, + null + ], + [ + 1782309812, + null, + null, + null + ], + [ + 1782309813, + null, + null, + null + ], + [ + 1782309814, + null, + null, + null + ], + [ + 1782309815, + null, + null, + null + ], + [ + 1782309816, + null, + null, + null + ], + [ + 1782309817, + null, + null, + null + ], + [ + 1782309818, + null, + null, + null + ], + [ + 1782309819, + null, + null, + null + ], + [ + 1782309820, + null, + null, + null + ], + [ + 1782309821, + null, + null, + null + ], + [ + 1782309822, + null, + null, + null + ], + [ + 1782309823, + null, + null, + null + ], + [ + 1782309824, + null, + null, + null + ], + [ + 1782309825, + null, + null, + null + ], + [ + 1782309826, + null, + null, + null + ], + [ + 1782309827, + null, + null, + null + ], + [ + 1782309828, + null, + null, + null + ], + [ + 1782309829, + null, + null, + null + ], + [ + 1782309830, + null, + null, + null + ], + [ + 1782309831, + null, + null, + null + ], + [ + 1782309832, + null, + null, + null + ], + [ + 1782309833, + null, + null, + null + ], + [ + 1782309834, + null, + null, + null + ], + [ + 1782309835, + null, + null, + null + ], + [ + 1782309836, + null, + null, + null + ], + [ + 1782309837, + null, + null, + null + ], + [ + 1782309838, + null, + null, + null + ], + [ + 1782309839, + null, + null, + null + ], + [ + 1782309840, + null, + null, + null + ], + [ + 1782309841, + null, + null, + null + ], + [ + 1782309842, + null, + null, + null + ], + [ + 1782309843, + null, + null, + null + ], + [ + 1782309844, + null, + null, + null + ], + [ + 1782309845, + null, + null, + null + ], + [ + 1782309846, + null, + null, + null + ], + [ + 1782309847, + null, + null, + null + ], + [ + 1782309848, + null, + null, + null + ], + [ + 1782309849, + null, + null, + null + ], + [ + 1782309850, + null, + null, + null + ], + [ + 1782309851, + null, + null, + null + ], + [ + 1782309852, + null, + null, + null + ], + [ + 1782309853, + null, + null, + null + ], + [ + 1782309854, + null, + null, + null + ], + [ + 1782309855, + null, + null, + null + ], + [ + 1782309856, + null, + null, + null + ], + [ + 1782309857, + null, + null, + null + ], + [ + 1782309858, + null, + null, + null + ], + [ + 1782309859, + null, + null, + null + ], + [ + 1782309860, + null, + null, + null + ], + [ + 1782309861, + null, + null, + null + ], + [ + 1782309862, + null, + null, + null + ], + [ + 1782309863, + null, + null, + null + ], + [ + 1782309864, + null, + null, + null + ], + [ + 1782309865, + null, + null, + null + ], + [ + 1782309866, + null, + null, + null + ], + [ + 1782309867, + null, + null, + null + ], + [ + 1782309868, + null, + null, + null + ], + [ + 1782309869, + null, + null, + null + ], + [ + 1782309870, + null, + null, + null + ], + [ + 1782309871, + null, + null, + null + ], + [ + 1782309873, + null, + null, + null + ], + [ + 1782309874, + null, + null, + null + ], + [ + 1782309875, + null, + null, + null + ], + [ + 1782309876, + null, + null, + null + ], + [ + 1782309877, + null, + null, + null + ], + [ + 1782309878, + null, + null, + null + ], + [ + 1782309879, + null, + null, + null + ], + [ + 1782309880, + null, + null, + null + ], + [ + 1782309881, + null, + null, + null + ], + [ + 1782309882, + null, + null, + null + ], + [ + 1782309883, + null, + null, + null + ], + [ + 1782309884, + null, + null, + null + ], + [ + 1782309885, + null, + null, + null + ], + [ + 1782309886, + null, + null, + null + ], + [ + 1782309887, + null, + null, + null + ], + [ + 1782309888, + null, + null, + null + ], + [ + 1782309889, + null, + null, + null + ], + [ + 1782309890, + null, + null, + null + ], + [ + 1782309891, + null, + null, + null + ], + [ + 1782309892, + null, + null, + null + ], + [ + 1782309893, + null, + null, + null + ], + [ + 1782309894, + null, + null, + null + ], + [ + 1782309895, + null, + null, + null + ], + [ + 1782309896, + null, + null, + null + ], + [ + 1782309897, + null, + null, + null + ], + [ + 1782309898, + null, + null, + null + ], + [ + 1782309899, + null, + null, + null + ], + [ + 1782309900, + null, + null, + null + ], + [ + 1782309901, + null, + null, + null + ], + [ + 1782309902, + null, + null, + null + ], + [ + 1782309903, + null, + null, + null + ], + [ + 1782309904, + null, + null, + null + ], + [ + 1782309905, + null, + null, + null + ], + [ + 1782309906, + null, + null, + null + ], + [ + 1782309907, + null, + null, + null + ], + [ + 1782309908, + null, + null, + null + ], + [ + 1782309909, + null, + null, + null + ], + [ + 1782309910, + null, + null, + null + ], + [ + 1782309911, + null, + null, + null + ], + [ + 1782309912, + null, + null, + null + ], + [ + 1782309913, + null, + null, + null + ], + [ + 1782309914, + null, + null, + null + ], + [ + 1782309915, + null, + null, + null + ], + [ + 1782309916, + null, + null, + null + ], + [ + 1782309917, + null, + null, + null + ], + [ + 1782309918, + null, + null, + null + ], + [ + 1782309919, + null, + null, + null + ], + [ + 1782309920, + null, + null, + null + ], + [ + 1782309921, + null, + null, + null + ], + [ + 1782309922, + null, + null, + null + ], + [ + 1782309923, + null, + null, + null + ], + [ + 1782309924, + null, + null, + null + ], + [ + 1782309925, + null, + null, + null + ], + [ + 1782309926, + null, + null, + null + ], + [ + 1782309927, + null, + null, + null + ], + [ + 1782309928, + null, + null, + null + ], + [ + 1782309929, + null, + null, + null + ], + [ + 1782309930, + null, + null, + null + ], + [ + 1782309931, + null, + null, + null + ], + [ + 1782309932, + null, + null, + null + ], + [ + 1782309933, + null, + null, + null + ], + [ + 1782309934, + null, + null, + null + ], + [ + 1782309935, + null, + null, + null + ], + [ + 1782309936, + null, + null, + null + ], + [ + 1782309937, + null, + null, + null + ], + [ + 1782309938, + null, + null, + null + ], + [ + 1782309939, + null, + null, + null + ], + [ + 1782309940, + null, + null, + null + ], + [ + 1782309941, + null, + null, + null + ], + [ + 1782309942, + null, + null, + null + ], + [ + 1782309943, + null, + null, + null + ], + [ + 1782309944, + null, + null, + null + ], + [ + 1782309945, + null, + null, + null + ], + [ + 1782309946, + null, + null, + null + ], + [ + 1782309947, + null, + null, + null + ], + [ + 1782309948, + null, + null, + null + ], + [ + 1782309949, + null, + null, + null + ], + [ + 1782309950, + null, + null, + null + ], + [ + 1782309951, + null, + null, + null + ], + [ + 1782309952, + null, + null, + null + ], + [ + 1782309953, + null, + null, + null + ], + [ + 1782309954, + null, + null, + null + ], + [ + 1782309955, + null, + null, + null + ], + [ + 1782309956, + null, + null, + null + ], + [ + 1782309957, + null, + null, + null + ], + [ + 1782309958, + null, + null, + null + ], + [ + 1782309960, + null, + null, + null + ], + [ + 1782309961, + null, + null, + null + ], + [ + 1782309962, + null, + null, + null + ], + [ + 1782309963, + null, + null, + null + ], + [ + 1782309964, + null, + null, + null + ], + [ + 1782309965, + null, + null, + null + ], + [ + 1782309966, + null, + null, + null + ], + [ + 1782309967, + null, + null, + null + ], + [ + 1782309968, + null, + null, + null + ], + [ + 1782309969, + null, + null, + null + ], + [ + 1782309970, + null, + null, + null + ], + [ + 1782309971, + null, + null, + null + ], + [ + 1782309972, + null, + null, + null + ], + [ + 1782309973, + null, + null, + null + ], + [ + 1782309974, + null, + null, + null + ], + [ + 1782309975, + null, + null, + null + ], + [ + 1782309976, + null, + null, + null + ], + [ + 1782309977, + null, + null, + null + ], + [ + 1782309978, + null, + null, + null + ], + [ + 1782309979, + null, + null, + null + ], + [ + 1782309980, + null, + null, + null + ], + [ + 1782309981, + null, + null, + null + ], + [ + 1782309982, + null, + null, + null + ], + [ + 1782309983, + null, + null, + null + ], + [ + 1782309984, + null, + null, + null + ], + [ + 1782309985, + null, + null, + null + ], + [ + 1782309986, + null, + null, + null + ], + [ + 1782309987, + null, + null, + null + ], + [ + 1782309988, + null, + null, + null + ], + [ + 1782309989, + null, + null, + null + ], + [ + 1782309990, + null, + null, + null + ], + [ + 1782309991, + null, + null, + null + ], + [ + 1782309992, + null, + null, + null + ], + [ + 1782309993, + null, + null, + null + ], + [ + 1782309994, + null, + null, + null + ], + [ + 1782309995, + null, + null, + null + ], + [ + 1782309996, + null, + null, + null + ], + [ + 1782309997, + null, + null, + null + ], + [ + 1782309998, + null, + null, + null + ], + [ + 1782309999, + null, + null, + null + ], + [ + 1782310000, + null, + null, + null + ], + [ + 1782310001, + null, + null, + null + ], + [ + 1782310002, + null, + null, + null + ], + [ + 1782310003, + null, + null, + null + ], + [ + 1782310004, + null, + null, + null + ], + [ + 1782310005, + null, + null, + null + ], + [ + 1782310006, + null, + null, + null + ], + [ + 1782310007, + null, + null, + null + ], + [ + 1782310008, + null, + null, + null + ], + [ + 1782310009, + null, + null, + null + ], + [ + 1782310010, + null, + null, + null + ], + [ + 1782310011, + null, + null, + null + ], + [ + 1782310012, + null, + null, + null + ], + [ + 1782310013, + null, + null, + null + ], + [ + 1782310014, + null, + null, + null + ], + [ + 1782310015, + null, + null, + null + ], + [ + 1782310016, + null, + null, + null + ], + [ + 1782310017, + null, + null, + null + ], + [ + 1782310018, + null, + null, + null + ], + [ + 1782310019, + null, + null, + null + ], + [ + 1782310020, + null, + null, + null + ], + [ + 1782310021, + null, + null, + null + ], + [ + 1782310022, + null, + null, + null + ], + [ + 1782310023, + null, + null, + null + ], + [ + 1782310024, + null, + null, + null + ], + [ + 1782310025, + null, + null, + null + ], + [ + 1782310026, + null, + null, + null + ], + [ + 1782310027, + null, + null, + null + ], + [ + 1782310028, + null, + null, + null + ], + [ + 1782310029, + null, + null, + null + ], + [ + 1782310030, + null, + null, + null + ], + [ + 1782310031, + null, + null, + null + ], + [ + 1782310032, + null, + null, + null + ], + [ + 1782310033, + null, + null, + null + ], + [ + 1782310034, + null, + null, + null + ], + [ + 1782310035, + null, + null, + null + ], + [ + 1782310036, + null, + null, + null + ], + [ + 1782310037, + null, + null, + null + ], + [ + 1782310038, + null, + null, + null + ], + [ + 1782310039, + null, + null, + null + ], + [ + 1782310040, + null, + null, + null + ], + [ + 1782310041, + null, + null, + null + ], + [ + 1782310042, + null, + null, + null + ], + [ + 1782310043, + null, + null, + null + ], + [ + 1782310044, + null, + null, + null + ], + [ + 1782310045, + null, + null, + null + ], + [ + 1782310046, + null, + null, + null + ], + [ + 1782310047, + null, + null, + null + ], + [ + 1782310048, + null, + null, + null + ], + [ + 1782310049, + null, + null, + null + ], + [ + 1782310050, + null, + null, + null + ], + [ + 1782310051, + null, + null, + null + ], + [ + 1782310052, + null, + null, + null + ], + [ + 1782310053, + null, + null, + null + ], + [ + 1782310055, + null, + null, + null + ], + [ + 1782310056, + null, + null, + null + ], + [ + 1782310057, + null, + null, + null + ], + [ + 1782310058, + null, + null, + null + ], + [ + 1782310059, + null, + null, + null + ], + [ + 1782310060, + null, + null, + null + ], + [ + 1782310061, + null, + null, + null + ], + [ + 1782310062, + null, + null, + null + ], + [ + 1782310063, + null, + null, + null + ], + [ + 1782310064, + null, + null, + null + ], + [ + 1782310065, + null, + null, + null + ], + [ + 1782310066, + null, + null, + null + ], + [ + 1782310067, + null, + null, + null + ], + [ + 1782310068, + null, + null, + null + ], + [ + 1782310069, + null, + null, + null + ], + [ + 1782310070, + null, + null, + null + ], + [ + 1782310071, + null, + null, + null + ], + [ + 1782310072, + null, + null, + null + ], + [ + 1782310073, + null, + null, + null + ], + [ + 1782310074, + null, + null, + null + ], + [ + 1782310075, + null, + null, + null + ], + [ + 1782310076, + null, + null, + null + ], + [ + 1782310077, + null, + null, + null + ], + [ + 1782310078, + null, + null, + null + ], + [ + 1782310079, + null, + null, + null + ], + [ + 1782310080, + null, + null, + null + ], + [ + 1782310081, + null, + null, + null + ], + [ + 1782310082, + null, + null, + null + ], + [ + 1782310083, + null, + null, + null + ], + [ + 1782310084, + null, + null, + null + ], + [ + 1782310085, + null, + null, + null + ], + [ + 1782310086, + null, + null, + null + ], + [ + 1782310087, + null, + null, + null + ], + [ + 1782310088, + null, + null, + null + ], + [ + 1782310089, + null, + null, + null + ], + [ + 1782310090, + null, + null, + null + ], + [ + 1782310091, + null, + null, + null + ], + [ + 1782310092, + null, + null, + null + ], + [ + 1782310093, + null, + null, + null + ], + [ + 1782310094, + null, + null, + null + ], + [ + 1782310095, + null, + null, + null + ], + [ + 1782310096, + null, + null, + null + ], + [ + 1782310097, + null, + null, + null + ], + [ + 1782310098, + null, + null, + null + ], + [ + 1782310099, + null, + null, + null + ], + [ + 1782310100, + null, + null, + null + ], + [ + 1782310101, + null, + null, + null + ], + [ + 1782310102, + null, + null, + null + ], + [ + 1782310103, + null, + null, + null + ], + [ + 1782310104, + null, + null, + null + ], + [ + 1782310105, + null, + null, + null + ], + [ + 1782310106, + null, + null, + null + ], + [ + 1782310107, + null, + null, + null + ], + [ + 1782310108, + null, + null, + null + ], + [ + 1782310109, + null, + null, + null + ], + [ + 1782310110, + null, + null, + null + ], + [ + 1782310111, + null, + null, + null + ], + [ + 1782310112, + null, + null, + null + ], + [ + 1782310113, + null, + null, + null + ], + [ + 1782310114, + null, + null, + null + ], + [ + 1782310115, + null, + null, + null + ], + [ + 1782310116, + null, + null, + null + ], + [ + 1782310117, + null, + null, + null + ], + [ + 1782310118, + null, + null, + null + ], + [ + 1782310119, + null, + null, + null + ], + [ + 1782310120, + null, + null, + null + ], + [ + 1782310121, + null, + null, + null + ], + [ + 1782310122, + null, + null, + null + ], + [ + 1782310123, + null, + null, + null + ], + [ + 1782310124, + null, + null, + null + ], + [ + 1782310125, + null, + null, + null + ], + [ + 1782310126, + null, + null, + null + ], + [ + 1782310127, + null, + null, + null + ], + [ + 1782310128, + null, + null, + null + ], + [ + 1782310129, + null, + null, + null + ], + [ + 1782310130, + null, + null, + null + ], + [ + 1782310131, + null, + null, + null + ], + [ + 1782310132, + null, + null, + null + ], + [ + 1782310133, + null, + null, + null + ], + [ + 1782310134, + null, + null, + null + ], + [ + 1782310135, + null, + null, + null + ], + [ + 1782310136, + null, + null, + null + ], + [ + 1782310137, + null, + null, + null + ], + [ + 1782310138, + null, + null, + null + ], + [ + 1782310139, + null, + null, + null + ], + [ + 1782310140, + null, + null, + null + ], + [ + 1782310141, + null, + null, + null + ], + [ + 1782310142, + null, + null, + null + ], + [ + 1782310143, + null, + null, + null + ], + [ + 1782310144, + null, + null, + null + ], + [ + 1782310145, + null, + null, + null + ], + [ + 1782310146, + null, + null, + null + ], + [ + 1782310147, + null, + null, + null + ], + [ + 1782310148, + null, + null, + null + ], + [ + 1782310149, + null, + null, + null + ], + [ + 1782310151, + null, + null, + null + ], + [ + 1782310152, + null, + null, + null + ], + [ + 1782310153, + null, + null, + null + ], + [ + 1782310154, + null, + null, + null + ], + [ + 1782310155, + null, + null, + null + ], + [ + 1782310156, + null, + null, + null + ], + [ + 1782310157, + null, + null, + null + ], + [ + 1782310158, + null, + null, + null + ], + [ + 1782310159, + null, + null, + null + ], + [ + 1782310160, + null, + null, + null + ], + [ + 1782310161, + null, + null, + null + ], + [ + 1782310162, + null, + null, + null + ], + [ + 1782310163, + null, + null, + null + ], + [ + 1782310164, + null, + null, + null + ], + [ + 1782310165, + null, + null, + null + ], + [ + 1782310166, + null, + null, + null + ], + [ + 1782310167, + null, + null, + null + ], + [ + 1782310168, + null, + null, + null + ], + [ + 1782310169, + null, + null, + null + ], + [ + 1782310170, + null, + null, + null + ], + [ + 1782310171, + null, + null, + null + ], + [ + 1782310172, + null, + null, + null + ], + [ + 1782310173, + null, + null, + null + ], + [ + 1782310174, + null, + null, + null + ], + [ + 1782310175, + null, + null, + null + ], + [ + 1782310176, + null, + null, + null + ], + [ + 1782310177, + null, + null, + null + ], + [ + 1782310178, + null, + null, + null + ], + [ + 1782310179, + null, + null, + null + ], + [ + 1782310180, + null, + null, + null + ], + [ + 1782310181, + null, + null, + null + ], + [ + 1782310182, + null, + null, + null + ], + [ + 1782310183, + null, + null, + null + ], + [ + 1782310184, + null, + null, + null + ], + [ + 1782310185, + null, + null, + null + ], + [ + 1782310186, + null, + null, + null + ], + [ + 1782310187, + null, + null, + null + ], + [ + 1782310188, + null, + null, + null + ], + [ + 1782310189, + null, + null, + null + ], + [ + 1782310190, + null, + null, + null + ], + [ + 1782310191, + null, + null, + null + ], + [ + 1782310192, + null, + null, + null + ], + [ + 1782310193, + null, + null, + null + ], + [ + 1782310194, + null, + null, + null + ], + [ + 1782310195, + null, + null, + null + ], + [ + 1782310196, + null, + null, + null + ], + [ + 1782310197, + null, + null, + null + ], + [ + 1782310198, + null, + null, + null + ], + [ + 1782310199, + null, + null, + null + ], + [ + 1782310200, + null, + null, + null + ], + [ + 1782310201, + null, + null, + null + ], + [ + 1782310202, + null, + null, + null + ], + [ + 1782310203, + null, + null, + null + ], + [ + 1782310204, + null, + null, + null + ], + [ + 1782310205, + null, + null, + null + ], + [ + 1782310206, + null, + null, + null + ], + [ + 1782310207, + null, + null, + null + ], + [ + 1782310208, + null, + null, + null + ], + [ + 1782310209, + null, + null, + null + ], + [ + 1782310210, + null, + null, + null + ], + [ + 1782310211, + null, + null, + null + ], + [ + 1782310212, + null, + null, + null + ], + [ + 1782310213, + null, + null, + null + ], + [ + 1782310214, + null, + null, + null + ], + [ + 1782310215, + null, + null, + null + ], + [ + 1782310216, + null, + null, + null + ], + [ + 1782310217, + null, + null, + null + ], + [ + 1782310218, + null, + null, + null + ], + [ + 1782310219, + null, + null, + null + ], + [ + 1782310220, + null, + null, + null + ], + [ + 1782310221, + null, + null, + null + ], + [ + 1782310222, + null, + null, + null + ], + [ + 1782310223, + null, + null, + null + ], + [ + 1782310224, + null, + null, + null + ], + [ + 1782310225, + null, + null, + null + ], + [ + 1782310226, + null, + null, + null + ], + [ + 1782310227, + null, + null, + null + ], + [ + 1782310228, + null, + null, + null + ], + [ + 1782310229, + null, + null, + null + ], + [ + 1782310230, + null, + null, + null + ], + [ + 1782310231, + null, + null, + null + ], + [ + 1782310232, + null, + null, + null + ], + [ + 1782310233, + null, + null, + null + ], + [ + 1782310234, + null, + null, + null + ], + [ + 1782310235, + null, + null, + null + ], + [ + 1782310236, + null, + null, + null + ], + [ + 1782310237, + null, + null, + null + ], + [ + 1782310238, + null, + null, + null + ], + [ + 1782310239, + null, + null, + null + ], + [ + 1782310240, + null, + null, + null + ], + [ + 1782310241, + null, + null, + null + ], + [ + 1782310242, + null, + null, + null + ], + [ + 1782310244, + null, + null, + null + ], + [ + 1782310245, + null, + null, + null + ], + [ + 1782310246, + null, + null, + null + ], + [ + 1782310247, + null, + null, + null + ], + [ + 1782310248, + null, + null, + null + ], + [ + 1782310249, + null, + null, + null + ], + [ + 1782310250, + null, + null, + null + ], + [ + 1782310251, + null, + null, + null + ], + [ + 1782310252, + null, + null, + null + ], + [ + 1782310253, + null, + null, + null + ], + [ + 1782310254, + null, + null, + null + ], + [ + 1782310255, + null, + null, + null + ], + [ + 1782310256, + null, + null, + null + ], + [ + 1782310257, + null, + null, + null + ], + [ + 1782310258, + null, + null, + null + ], + [ + 1782310259, + null, + null, + null + ], + [ + 1782310260, + null, + null, + null + ], + [ + 1782310261, + null, + null, + null + ], + [ + 1782310262, + null, + null, + null + ], + [ + 1782310263, + null, + null, + null + ], + [ + 1782310264, + null, + null, + null + ], + [ + 1782310265, + null, + null, + null + ], + [ + 1782310266, + null, + null, + null + ], + [ + 1782310267, + null, + null, + null + ], + [ + 1782310268, + null, + null, + null + ], + [ + 1782310269, + null, + null, + null + ], + [ + 1782310270, + null, + null, + null + ], + [ + 1782310271, + null, + null, + null + ], + [ + 1782310272, + null, + null, + null + ], + [ + 1782310273, + null, + null, + null + ], + [ + 1782310274, + null, + null, + null + ], + [ + 1782310275, + null, + null, + null + ], + [ + 1782310276, + null, + null, + null + ], + [ + 1782310277, + null, + null, + null + ], + [ + 1782310278, + null, + null, + null + ], + [ + 1782310279, + null, + null, + null + ], + [ + 1782310280, + null, + null, + null + ], + [ + 1782310281, + null, + null, + null + ], + [ + 1782310282, + null, + null, + null + ], + [ + 1782310283, + null, + null, + null + ], + [ + 1782310284, + null, + null, + null + ], + [ + 1782310285, + null, + null, + null + ], + [ + 1782310286, + null, + null, + null + ], + [ + 1782310287, + null, + null, + null + ], + [ + 1782310288, + null, + null, + null + ], + [ + 1782310289, + null, + null, + null + ], + [ + 1782310290, + null, + null, + null + ], + [ + 1782310291, + null, + null, + null + ], + [ + 1782310292, + null, + null, + null + ], + [ + 1782310293, + null, + null, + null + ], + [ + 1782310294, + null, + null, + null + ], + [ + 1782310295, + null, + null, + null + ], + [ + 1782310296, + null, + null, + null + ], + [ + 1782310297, + null, + null, + null + ], + [ + 1782310298, + null, + null, + null + ], + [ + 1782310299, + null, + null, + null + ], + [ + 1782310300, + null, + null, + null + ], + [ + 1782310301, + null, + null, + null + ], + [ + 1782310302, + null, + null, + null + ], + [ + 1782310303, + null, + null, + null + ], + [ + 1782310304, + null, + null, + null + ], + [ + 1782310305, + null, + null, + null + ], + [ + 1782310306, + null, + null, + null + ], + [ + 1782310307, + null, + null, + null + ], + [ + 1782310308, + null, + null, + null + ], + [ + 1782310309, + null, + null, + null + ], + [ + 1782310310, + null, + null, + null + ], + [ + 1782310311, + null, + null, + null + ], + [ + 1782310312, + null, + null, + null + ], + [ + 1782310313, + null, + null, + null + ], + [ + 1782310314, + null, + null, + null + ], + [ + 1782310315, + null, + null, + null + ], + [ + 1782310316, + null, + null, + null + ], + [ + 1782310317, + null, + null, + null + ], + [ + 1782310318, + null, + null, + null + ], + [ + 1782310319, + null, + null, + null + ], + [ + 1782310320, + null, + null, + null + ], + [ + 1782310321, + null, + null, + null + ], + [ + 1782310322, + null, + null, + null + ], + [ + 1782310323, + null, + null, + null + ], + [ + 1782310324, + null, + null, + null + ], + [ + 1782310325, + null, + null, + null + ], + [ + 1782310326, + null, + null, + null + ], + [ + 1782310327, + null, + null, + null + ], + [ + 1782310328, + null, + null, + null + ], + [ + 1782310330, + null, + null, + null + ], + [ + 1782310331, + null, + null, + null + ], + [ + 1782310332, + null, + null, + null + ], + [ + 1782310333, + null, + null, + null + ], + [ + 1782310334, + null, + null, + null + ], + [ + 1782310335, + null, + null, + null + ], + [ + 1782310336, + null, + null, + null + ], + [ + 1782310337, + null, + null, + null + ], + [ + 1782310338, + null, + null, + null + ], + [ + 1782310339, + null, + null, + null + ], + [ + 1782310340, + null, + null, + null + ], + [ + 1782310341, + null, + null, + null + ], + [ + 1782310342, + null, + null, + null + ], + [ + 1782310343, + null, + null, + null + ], + [ + 1782310344, + null, + null, + null + ], + [ + 1782310345, + null, + null, + null + ], + [ + 1782310346, + null, + null, + null + ], + [ + 1782310347, + null, + null, + null + ], + [ + 1782310348, + null, + null, + null + ], + [ + 1782310349, + null, + null, + null + ], + [ + 1782310350, + null, + null, + null + ], + [ + 1782310351, + null, + null, + null + ], + [ + 1782310352, + null, + null, + null + ], + [ + 1782310353, + null, + null, + null + ], + [ + 1782310354, + null, + null, + null + ], + [ + 1782310355, + null, + null, + null + ], + [ + 1782310356, + null, + null, + null + ], + [ + 1782310357, + null, + null, + null + ], + [ + 1782310358, + null, + null, + null + ], + [ + 1782310359, + null, + null, + null + ], + [ + 1782310360, + null, + null, + null + ], + [ + 1782310361, + null, + null, + null + ], + [ + 1782310362, + null, + null, + null + ], + [ + 1782310363, + null, + null, + null + ], + [ + 1782310364, + null, + null, + null + ], + [ + 1782310365, + null, + null, + null + ], + [ + 1782310366, + null, + null, + null + ], + [ + 1782310367, + null, + null, + null + ], + [ + 1782310368, + null, + null, + null + ], + [ + 1782310369, + null, + null, + null + ], + [ + 1782310370, + null, + null, + null + ], + [ + 1782310371, + null, + null, + null + ], + [ + 1782310372, + null, + null, + null + ], + [ + 1782310373, + null, + null, + null + ], + [ + 1782310374, + null, + null, + null + ], + [ + 1782310375, + null, + null, + null + ], + [ + 1782310376, + null, + null, + null + ], + [ + 1782310377, + null, + null, + null + ], + [ + 1782310378, + null, + null, + null + ], + [ + 1782310379, + null, + null, + null + ], + [ + 1782310380, + null, + null, + null + ], + [ + 1782310381, + null, + null, + null + ], + [ + 1782310382, + null, + null, + null + ], + [ + 1782310383, + null, + null, + null + ], + [ + 1782310384, + null, + null, + null + ], + [ + 1782310385, + null, + null, + null + ], + [ + 1782310386, + null, + null, + null + ], + [ + 1782310387, + null, + null, + null + ], + [ + 1782310388, + null, + null, + null + ], + [ + 1782310389, + null, + null, + null + ], + [ + 1782310390, + null, + null, + null + ], + [ + 1782310391, + null, + null, + null + ], + [ + 1782310392, + null, + null, + null + ], + [ + 1782310393, + null, + null, + null + ], + [ + 1782310394, + null, + null, + null + ], + [ + 1782310395, + null, + null, + null + ], + [ + 1782310396, + null, + null, + null + ], + [ + 1782310397, + null, + null, + null + ], + [ + 1782310398, + null, + null, + null + ], + [ + 1782310399, + null, + null, + null + ], + [ + 1782310400, + null, + null, + null + ], + [ + 1782310401, + null, + null, + null + ], + [ + 1782310403, + null, + null, + null + ], + [ + 1782310404, + null, + null, + null + ], + [ + 1782310405, + null, + null, + null + ], + [ + 1782310406, + null, + null, + null + ], + [ + 1782310407, + null, + null, + null + ], + [ + 1782310408, + null, + null, + null + ], + [ + 1782310409, + null, + null, + null + ], + [ + 1782310410, + null, + null, + null + ], + [ + 1782310411, + null, + null, + null + ], + [ + 1782310412, + null, + null, + null + ], + [ + 1782310413, + null, + null, + null + ], + [ + 1782310414, + null, + null, + null + ], + [ + 1782310415, + null, + null, + null + ], + [ + 1782310416, + null, + null, + null + ], + [ + 1782310417, + null, + null, + null + ], + [ + 1782310418, + null, + null, + null + ], + [ + 1782310419, + null, + null, + null + ], + [ + 1782310420, + null, + null, + null + ], + [ + 1782310421, + null, + null, + null + ], + [ + 1782310422, + null, + null, + null + ], + [ + 1782310423, + null, + null, + null + ], + [ + 1782310424, + null, + null, + null + ], + [ + 1782310425, + null, + null, + null + ], + [ + 1782310426, + null, + null, + null + ], + [ + 1782310427, + null, + null, + null + ], + [ + 1782310428, + null, + null, + null + ], + [ + 1782310429, + null, + null, + null + ], + [ + 1782310430, + null, + null, + null + ], + [ + 1782310431, + null, + null, + null + ], + [ + 1782310432, + null, + null, + null + ], + [ + 1782310433, + null, + null, + null + ], + [ + 1782310434, + null, + null, + null + ], + [ + 1782310435, + null, + null, + null + ], + [ + 1782310436, + null, + null, + null + ], + [ + 1782310437, + null, + null, + null + ], + [ + 1782310438, + null, + null, + null + ], + [ + 1782310439, + null, + null, + null + ], + [ + 1782310440, + null, + null, + null + ], + [ + 1782310441, + null, + null, + null + ], + [ + 1782310442, + null, + null, + null + ], + [ + 1782310443, + null, + null, + null + ], + [ + 1782310444, + null, + null, + null + ], + [ + 1782310445, + null, + null, + null + ], + [ + 1782310446, + null, + null, + null + ], + [ + 1782310447, + null, + null, + null + ], + [ + 1782310448, + null, + null, + null + ], + [ + 1782310449, + null, + null, + null + ], + [ + 1782310450, + null, + null, + null + ], + [ + 1782310451, + null, + null, + null + ], + [ + 1782310452, + null, + null, + null + ], + [ + 1782310453, + null, + null, + null + ], + [ + 1782310454, + null, + null, + null + ], + [ + 1782310455, + null, + null, + null + ], + [ + 1782310456, + null, + null, + null + ], + [ + 1782310457, + null, + null, + null + ], + [ + 1782310458, + null, + null, + null + ], + [ + 1782310459, + null, + null, + null + ], + [ + 1782310460, + null, + null, + null + ], + [ + 1782310461, + null, + null, + null + ], + [ + 1782310462, + null, + null, + null + ], + [ + 1782310463, + null, + null, + null + ], + [ + 1782310464, + null, + null, + null + ], + [ + 1782310465, + null, + null, + null + ], + [ + 1782310466, + null, + null, + null + ], + [ + 1782310467, + null, + null, + null + ], + [ + 1782310468, + null, + null, + null + ], + [ + 1782310469, + null, + null, + null + ], + [ + 1782310470, + null, + null, + null + ], + [ + 1782310471, + null, + null, + null + ], + [ + 1782310472, + null, + null, + null + ], + [ + 1782310473, + null, + null, + null + ], + [ + 1782310474, + null, + null, + null + ], + [ + 1782310475, + null, + null, + null + ], + [ + 1782310476, + null, + null, + null + ], + [ + 1782310477, + null, + null, + null + ], + [ + 1782310478, + null, + null, + null + ], + [ + 1782310479, + null, + null, + null + ], + [ + 1782310480, + null, + null, + null + ], + [ + 1782310481, + null, + null, + null + ], + [ + 1782310482, + null, + null, + null + ], + [ + 1782310483, + null, + null, + null + ], + [ + 1782310484, + null, + null, + null + ], + [ + 1782310485, + null, + null, + null + ], + [ + 1782310486, + null, + null, + null + ], + [ + 1782310487, + null, + null, + null + ], + [ + 1782310488, + null, + null, + null + ], + [ + 1782310489, + null, + null, + null + ], + [ + 1782310490, + null, + null, + null + ], + [ + 1782310491, + null, + null, + null + ], + [ + 1782310492, + null, + null, + null + ], + [ + 1782310493, + null, + null, + null + ], + [ + 1782310494, + null, + null, + null + ], + [ + 1782310495, + null, + null, + null + ], + [ + 1782310497, + null, + null, + null + ], + [ + 1782310498, + null, + null, + null + ], + [ + 1782310499, + null, + null, + null + ], + [ + 1782310500, + null, + null, + null + ], + [ + 1782310501, + null, + null, + null + ], + [ + 1782310502, + null, + null, + null + ], + [ + 1782310503, + null, + null, + null + ], + [ + 1782310504, + null, + null, + null + ], + [ + 1782310505, + null, + null, + null + ], + [ + 1782310506, + null, + null, + null + ], + [ + 1782310507, + null, + null, + null + ], + [ + 1782310508, + null, + null, + null + ], + [ + 1782310509, + null, + null, + null + ], + [ + 1782310510, + null, + null, + null + ], + [ + 1782310511, + null, + null, + null + ], + [ + 1782310512, + null, + null, + null + ], + [ + 1782310513, + null, + null, + null + ], + [ + 1782310514, + null, + null, + null + ], + [ + 1782310515, + null, + null, + null + ], + [ + 1782310516, + null, + null, + null + ], + [ + 1782310517, + null, + null, + null + ], + [ + 1782310518, + null, + null, + null + ], + [ + 1782310519, + null, + null, + null + ], + [ + 1782310520, + null, + null, + null + ], + [ + 1782310521, + null, + null, + null + ], + [ + 1782310522, + null, + null, + null + ], + [ + 1782310523, + null, + null, + null + ], + [ + 1782310524, + null, + null, + null + ], + [ + 1782310525, + null, + null, + null + ], + [ + 1782310526, + null, + null, + null + ], + [ + 1782310527, + null, + null, + null + ], + [ + 1782310528, + null, + null, + null + ], + [ + 1782310529, + null, + null, + null + ], + [ + 1782310530, + null, + null, + null + ], + [ + 1782310531, + null, + null, + null + ], + [ + 1782310532, + null, + null, + null + ], + [ + 1782310533, + null, + null, + null + ], + [ + 1782310534, + null, + null, + null + ], + [ + 1782310535, + null, + null, + null + ], + [ + 1782310536, + null, + null, + null + ], + [ + 1782310537, + null, + null, + null + ], + [ + 1782310538, + null, + null, + null + ], + [ + 1782310539, + null, + null, + null + ], + [ + 1782310540, + null, + null, + null + ], + [ + 1782310541, + null, + null, + null + ], + [ + 1782310542, + null, + null, + null + ], + [ + 1782310543, + null, + null, + null + ], + [ + 1782310544, + null, + null, + null + ], + [ + 1782310545, + null, + null, + null + ], + [ + 1782310546, + null, + null, + null + ], + [ + 1782310547, + null, + null, + null + ], + [ + 1782310548, + null, + null, + null + ], + [ + 1782310549, + null, + null, + null + ], + [ + 1782310550, + null, + null, + null + ], + [ + 1782310551, + null, + null, + null + ], + [ + 1782310552, + null, + null, + null + ], + [ + 1782310553, + null, + null, + null + ], + [ + 1782310554, + null, + null, + null + ], + [ + 1782310555, + null, + null, + null + ], + [ + 1782310556, + null, + null, + null + ], + [ + 1782310557, + null, + null, + null + ], + [ + 1782310558, + null, + null, + null + ], + [ + 1782310559, + null, + null, + null + ], + [ + 1782310560, + null, + null, + null + ], + [ + 1782310561, + null, + null, + null + ], + [ + 1782310562, + null, + null, + null + ], + [ + 1782310563, + null, + null, + null + ], + [ + 1782310564, + null, + null, + null + ], + [ + 1782310565, + null, + null, + null + ], + [ + 1782310566, + null, + null, + null + ], + [ + 1782310567, + null, + null, + null + ], + [ + 1782310568, + null, + null, + null + ], + [ + 1782310569, + null, + null, + null + ], + [ + 1782310570, + null, + null, + null + ], + [ + 1782310571, + null, + null, + null + ], + [ + 1782310572, + null, + null, + null + ], + [ + 1782310573, + null, + null, + null + ], + [ + 1782310574, + null, + null, + null + ], + [ + 1782310575, + null, + null, + null + ], + [ + 1782310576, + null, + null, + null + ], + [ + 1782310577, + null, + null, + null + ], + [ + 1782310578, + null, + null, + null + ], + [ + 1782310579, + null, + null, + null + ], + [ + 1782310580, + null, + null, + null + ], + [ + 1782310581, + null, + null, + null + ], + [ + 1782310582, + null, + null, + null + ], + [ + 1782310583, + null, + null, + null + ], + [ + 1782310584, + null, + null, + null + ], + [ + 1782310585, + null, + null, + null + ], + [ + 1782310586, + null, + null, + null + ], + [ + 1782310587, + null, + null, + null + ], + [ + 1782310588, + null, + null, + null + ], + [ + 1782310589, + null, + null, + null + ], + [ + 1782310590, + null, + null, + null + ], + [ + 1782310592, + null, + null, + null + ], + [ + 1782310593, + null, + null, + null + ], + [ + 1782310594, + null, + null, + null + ], + [ + 1782310595, + null, + null, + null + ], + [ + 1782310596, + null, + null, + null + ], + [ + 1782310597, + null, + null, + null + ], + [ + 1782310598, + null, + null, + null + ], + [ + 1782310599, + null, + null, + null + ], + [ + 1782310600, + null, + null, + null + ], + [ + 1782310601, + null, + null, + null + ], + [ + 1782310602, + null, + null, + null + ], + [ + 1782310603, + null, + null, + null + ], + [ + 1782310604, + null, + null, + null + ], + [ + 1782310605, + null, + null, + null + ], + [ + 1782310606, + null, + null, + null + ], + [ + 1782310607, + null, + null, + null + ], + [ + 1782310608, + null, + null, + null + ], + [ + 1782310609, + null, + null, + null + ], + [ + 1782310610, + null, + null, + null + ], + [ + 1782310611, + null, + null, + null + ], + [ + 1782310612, + null, + null, + null + ], + [ + 1782310613, + null, + null, + null + ], + [ + 1782310614, + null, + null, + null + ], + [ + 1782310615, + null, + null, + null + ], + [ + 1782310616, + null, + null, + null + ], + [ + 1782310617, + null, + null, + null + ], + [ + 1782310618, + null, + null, + null + ], + [ + 1782310619, + null, + null, + null + ], + [ + 1782310620, + null, + null, + null + ], + [ + 1782310621, + null, + null, + null + ], + [ + 1782310622, + null, + null, + null + ], + [ + 1782310623, + null, + null, + null + ], + [ + 1782310624, + null, + null, + null + ], + [ + 1782310625, + null, + null, + null + ], + [ + 1782310626, + null, + null, + null + ], + [ + 1782310627, + null, + null, + null + ], + [ + 1782310628, + null, + null, + null + ], + [ + 1782310629, + null, + null, + null + ], + [ + 1782310630, + null, + null, + null + ], + [ + 1782310631, + null, + null, + null + ], + [ + 1782310632, + null, + null, + null + ], + [ + 1782310633, + null, + null, + null + ], + [ + 1782310634, + null, + null, + null + ], + [ + 1782310635, + null, + null, + null + ], + [ + 1782310636, + null, + null, + null + ], + [ + 1782310637, + null, + null, + null + ], + [ + 1782310638, + null, + null, + null + ], + [ + 1782310639, + null, + null, + null + ], + [ + 1782310640, + null, + null, + null + ], + [ + 1782310641, + null, + null, + null + ], + [ + 1782310642, + null, + null, + null + ], + [ + 1782310643, + null, + null, + null + ], + [ + 1782310644, + null, + null, + null + ], + [ + 1782310645, + null, + null, + null + ], + [ + 1782310646, + null, + null, + null + ], + [ + 1782310647, + null, + null, + null + ], + [ + 1782310648, + null, + null, + null + ], + [ + 1782310649, + null, + null, + null + ], + [ + 1782310650, + null, + null, + null + ], + [ + 1782310651, + null, + null, + null + ], + [ + 1782310652, + null, + null, + null + ], + [ + 1782310653, + null, + null, + null + ], + [ + 1782310654, + null, + null, + null + ], + [ + 1782310655, + null, + null, + null + ], + [ + 1782310656, + null, + null, + null + ], + [ + 1782310657, + null, + null, + null + ], + [ + 1782310658, + null, + null, + null + ], + [ + 1782310659, + null, + null, + null + ], + [ + 1782310660, + null, + null, + null + ], + [ + 1782310661, + null, + null, + null + ], + [ + 1782310662, + null, + null, + null + ], + [ + 1782310663, + null, + null, + null + ], + [ + 1782310665, + null, + null, + null + ], + [ + 1782310666, + null, + null, + null + ], + [ + 1782310667, + null, + null, + null + ], + [ + 1782310668, + null, + null, + null + ], + [ + 1782310669, + null, + null, + null + ], + [ + 1782310670, + null, + null, + null + ], + [ + 1782310671, + null, + null, + null + ], + [ + 1782310672, + null, + null, + null + ], + [ + 1782310673, + null, + null, + null + ], + [ + 1782310674, + null, + null, + null + ], + [ + 1782310675, + null, + null, + null + ], + [ + 1782310676, + null, + null, + null + ], + [ + 1782310677, + null, + null, + null + ], + [ + 1782310678, + null, + null, + null + ], + [ + 1782310679, + null, + null, + null + ], + [ + 1782310680, + null, + null, + null + ], + [ + 1782310681, + null, + null, + null + ], + [ + 1782310682, + null, + null, + null + ], + [ + 1782310683, + null, + null, + null + ], + [ + 1782310684, + null, + null, + null + ], + [ + 1782310685, + null, + null, + null + ], + [ + 1782310686, + null, + null, + null + ], + [ + 1782310687, + null, + null, + null + ], + [ + 1782310688, + null, + null, + null + ], + [ + 1782310689, + null, + null, + null + ], + [ + 1782310690, + null, + null, + null + ], + [ + 1782310691, + null, + null, + null + ], + [ + 1782310692, + null, + null, + null + ], + [ + 1782310693, + null, + null, + null + ], + [ + 1782310694, + null, + null, + null + ], + [ + 1782310695, + null, + null, + null + ], + [ + 1782310696, + null, + null, + null + ], + [ + 1782310697, + null, + null, + null + ], + [ + 1782310698, + null, + null, + null + ], + [ + 1782310699, + null, + null, + null + ], + [ + 1782310700, + null, + null, + null + ], + [ + 1782310701, + null, + null, + null + ], + [ + 1782310702, + null, + null, + null + ], + [ + 1782310703, + null, + null, + null + ], + [ + 1782310704, + null, + null, + null + ], + [ + 1782310705, + null, + null, + null + ], + [ + 1782310706, + null, + null, + null + ], + [ + 1782310707, + null, + null, + null + ], + [ + 1782310708, + null, + null, + null + ], + [ + 1782310709, + null, + null, + null + ], + [ + 1782310710, + null, + null, + null + ], + [ + 1782310711, + null, + null, + null + ], + [ + 1782310712, + null, + null, + null + ], + [ + 1782310713, + null, + null, + null + ], + [ + 1782310714, + null, + null, + null + ], + [ + 1782310715, + null, + null, + null + ], + [ + 1782310716, + null, + null, + null + ], + [ + 1782310717, + null, + null, + null + ], + [ + 1782310718, + null, + null, + null + ], + [ + 1782310719, + null, + null, + null + ], + [ + 1782310720, + null, + null, + null + ], + [ + 1782310721, + null, + null, + null + ], + [ + 1782310722, + null, + null, + null + ], + [ + 1782310723, + null, + null, + null + ], + [ + 1782310724, + null, + null, + null + ], + [ + 1782310725, + null, + null, + null + ], + [ + 1782310726, + null, + null, + null + ], + [ + 1782310727, + null, + null, + null + ], + [ + 1782310728, + null, + null, + null + ], + [ + 1782310729, + null, + null, + null + ], + [ + 1782310730, + null, + null, + null + ], + [ + 1782310731, + null, + null, + null + ], + [ + 1782310732, + null, + null, + null + ], + [ + 1782310733, + null, + null, + null + ], + [ + 1782310734, + null, + null, + null + ], + [ + 1782310735, + null, + null, + null + ], + [ + 1782310736, + null, + null, + null + ], + [ + 1782310737, + null, + null, + null + ], + [ + 1782310738, + null, + null, + null + ], + [ + 1782310739, + null, + null, + null + ], + [ + 1782310741, + null, + null, + null + ], + [ + 1782310742, + null, + null, + null + ], + [ + 1782310743, + null, + null, + null + ], + [ + 1782310744, + null, + null, + null + ], + [ + 1782310745, + null, + null, + null + ], + [ + 1782310746, + null, + null, + null + ], + [ + 1782310747, + null, + null, + null + ], + [ + 1782310748, + null, + null, + null + ], + [ + 1782310749, + null, + null, + null + ], + [ + 1782310750, + null, + null, + null + ], + [ + 1782310751, + null, + null, + null + ], + [ + 1782310752, + null, + null, + null + ], + [ + 1782310753, + null, + null, + null + ], + [ + 1782310754, + null, + null, + null + ], + [ + 1782310755, + null, + null, + null + ], + [ + 1782310756, + null, + null, + null + ], + [ + 1782310757, + null, + null, + null + ], + [ + 1782310758, + null, + null, + null + ], + [ + 1782310759, + null, + null, + null + ], + [ + 1782310760, + null, + null, + null + ], + [ + 1782310761, + null, + null, + null + ], + [ + 1782310762, + null, + null, + null + ], + [ + 1782310763, + null, + null, + null + ], + [ + 1782310764, + null, + null, + null + ], + [ + 1782310765, + null, + null, + null + ], + [ + 1782310766, + null, + null, + null + ], + [ + 1782310767, + null, + null, + null + ], + [ + 1782310768, + null, + null, + null + ], + [ + 1782310769, + null, + null, + null + ], + [ + 1782310770, + null, + null, + null + ], + [ + 1782310771, + null, + null, + null + ], + [ + 1782310772, + null, + null, + null + ], + [ + 1782310773, + null, + null, + null + ], + [ + 1782310774, + null, + null, + null + ], + [ + 1782310775, + null, + null, + null + ], + [ + 1782310776, + null, + null, + null + ], + [ + 1782310777, + null, + null, + null + ], + [ + 1782310778, + null, + null, + null + ], + [ + 1782310779, + null, + null, + null + ], + [ + 1782310780, + null, + null, + null + ], + [ + 1782310781, + null, + null, + null + ], + [ + 1782310782, + null, + null, + null + ], + [ + 1782310783, + null, + null, + null + ], + [ + 1782310784, + null, + null, + null + ], + [ + 1782310785, + null, + null, + null + ], + [ + 1782310786, + null, + null, + null + ], + [ + 1782310787, + null, + null, + null + ], + [ + 1782310788, + null, + null, + null + ], + [ + 1782310789, + null, + null, + null + ], + [ + 1782310790, + null, + null, + null + ], + [ + 1782310791, + null, + null, + null + ], + [ + 1782310792, + null, + null, + null + ], + [ + 1782310793, + null, + null, + null + ], + [ + 1782310794, + null, + null, + null + ], + [ + 1782310795, + null, + null, + null + ], + [ + 1782310796, + null, + null, + null + ], + [ + 1782310797, + null, + null, + null + ], + [ + 1782310798, + null, + null, + null + ], + [ + 1782310799, + null, + null, + null + ], + [ + 1782310800, + null, + null, + null + ], + [ + 1782310801, + null, + null, + null + ], + [ + 1782310802, + null, + null, + null + ], + [ + 1782310803, + null, + null, + null + ], + [ + 1782310804, + null, + null, + null + ], + [ + 1782310805, + null, + null, + null + ], + [ + 1782310806, + null, + null, + null + ], + [ + 1782310807, + null, + null, + null + ], + [ + 1782310808, + null, + null, + null + ], + [ + 1782310809, + null, + null, + null + ], + [ + 1782310810, + null, + null, + null + ], + [ + 1782310811, + null, + null, + null + ], + [ + 1782310812, + null, + null, + null + ], + [ + 1782310813, + null, + null, + null + ], + [ + 1782310814, + null, + null, + null + ], + [ + 1782310815, + null, + null, + null + ], + [ + 1782310816, + null, + null, + null + ], + [ + 1782310817, + null, + null, + null + ], + [ + 1782310818, + null, + null, + null + ], + [ + 1782310819, + null, + null, + null + ], + [ + 1782310820, + null, + null, + null + ], + [ + 1782310821, + null, + null, + null + ], + [ + 1782310822, + null, + null, + null + ], + [ + 1782310823, + null, + null, + null + ], + [ + 1782310824, + null, + null, + null + ], + [ + 1782310825, + null, + null, + null + ], + [ + 1782310826, + null, + null, + null + ], + [ + 1782310827, + null, + null, + null + ], + [ + 1782310828, + null, + null, + null + ], + [ + 1782310829, + null, + null, + null + ], + [ + 1782310831, + null, + null, + null + ], + [ + 1782310832, + null, + null, + null + ], + [ + 1782310833, + null, + null, + null + ], + [ + 1782310834, + null, + null, + null + ], + [ + 1782310835, + null, + null, + null + ], + [ + 1782310836, + null, + null, + null + ], + [ + 1782310837, + null, + null, + null + ], + [ + 1782310838, + null, + null, + null + ], + [ + 1782310839, + null, + null, + null + ], + [ + 1782310840, + null, + null, + null + ], + [ + 1782310841, + null, + null, + null + ], + [ + 1782310842, + null, + null, + null + ], + [ + 1782310843, + null, + null, + null + ], + [ + 1782310844, + null, + null, + null + ], + [ + 1782310845, + null, + null, + null + ], + [ + 1782310846, + null, + null, + null + ], + [ + 1782310847, + null, + null, + null + ], + [ + 1782310848, + null, + null, + null + ], + [ + 1782310849, + null, + null, + null + ], + [ + 1782310850, + null, + null, + null + ], + [ + 1782310851, + null, + null, + null + ], + [ + 1782310852, + null, + null, + null + ], + [ + 1782310853, + null, + null, + null + ], + [ + 1782310854, + null, + null, + null + ], + [ + 1782310855, + null, + null, + null + ], + [ + 1782310856, + null, + null, + null + ], + [ + 1782310857, + null, + null, + null + ], + [ + 1782310858, + null, + null, + null + ], + [ + 1782310859, + null, + null, + null + ], + [ + 1782310860, + null, + null, + null + ], + [ + 1782310861, + null, + null, + null + ], + [ + 1782310862, + null, + null, + null + ], + [ + 1782310863, + null, + null, + null + ], + [ + 1782310864, + null, + null, + null + ], + [ + 1782310865, + null, + null, + null + ], + [ + 1782310866, + null, + null, + null + ], + [ + 1782310867, + null, + null, + null + ], + [ + 1782310868, + null, + null, + null + ], + [ + 1782310869, + null, + null, + null + ], + [ + 1782310870, + null, + null, + null + ], + [ + 1782310871, + null, + null, + null + ], + [ + 1782310872, + null, + null, + null + ], + [ + 1782310873, + null, + null, + null + ], + [ + 1782310874, + null, + null, + null + ], + [ + 1782310875, + null, + null, + null + ], + [ + 1782310876, + null, + null, + null + ], + [ + 1782310877, + null, + null, + null + ], + [ + 1782310878, + null, + null, + null + ], + [ + 1782310879, + null, + null, + null + ], + [ + 1782310880, + null, + null, + null + ], + [ + 1782310881, + null, + null, + null + ], + [ + 1782310882, + null, + null, + null + ], + [ + 1782310883, + null, + null, + null + ], + [ + 1782310884, + null, + null, + null + ], + [ + 1782310885, + null, + null, + null + ], + [ + 1782310886, + null, + null, + null + ], + [ + 1782310887, + null, + null, + null + ], + [ + 1782310888, + null, + null, + null + ], + [ + 1782310889, + null, + null, + null + ], + [ + 1782310890, + null, + null, + null + ], + [ + 1782310891, + null, + null, + null + ], + [ + 1782310892, + null, + null, + null + ], + [ + 1782310893, + null, + null, + null + ], + [ + 1782310894, + null, + null, + null + ], + [ + 1782310896, + null, + null, + null + ], + [ + 1782310897, + null, + null, + null + ], + [ + 1782310898, + null, + null, + null + ], + [ + 1782310899, + null, + null, + null + ], + [ + 1782310900, + null, + null, + null + ], + [ + 1782310901, + null, + null, + null + ], + [ + 1782310902, + null, + null, + null + ], + [ + 1782310903, + null, + null, + null + ], + [ + 1782310904, + null, + null, + null + ], + [ + 1782310905, + null, + null, + null + ], + [ + 1782310906, + null, + null, + null + ], + [ + 1782310907, + null, + null, + null + ], + [ + 1782310908, + null, + null, + null + ], + [ + 1782310909, + null, + null, + null + ], + [ + 1782310910, + null, + null, + null + ], + [ + 1782310911, + null, + null, + null + ], + [ + 1782310912, + null, + null, + null + ], + [ + 1782310913, + null, + null, + null + ], + [ + 1782310914, + null, + null, + null + ], + [ + 1782310915, + null, + null, + null + ], + [ + 1782310916, + null, + null, + null + ], + [ + 1782310917, + null, + null, + null + ], + [ + 1782310918, + null, + null, + null + ], + [ + 1782310919, + null, + null, + null + ], + [ + 1782310920, + null, + null, + null + ], + [ + 1782310921, + null, + null, + null + ], + [ + 1782310922, + null, + null, + null + ], + [ + 1782310923, + null, + null, + null + ], + [ + 1782310924, + null, + null, + null + ], + [ + 1782310925, + null, + null, + null + ], + [ + 1782310926, + null, + null, + null + ], + [ + 1782310927, + null, + null, + null + ], + [ + 1782310928, + null, + null, + null + ], + [ + 1782310929, + null, + null, + null + ], + [ + 1782310930, + null, + null, + null + ], + [ + 1782310931, + null, + null, + null + ], + [ + 1782310932, + null, + null, + null + ], + [ + 1782310933, + null, + null, + null + ], + [ + 1782310934, + null, + null, + null + ], + [ + 1782310935, + null, + null, + null + ], + [ + 1782310936, + null, + null, + null + ], + [ + 1782310937, + null, + null, + null + ], + [ + 1782310938, + null, + null, + null + ], + [ + 1782310939, + null, + null, + null + ], + [ + 1782310940, + null, + null, + null + ], + [ + 1782310941, + null, + null, + null + ], + [ + 1782310942, + null, + null, + null + ], + [ + 1782310943, + null, + null, + null + ], + [ + 1782310944, + null, + null, + null + ], + [ + 1782310945, + null, + null, + null + ], + [ + 1782310946, + null, + null, + null + ], + [ + 1782310947, + null, + null, + null + ], + [ + 1782310948, + null, + null, + null + ], + [ + 1782310949, + null, + null, + null + ], + [ + 1782310950, + null, + null, + null + ], + [ + 1782310951, + null, + null, + null + ], + [ + 1782310952, + null, + null, + null + ], + [ + 1782310953, + null, + null, + null + ], + [ + 1782310954, + null, + null, + null + ], + [ + 1782310955, + null, + null, + null + ], + [ + 1782310956, + null, + null, + null + ], + [ + 1782310957, + null, + null, + null + ], + [ + 1782310958, + null, + null, + null + ], + [ + 1782310959, + null, + null, + null + ], + [ + 1782310960, + null, + null, + null + ], + [ + 1782310961, + null, + null, + null + ], + [ + 1782310962, + null, + null, + null + ], + [ + 1782310963, + null, + null, + null + ], + [ + 1782310964, + null, + null, + null + ], + [ + 1782310965, + null, + null, + null + ], + [ + 1782310966, + null, + null, + null + ], + [ + 1782310967, + null, + null, + null + ], + [ + 1782310968, + null, + null, + null + ], + [ + 1782310969, + null, + null, + null + ], + [ + 1782310970, + null, + null, + null + ], + [ + 1782310971, + null, + null, + null + ], + [ + 1782310972, + null, + null, + null + ], + [ + 1782310973, + null, + null, + null + ], + [ + 1782310974, + null, + null, + null + ], + [ + 1782310975, + null, + null, + null + ], + [ + 1782310976, + null, + null, + null + ], + [ + 1782310977, + null, + null, + null + ], + [ + 1782310978, + null, + null, + null + ], + [ + 1782310979, + null, + null, + null + ], + [ + 1782310980, + null, + null, + null + ], + [ + 1782310981, + null, + null, + null + ], + [ + 1782310982, + null, + null, + null + ], + [ + 1782310983, + null, + null, + null + ], + [ + 1782310984, + null, + null, + null + ], + [ + 1782310985, + null, + null, + null + ], + [ + 1782310986, + null, + null, + null + ], + [ + 1782310987, + null, + null, + null + ], + [ + 1782310988, + null, + null, + null + ], + [ + 1782310989, + null, + null, + null + ], + [ + 1782310990, + null, + null, + null + ], + [ + 1782310991, + null, + null, + null + ], + [ + 1782310992, + null, + null, + null + ], + [ + 1782310993, + null, + null, + null + ], + [ + 1782310994, + null, + null, + null + ], + [ + 1782310995, + null, + null, + null + ], + [ + 1782310997, + null, + null, + null + ], + [ + 1782310998, + null, + null, + null + ], + [ + 1782310999, + null, + null, + null + ], + [ + 1782311000, + null, + null, + null + ], + [ + 1782311001, + null, + null, + null + ], + [ + 1782311002, + null, + null, + null + ], + [ + 1782311003, + null, + null, + null + ], + [ + 1782311004, + null, + null, + null + ], + [ + 1782311005, + null, + null, + null + ], + [ + 1782311006, + null, + null, + null + ], + [ + 1782311007, + null, + null, + null + ], + [ + 1782311008, + null, + null, + null + ], + [ + 1782311009, + null, + null, + null + ], + [ + 1782311010, + null, + null, + null + ], + [ + 1782311011, + null, + null, + null + ], + [ + 1782311012, + null, + null, + null + ], + [ + 1782311013, + null, + null, + null + ], + [ + 1782311014, + null, + null, + null + ], + [ + 1782311015, + null, + null, + null + ], + [ + 1782311016, + null, + null, + null + ], + [ + 1782311017, + null, + null, + null + ], + [ + 1782311018, + null, + null, + null + ], + [ + 1782311019, + null, + null, + null + ], + [ + 1782311020, + null, + null, + null + ], + [ + 1782311021, + null, + null, + null + ], + [ + 1782311022, + null, + null, + null + ], + [ + 1782311023, + null, + null, + null + ], + [ + 1782311024, + null, + null, + null + ], + [ + 1782311025, + null, + null, + null + ], + [ + 1782311026, + null, + null, + null + ], + [ + 1782311027, + null, + null, + null + ], + [ + 1782311028, + null, + null, + null + ], + [ + 1782311029, + null, + null, + null + ], + [ + 1782311030, + null, + null, + null + ], + [ + 1782311031, + null, + null, + null + ], + [ + 1782311032, + null, + null, + null + ], + [ + 1782311033, + null, + null, + null + ], + [ + 1782311034, + null, + null, + null + ], + [ + 1782311035, + null, + null, + null + ], + [ + 1782311036, + null, + null, + null + ], + [ + 1782311037, + null, + null, + null + ], + [ + 1782311038, + null, + null, + null + ], + [ + 1782311039, + null, + null, + null + ], + [ + 1782311040, + null, + null, + null + ], + [ + 1782311041, + null, + null, + null + ], + [ + 1782311042, + null, + null, + null + ], + [ + 1782311043, + null, + null, + null + ], + [ + 1782311044, + null, + null, + null + ], + [ + 1782311045, + null, + null, + null + ], + [ + 1782311046, + null, + null, + null + ], + [ + 1782311047, + null, + null, + null + ], + [ + 1782311048, + null, + null, + null + ], + [ + 1782311049, + null, + null, + null + ], + [ + 1782311050, + null, + null, + null + ], + [ + 1782311051, + null, + null, + null + ], + [ + 1782311052, + null, + null, + null + ], + [ + 1782311053, + null, + null, + null + ], + [ + 1782311054, + null, + null, + null + ], + [ + 1782311055, + null, + null, + null + ], + [ + 1782311056, + null, + null, + null + ], + [ + 1782311057, + null, + null, + null + ], + [ + 1782311058, + null, + null, + null + ], + [ + 1782311059, + null, + null, + null + ], + [ + 1782311060, + null, + null, + null + ], + [ + 1782311061, + null, + null, + null + ], + [ + 1782311062, + null, + null, + null + ], + [ + 1782311063, + null, + null, + null + ], + [ + 1782311064, + null, + null, + null + ], + [ + 1782311065, + null, + null, + null + ], + [ + 1782311066, + null, + null, + null + ], + [ + 1782311067, + null, + null, + null + ], + [ + 1782311068, + null, + null, + null + ], + [ + 1782311069, + null, + null, + null + ], + [ + 1782311070, + null, + null, + null + ], + [ + 1782311071, + null, + null, + null + ], + [ + 1782311072, + null, + null, + null + ], + [ + 1782311073, + null, + null, + null + ], + [ + 1782311074, + null, + null, + null + ], + [ + 1782311075, + null, + null, + null + ], + [ + 1782311076, + null, + null, + null + ], + [ + 1782311077, + null, + null, + null + ], + [ + 1782311078, + null, + null, + null + ], + [ + 1782311079, + null, + null, + null + ], + [ + 1782311080, + null, + null, + null + ], + [ + 1782311081, + null, + null, + null + ], + [ + 1782311082, + null, + null, + null + ], + [ + 1782311083, + null, + null, + null + ], + [ + 1782311084, + null, + null, + null + ], + [ + 1782311085, + null, + null, + null + ], + [ + 1782311086, + null, + null, + null + ], + [ + 1782311087, + null, + null, + null + ], + [ + 1782311088, + null, + null, + null + ], + [ + 1782311089, + null, + null, + null + ], + [ + 1782311090, + null, + null, + null + ], + [ + 1782311091, + null, + null, + null + ], + [ + 1782311092, + null, + null, + null + ], + [ + 1782311093, + null, + null, + null + ], + [ + 1782311094, + null, + null, + null + ], + [ + 1782311095, + null, + null, + null + ], + [ + 1782311097, + null, + null, + null + ], + [ + 1782311098, + null, + null, + null + ], + [ + 1782311099, + null, + null, + null + ], + [ + 1782311100, + null, + null, + null + ], + [ + 1782311101, + null, + null, + null + ], + [ + 1782311102, + null, + null, + null + ], + [ + 1782311103, + null, + null, + null + ], + [ + 1782311104, + null, + null, + null + ], + [ + 1782311105, + null, + null, + null + ], + [ + 1782311106, + null, + null, + null + ], + [ + 1782311107, + null, + null, + null + ], + [ + 1782311108, + null, + null, + null + ], + [ + 1782311109, + null, + null, + null + ], + [ + 1782311110, + null, + null, + null + ], + [ + 1782311111, + null, + null, + null + ], + [ + 1782311112, + null, + null, + null + ], + [ + 1782311113, + null, + null, + null + ], + [ + 1782311114, + null, + null, + null + ], + [ + 1782311115, + null, + null, + null + ], + [ + 1782311116, + null, + null, + null + ], + [ + 1782311117, + null, + null, + null + ], + [ + 1782311118, + null, + null, + null + ], + [ + 1782311119, + null, + null, + null + ], + [ + 1782311120, + null, + null, + null + ], + [ + 1782311121, + null, + null, + null + ], + [ + 1782311122, + null, + null, + null + ], + [ + 1782311123, + null, + null, + null + ], + [ + 1782311124, + null, + null, + null + ], + [ + 1782311125, + null, + null, + null + ], + [ + 1782311126, + null, + null, + null + ], + [ + 1782311127, + null, + null, + null + ], + [ + 1782311128, + null, + null, + null + ], + [ + 1782311129, + null, + null, + null + ], + [ + 1782311130, + null, + null, + null + ], + [ + 1782311131, + null, + null, + null + ], + [ + 1782311132, + null, + null, + null + ], + [ + 1782311133, + null, + null, + null + ], + [ + 1782311134, + null, + null, + null + ], + [ + 1782311135, + null, + null, + null + ], + [ + 1782311136, + null, + null, + null + ], + [ + 1782311137, + null, + null, + null + ], + [ + 1782311138, + null, + null, + null + ], + [ + 1782311139, + null, + null, + null + ], + [ + 1782311140, + null, + null, + null + ], + [ + 1782311141, + null, + null, + null + ], + [ + 1782311142, + null, + null, + null + ], + [ + 1782311143, + null, + null, + null + ], + [ + 1782311144, + null, + null, + null + ], + [ + 1782311145, + null, + null, + null + ], + [ + 1782311146, + null, + null, + null + ], + [ + 1782311147, + null, + null, + null + ], + [ + 1782311148, + null, + null, + null + ], + [ + 1782311149, + null, + null, + null + ], + [ + 1782311150, + null, + null, + null + ], + [ + 1782311151, + null, + null, + null + ], + [ + 1782311152, + null, + null, + null + ], + [ + 1782311153, + null, + null, + null + ], + [ + 1782311154, + null, + null, + null + ], + [ + 1782311155, + null, + null, + null + ], + [ + 1782311156, + null, + null, + null + ], + [ + 1782311157, + null, + null, + null + ], + [ + 1782311158, + null, + null, + null + ], + [ + 1782311159, + null, + null, + null + ], + [ + 1782311160, + null, + null, + null + ], + [ + 1782311161, + null, + null, + null + ], + [ + 1782311162, + null, + null, + null + ], + [ + 1782311163, + null, + null, + null + ], + [ + 1782311164, + null, + null, + null + ], + [ + 1782311165, + null, + null, + null + ], + [ + 1782311166, + null, + null, + null + ], + [ + 1782311167, + null, + null, + null + ], + [ + 1782311168, + null, + null, + null + ], + [ + 1782311169, + null, + null, + null + ], + [ + 1782311170, + null, + null, + null + ], + [ + 1782311171, + null, + null, + null + ], + [ + 1782311172, + null, + null, + null + ], + [ + 1782311173, + null, + null, + null + ], + [ + 1782311174, + null, + null, + null + ], + [ + 1782311175, + null, + null, + null + ], + [ + 1782311176, + null, + null, + null + ], + [ + 1782311177, + null, + null, + null + ], + [ + 1782311178, + null, + null, + null + ], + [ + 1782311179, + null, + null, + null + ], + [ + 1782311181, + null, + null, + null + ], + [ + 1782311182, + null, + null, + null + ], + [ + 1782311183, + null, + null, + null + ], + [ + 1782311184, + null, + null, + null + ], + [ + 1782311185, + null, + null, + null + ], + [ + 1782311186, + null, + null, + null + ], + [ + 1782311187, + null, + null, + null + ], + [ + 1782311188, + null, + null, + null + ], + [ + 1782311189, + null, + null, + null + ], + [ + 1782311190, + null, + null, + null + ], + [ + 1782311191, + null, + null, + null + ], + [ + 1782311192, + null, + null, + null + ], + [ + 1782311193, + null, + null, + null + ], + [ + 1782311194, + null, + null, + null + ], + [ + 1782311195, + null, + null, + null + ], + [ + 1782311196, + null, + null, + null + ], + [ + 1782311197, + null, + null, + null + ], + [ + 1782311198, + null, + null, + null + ], + [ + 1782311199, + null, + null, + null + ], + [ + 1782311200, + null, + null, + null + ], + [ + 1782311201, + null, + null, + null + ], + [ + 1782311202, + null, + null, + null + ], + [ + 1782311203, + null, + null, + null + ], + [ + 1782311204, + null, + null, + null + ], + [ + 1782311205, + null, + null, + null + ], + [ + 1782311206, + null, + null, + null + ], + [ + 1782311207, + null, + null, + null + ], + [ + 1782311208, + null, + null, + null + ], + [ + 1782311209, + null, + null, + null + ], + [ + 1782311210, + null, + null, + null + ], + [ + 1782311211, + null, + null, + null + ], + [ + 1782311212, + null, + null, + null + ], + [ + 1782311213, + null, + null, + null + ], + [ + 1782311214, + null, + null, + null + ], + [ + 1782311215, + null, + null, + null + ], + [ + 1782311216, + null, + null, + null + ], + [ + 1782311217, + null, + null, + null + ], + [ + 1782311218, + null, + null, + null + ], + [ + 1782311219, + null, + null, + null + ], + [ + 1782311220, + null, + null, + null + ], + [ + 1782311221, + null, + null, + null + ], + [ + 1782311222, + null, + null, + null + ], + [ + 1782311223, + null, + null, + null + ], + [ + 1782311224, + null, + null, + null + ], + [ + 1782311225, + null, + null, + null + ], + [ + 1782311226, + null, + null, + null + ], + [ + 1782311227, + null, + null, + null + ], + [ + 1782311228, + null, + null, + null + ], + [ + 1782311229, + null, + null, + null + ], + [ + 1782311230, + null, + null, + null + ], + [ + 1782311231, + null, + null, + null + ], + [ + 1782311232, + null, + null, + null + ], + [ + 1782311233, + null, + null, + null + ], + [ + 1782311234, + null, + null, + null + ], + [ + 1782311235, + null, + null, + null + ], + [ + 1782311236, + null, + null, + null + ], + [ + 1782311237, + null, + null, + null + ], + [ + 1782311238, + null, + null, + null + ], + [ + 1782311239, + null, + null, + null + ], + [ + 1782311240, + null, + null, + null + ], + [ + 1782311241, + null, + null, + null + ], + [ + 1782311242, + null, + null, + null + ], + [ + 1782311243, + null, + null, + null + ], + [ + 1782311245, + null, + null, + null + ], + [ + 1782311246, + null, + null, + null + ], + [ + 1782311247, + null, + null, + null + ], + [ + 1782311248, + null, + null, + null + ], + [ + 1782311249, + null, + null, + null + ], + [ + 1782311250, + null, + null, + null + ], + [ + 1782311251, + null, + null, + null + ], + [ + 1782311252, + null, + null, + null + ], + [ + 1782311253, + null, + null, + null + ], + [ + 1782311254, + null, + null, + null + ], + [ + 1782311255, + null, + null, + null + ], + [ + 1782311256, + null, + null, + null + ], + [ + 1782311257, + null, + null, + null + ], + [ + 1782311258, + null, + null, + null + ], + [ + 1782311259, + null, + null, + null + ], + [ + 1782311260, + null, + null, + null + ], + [ + 1782311261, + null, + null, + null + ], + [ + 1782311262, + null, + null, + null + ], + [ + 1782311263, + null, + null, + null + ], + [ + 1782311264, + null, + null, + null + ], + [ + 1782311265, + null, + null, + null + ], + [ + 1782311266, + null, + null, + null + ], + [ + 1782311267, + null, + null, + null + ], + [ + 1782311268, + null, + null, + null + ], + [ + 1782311269, + null, + null, + null + ], + [ + 1782311270, + null, + null, + null + ], + [ + 1782311271, + null, + null, + null + ], + [ + 1782311272, + null, + null, + null + ], + [ + 1782311273, + null, + null, + null + ], + [ + 1782311274, + null, + null, + null + ], + [ + 1782311275, + null, + null, + null + ], + [ + 1782311276, + null, + null, + null + ], + [ + 1782311277, + null, + null, + null + ], + [ + 1782311278, + null, + null, + null + ], + [ + 1782311279, + null, + null, + null + ], + [ + 1782311280, + null, + null, + null + ], + [ + 1782311281, + null, + null, + null + ], + [ + 1782311282, + null, + null, + null + ], + [ + 1782311283, + null, + null, + null + ], + [ + 1782311284, + null, + null, + null + ], + [ + 1782311285, + null, + null, + null + ], + [ + 1782311286, + null, + null, + null + ], + [ + 1782311287, + null, + null, + null + ], + [ + 1782311288, + null, + null, + null + ], + [ + 1782311289, + null, + null, + null + ], + [ + 1782311290, + null, + null, + null + ], + [ + 1782311291, + null, + null, + null + ], + [ + 1782311292, + null, + null, + null + ], + [ + 1782311293, + null, + null, + null + ], + [ + 1782311294, + null, + null, + null + ], + [ + 1782311295, + null, + null, + null + ], + [ + 1782311296, + null, + null, + null + ], + [ + 1782311297, + null, + null, + null + ], + [ + 1782311298, + null, + null, + null + ], + [ + 1782311299, + null, + null, + null + ], + [ + 1782311300, + null, + null, + null + ], + [ + 1782311301, + null, + null, + null + ], + [ + 1782311302, + null, + null, + null + ], + [ + 1782311303, + null, + null, + null + ], + [ + 1782311304, + null, + null, + null + ], + [ + 1782311305, + null, + null, + null + ], + [ + 1782311306, + null, + null, + null + ], + [ + 1782311307, + null, + null, + null + ], + [ + 1782311309, + null, + null, + null + ], + [ + 1782311310, + null, + null, + null + ], + [ + 1782311311, + null, + null, + null + ], + [ + 1782311312, + null, + null, + null + ], + [ + 1782311313, + null, + null, + null + ], + [ + 1782311314, + null, + null, + null + ], + [ + 1782311315, + null, + null, + null + ], + [ + 1782311316, + null, + null, + null + ], + [ + 1782311317, + null, + null, + null + ], + [ + 1782311318, + null, + null, + null + ], + [ + 1782311319, + null, + null, + null + ], + [ + 1782311320, + null, + null, + null + ], + [ + 1782311321, + null, + null, + null + ], + [ + 1782311322, + null, + null, + null + ], + [ + 1782311323, + null, + null, + null + ], + [ + 1782311324, + null, + null, + null + ], + [ + 1782311325, + null, + null, + null + ], + [ + 1782311326, + null, + null, + null + ], + [ + 1782311327, + null, + null, + null + ], + [ + 1782311328, + null, + null, + null + ], + [ + 1782311329, + null, + null, + null + ], + [ + 1782311330, + null, + null, + null + ], + [ + 1782311331, + null, + null, + null + ], + [ + 1782311332, + null, + null, + null + ], + [ + 1782311333, + null, + null, + null + ], + [ + 1782311334, + null, + null, + null + ], + [ + 1782311335, + null, + null, + null + ], + [ + 1782311336, + null, + null, + null + ], + [ + 1782311337, + null, + null, + null + ], + [ + 1782311338, + null, + null, + null + ], + [ + 1782311339, + null, + null, + null + ], + [ + 1782311340, + null, + null, + null + ], + [ + 1782311341, + null, + null, + null + ], + [ + 1782311342, + null, + null, + null + ], + [ + 1782311343, + null, + null, + null + ], + [ + 1782311344, + null, + null, + null + ], + [ + 1782311345, + null, + null, + null + ], + [ + 1782311346, + null, + null, + null + ], + [ + 1782311347, + null, + null, + null + ], + [ + 1782311348, + null, + null, + null + ], + [ + 1782311349, + null, + null, + null + ], + [ + 1782311350, + null, + null, + null + ], + [ + 1782311351, + null, + null, + null + ], + [ + 1782311352, + null, + null, + null + ], + [ + 1782311353, + null, + null, + null + ], + [ + 1782311354, + null, + null, + null + ], + [ + 1782311355, + null, + null, + null + ], + [ + 1782311356, + null, + null, + null + ], + [ + 1782311357, + null, + null, + null + ], + [ + 1782311358, + null, + null, + null + ], + [ + 1782311359, + null, + null, + null + ], + [ + 1782311360, + null, + null, + null + ], + [ + 1782311361, + null, + null, + null + ], + [ + 1782311362, + null, + null, + null + ], + [ + 1782311363, + null, + null, + null + ], + [ + 1782311364, + null, + null, + null + ], + [ + 1782311365, + null, + null, + null + ], + [ + 1782311366, + null, + null, + null + ], + [ + 1782311367, + null, + null, + null + ], + [ + 1782311368, + null, + null, + null + ], + [ + 1782311369, + null, + null, + null + ], + [ + 1782311370, + null, + null, + null + ] + ], + "temp_c": null, + "arm_clock_hz": null, + "throttling_detected": false + }, + "warnings": [ + "governor is 'unavailable', not 'performance' (need root on Linux, or unsupported on macOS)", + "core pinning unavailable (no taskset/numactl) \u2014 results will be noisier", + "NOT RPi5-baseline-grade: host is not a Raspberry Pi (model='', os=macos); CPU governor is 'unavailable', not 'performance'; benchmark was not pinned to a dedicated core (no taskset); build flags targeted 'apple-m3', not cortex-a76" + ], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1118, + "timed_iters": 5592, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44703.81, + "samples": 27960, + "median": 44000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 44000.0, + "q3": 45000.0, + "min": 43000.0, + "max": 84000.0, + "mean": 44389.66, + "stddev": 1067.61, + "ops_per_sec": 22727.27, + "per_rep_median": [ + 44000.0, + 44000.0, + 44000.0, + 44000.0, + 44000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1161, + "timed_iters": 5806, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43061.58, + "samples": 29030, + "median": 43000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 43000.0, + "q3": 43000.0, + "min": 42000.0, + "max": 363000.0, + "mean": 43411.54, + "stddev": 4496.09, + "ops_per_sec": 23255.81, + "per_rep_median": [ + 43000.0, + 43000.0, + 43000.0, + 43000.0, + 43000.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5211, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9595.6, + "samples": 100000, + "median": 10000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 9000.0, + "q3": 10000.0, + "min": 9000.0, + "max": 27000.0, + "mean": 9548.18, + "stddev": 650.66, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0, + 10000.0, + 10000.0, + 10000.0, + 10000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4665, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10718.93, + "samples": 100000, + "median": 11000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 10000.0, + "q3": 11000.0, + "min": 10000.0, + "max": 38000.0, + "mean": 10728.58, + "stddev": 625.39, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 3997, + "timed_iters": 19987, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12508.18, + "samples": 99935, + "median": 13000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 12000.0, + "max": 92000.0, + "mean": 12573.85, + "stddev": 841.89, + "ops_per_sec": 76923.08, + "per_rep_median": [ + 13000.0, + 13000.0, + 13000.0, + 13000.0, + 13000.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3108, + "timed_iters": 15541, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16086.47, + "samples": 77705, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 15000.0, + "max": 71000.0, + "mean": 15997.18, + "stddev": 702.07, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2956, + "timed_iters": 14779, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16915.49, + "samples": 73895, + "median": 17000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 17000.0, + "q3": 17000.0, + "min": 16000.0, + "max": 321000.0, + "mean": 17051.49, + "stddev": 2695.47, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 17000.0, + 17000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2539, + "timed_iters": 12693, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19695.16, + "samples": 63465, + "median": 20000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 19000.0, + "q3": 20000.0, + "min": 19000.0, + "max": 66000.0, + "mean": 19710.25, + "stddev": 755.86, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2090, + "timed_iters": 10448, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23928.68, + "samples": 52240, + "median": 24000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 23000.0, + "q3": 24000.0, + "min": 23000.0, + "max": 52000.0, + "mean": 23852.34, + "stddev": 884.16, + "ops_per_sec": 41666.67, + "per_rep_median": [ + 24000.0, + 24000.0, + 24000.0, + 24000.0, + 24000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1863, + "timed_iters": 9316, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26834.88, + "samples": 46580, + "median": 27000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 27000.0, + "q3": 27000.0, + "min": 26000.0, + "max": 102000.0, + "mean": 26834.46, + "stddev": 999.48, + "ops_per_sec": 37037.04, + "per_rep_median": [ + 27000.0, + 27000.0, + 27000.0, + 27000.0, + 27000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1605, + "timed_iters": 8024, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31158.36, + "samples": 40120, + "median": 31000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 31000.0, + "q3": 31000.0, + "min": 30000.0, + "max": 105000.0, + "mean": 31115.28, + "stddev": 929.77, + "ops_per_sec": 32258.06, + "per_rep_median": [ + 31000.0, + 31000.0, + 31000.0, + 31000.0, + 31000.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 101004000.0, + "samples": 150, + "median": 178272000.0, + "mad": 77179000.0, + "iqr": 231128250.0, + "q1": 101223000.0, + "q3": 332351250.0, + "min": 100805000.0, + "max": 1024046000.0, + "mean": 266369440.0, + "stddev": 202221014.14, + "ops_per_sec": 5.61, + "per_rep_median": [ + 216614500.0, + 178006500.0, + 139462500.0, + 178323500.0, + 293423500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1884, + "timed_iters": 9421, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26536.88, + "samples": 47105, + "median": 22000.0, + "mad": 1000.0, + "iqr": 5000.0, + "q1": 21000.0, + "q3": 26000.0, + "min": 20000.0, + "max": 89000.0, + "mean": 24418.64, + "stddev": 4842.99, + "ops_per_sec": 45454.55, + "per_rep_median": [ + 22000.0, + 22000.0, + 22000.0, + 22000.0, + 21000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25721000.0, + "samples": 150, + "median": 25749000.0, + "mad": 13500.0, + "iqr": 25750.0, + "q1": 25737250.0, + "q3": 25763000.0, + "min": 25702000.0, + "max": 31239000.0, + "mean": 25819400.0, + "stddev": 492243.38, + "ops_per_sec": 38.84, + "per_rep_median": [ + 25749000.0, + 25749000.0, + 25747000.0, + 25748000.0, + 25767000.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1103376000.0, + "samples": 150, + "median": 596282500.0, + "mad": 269880000.0, + "iqr": 959582750.0, + "q1": 330370250.0, + "q3": 1289953000.0, + "min": 325075000.0, + "max": 3178635000.0, + "mean": 936330806.67, + "stddev": 651164229.13, + "ops_per_sec": 1.68, + "per_rep_median": [ + 846503500.0, + 585549000.0, + 850545000.0, + 586586000.0, + 724281000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 887, + "timed_iters": 4433, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56394.92, + "samples": 22165, + "median": 48000.0, + "mad": 9000.0, + "iqr": 25000.0, + "q1": 40000.0, + "q3": 65000.0, + "min": 38000.0, + "max": 483000.0, + "mean": 54999.23, + "stddev": 20079.38, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 60659000.0, + "samples": 150, + "median": 59460000.0, + "mad": 105000.0, + "iqr": 229250.0, + "q1": 59369000.0, + "q3": 59598250.0, + "min": 58947000.0, + "max": 248385000.0, + "mean": 61344233.33, + "stddev": 15929978.67, + "ops_per_sec": 16.82, + "per_rep_median": [ + 59534000.0, + 59554000.0, + 59513500.0, + 59342500.0, + 59355000.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 341784000.0, + "samples": 150, + "median": 342687500.0, + "mad": 1162500.0, + "iqr": 3950750.0, + "q1": 341791500.0, + "q3": 345742250.0, + "min": 340355000.0, + "max": 700780000.0, + "mean": 346537780.0, + "stddev": 29581769.1, + "ops_per_sec": 2.92, + "per_rep_median": [ + 342380000.0, + 341717000.0, + 342343500.0, + 345801500.0, + 344237500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 904, + "timed_iters": 4521, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55303.03, + "samples": 22605, + "median": 48000.0, + "mad": 9000.0, + "iqr": 26000.0, + "q1": 39000.0, + "q3": 65000.0, + "min": 38000.0, + "max": 1076000.0, + "mean": 55232.82, + "stddev": 22383.2, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59493000.0, + "samples": 150, + "median": 59602000.0, + "mad": 132000.0, + "iqr": 344000.0, + "q1": 59490500.0, + "q3": 59834500.0, + "min": 59352000.0, + "max": 64247000.0, + "mean": 59820393.33, + "stddev": 659116.31, + "ops_per_sec": 16.78, + "per_rep_median": [ + 59553000.0, + 59504500.0, + 59676000.0, + 59667500.0, + 59722000.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1590178000.0, + "samples": 150, + "median": 2080458500.0, + "mad": 1334893500.0, + "iqr": 2671933250.0, + "q1": 745994500.0, + "q3": 3417927750.0, + "min": 736036000.0, + "max": 9212660000.0, + "mean": 2510700813.33, + "stddev": 1866917128.14, + "ops_per_sec": 0.48, + "per_rep_median": [ + 1748976500.0, + 2079402500.0, + 1431843000.0, + 2745667000.0, + 2085705500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 396, + "timed_iters": 1979, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 126301.96, + "samples": 9895, + "median": 120000.0, + "mad": 25000.0, + "iqr": 52000.0, + "q1": 95000.0, + "q3": 147000.0, + "min": 93000.0, + "max": 1042000.0, + "mean": 128050.53, + "stddev": 42417.37, + "ops_per_sec": 8333.33, + "per_rep_median": [ + 121000.0, + 121000.0, + 110000.0, + 110000.0, + 121000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114766000.0, + "samples": 150, + "median": 114489500.0, + "mad": 203000.0, + "iqr": 575250.0, + "q1": 114349500.0, + "q3": 114924750.0, + "min": 114149000.0, + "max": 118996000.0, + "mean": 114769393.33, + "stddev": 772008.77, + "ops_per_sec": 8.73, + "per_rep_median": [ + 114502500.0, + 114470000.0, + 114437500.0, + 114814500.0, + 114534500.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2492249000.0, + "samples": 150, + "median": 1283421000.0, + "mad": 612781000.0, + "iqr": 2401350250.0, + "q1": 674971750.0, + "q3": 3076322000.0, + "min": 667399000.0, + "max": 13624389000.0, + "mean": 2206082300.0, + "stddev": 2078898835.83, + "ops_per_sec": 0.78, + "per_rep_median": [ + 1271175500.0, + 1874305500.0, + 1286708500.0, + 1878573000.0, + 1275520000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 280, + "timed_iters": 1402, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 178317.65, + "samples": 7010, + "median": 158000.0, + "mad": 12000.0, + "iqr": 35000.0, + "q1": 146000.0, + "q3": 181000.0, + "min": 145000.0, + "max": 355000.0, + "mean": 167885.45, + "stddev": 26034.75, + "ops_per_sec": 6329.11, + "per_rep_median": [ + 158000.0, + 159000.0, + 158000.0, + 158000.0, + 158000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 111233000.0, + "samples": 150, + "median": 110810500.0, + "mad": 321000.0, + "iqr": 997500.0, + "q1": 110556500.0, + "q3": 111554000.0, + "min": 110312000.0, + "max": 442973000.0, + "mean": 113532300.0, + "stddev": 27119870.96, + "ops_per_sec": 9.02, + "per_rep_median": [ + 110614000.0, + 110988500.0, + 111054000.0, + 110930000.0, + 110540500.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1689315000.0, + "samples": 150, + "median": 2500981000.0, + "mad": 1619438500.0, + "iqr": 3239217250.0, + "q1": 883362500.0, + "q3": 4122579750.0, + "min": 874342000.0, + "max": 11418173000.0, + "mean": 2958275200.0, + "stddev": 2182736884.95, + "ops_per_sec": 0.4, + "per_rep_median": [ + 3311329500.0, + 2508653500.0, + 2090723000.0, + 1689012500.0, + 2493920500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 481, + "timed_iters": 2406, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 103888.45, + "samples": 12030, + "median": 93000.0, + "mad": 13000.0, + "iqr": 37000.0, + "q1": 81000.0, + "q3": 118000.0, + "min": 80000.0, + "max": 14371000.0, + "mean": 107932.42, + "stddev": 164753.89, + "ops_per_sec": 10752.69, + "per_rep_median": [ + 93000.0, + 93000.0, + 93000.0, + 93000.0, + 93000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 140138000.0, + "samples": 150, + "median": 139660500.0, + "mad": 75000.0, + "iqr": 227000.0, + "q1": 139608250.0, + "q3": 139835250.0, + "min": 139519000.0, + "max": 155642000.0, + "mean": 140026046.67, + "stddev": 1644461.3, + "ops_per_sec": 7.16, + "per_rep_median": [ + 139651500.0, + 139656500.0, + 139670500.0, + 139669500.0, + 139673500.0 + ] + } + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 182, + "timed_iters": 909, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 275094.49, + "samples": 4545, + "median": 275000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 273000.0, + "q3": 275000.0, + "min": 271000.0, + "max": 359000.0, + "mean": 274668.43, + "stddev": 2627.19, + "ops_per_sec": 3636.36, + "per_rep_median": [ + 275000.0, + 275000.0, + 275000.0, + 275000.0, + 275000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 136, + "timed_iters": 680, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 367787.4, + "samples": 3400, + "median": 367000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 367000.0, + "q3": 368000.0, + "min": 365000.0, + "max": 440000.0, + "mean": 368215.88, + "stddev": 3106.88, + "ops_per_sec": 2724.8, + "per_rep_median": [ + 367000.0, + 367000.0, + 368000.0, + 368000.0, + 367000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 143, + "timed_iters": 717, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 348566.93, + "samples": 3585, + "median": 348000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 347000.0, + "q3": 348000.0, + "min": 346000.0, + "max": 1716000.0, + "mean": 349977.41, + "stddev": 31023.69, + "ops_per_sec": 2873.56, + "per_rep_median": [ + 348000.0, + 348000.0, + 348000.0, + 348000.0, + 348000.0 + ] + } + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 92, + "timed_iters": 461, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 542349.21, + "samples": 2305, + "median": 541000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 540000.0, + "q3": 542000.0, + "min": 538000.0, + "max": 598000.0, + "mean": 541865.08, + "stddev": 3900.4, + "ops_per_sec": 1848.43, + "per_rep_median": [ + 541000.0, + 541000.0, + 541000.0, + 541000.0, + 541000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 69, + "timed_iters": 346, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 722492.06, + "samples": 1730, + "median": 718000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 716000.0, + "q3": 719000.0, + "min": 714000.0, + "max": 749000.0, + "mean": 718808.67, + "stddev": 3726.92, + "ops_per_sec": 1392.76, + "per_rep_median": [ + 718000.0, + 718000.0, + 718000.0, + 718000.0, + 718000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 72, + "timed_iters": 361, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 693476.19, + "samples": 1805, + "median": 682000.0, + "mad": 3000.0, + "iqr": 9000.0, + "q1": 680000.0, + "q3": 689000.0, + "min": 678000.0, + "max": 730000.0, + "mean": 684618.84, + "stddev": 5903.22, + "ops_per_sec": 1466.28, + "per_rep_median": [ + 693000.0, + 682000.0, + 682000.0, + 682000.0, + 682000.0 + ] + } + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 52, + "timed_iters": 262, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 953841.27, + "samples": 1310, + "median": 954000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 951000.0, + "q3": 955000.0, + "min": 949000.0, + "max": 1000000.0, + "mean": 954338.93, + "stddev": 4521.02, + "ops_per_sec": 1048.22, + "per_rep_median": [ + 953000.0, + 954000.0, + 954000.0, + 954000.0, + 953500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 40, + "timed_iters": 202, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1237806.45, + "samples": 1010, + "median": 1237000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 1235000.0, + "q3": 1240000.0, + "min": 1232000.0, + "max": 1380000.0, + "mean": 1238600.0, + "stddev": 7937.84, + "ops_per_sec": 808.41, + "per_rep_median": [ + 1237000.0, + 1237000.0, + 1236000.0, + 1236000.0, + 1238000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 42, + "timed_iters": 210, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1189548.39, + "samples": 1050, + "median": 1187000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 1185000.0, + "q3": 1190000.0, + "min": 1182000.0, + "max": 1225000.0, + "mean": 1188275.24, + "stddev": 4878.45, + "ops_per_sec": 842.46, + "per_rep_median": [ + 1187000.0, + 1188000.0, + 1187000.0, + 1187000.0, + 1187000.0 + ] + } + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1107, + "timed_iters": 5534, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45172.04, + "samples": 27670, + "median": 45000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 45000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 92000.0, + "mean": 44903.04, + "stddev": 867.67, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1114, + "timed_iters": 5571, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44872.92, + "samples": 27855, + "median": 45000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 45000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 71000.0, + "mean": 44945.04, + "stddev": 782.86, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 398, + "timed_iters": 1992, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 125525.49, + "samples": 9960, + "median": 125000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 124000.0, + "q3": 125000.0, + "min": 123000.0, + "max": 175000.0, + "mean": 124755.72, + "stddev": 1713.74, + "ops_per_sec": 8000.0, + "per_rep_median": [ + 125000.0, + 125000.0, + 124000.0, + 124000.0, + 124000.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 801, + "timed_iters": 4003, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 62457.93, + "samples": 20015, + "median": 62000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 60000.0, + "max": 658000.0, + "mean": 62128.4, + "stddev": 6440.65, + "ops_per_sec": 16129.03, + "per_rep_median": [ + 62000.0, + 62000.0, + 62000.0, + 62000.0, + 62000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 158, + "timed_iters": 789, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 317015.75, + "samples": 3945, + "median": 216000.0, + "mad": 101000.0, + "iqr": 203000.0, + "q1": 159000.0, + "q3": 362000.0, + "min": 114000.0, + "max": 1714000.0, + "mean": 282793.41, + "stddev": 195284.87, + "ops_per_sec": 4629.63, + "per_rep_median": [ + 216000.0, + 216000.0, + 216000.0, + 216000.0, + 216000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 746, + "timed_iters": 3730, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 67025.44, + "samples": 18650, + "median": 67000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 67000.0, + "q3": 67000.0, + "min": 66000.0, + "max": 83000.0, + "mean": 67137.0, + "stddev": 1014.37, + "ops_per_sec": 14925.37, + "per_rep_median": [ + 67000.0, + 67000.0, + 67000.0, + 67000.0, + 67000.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 407, + "timed_iters": 2037, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 122737.25, + "samples": 10185, + "median": 121000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 121000.0, + "q3": 122000.0, + "min": 119000.0, + "max": 259000.0, + "mean": 121780.85, + "stddev": 2903.92, + "ops_per_sec": 8264.46, + "per_rep_median": [ + 121000.0, + 121000.0, + 121000.0, + 122000.0, + 121000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 115, + "timed_iters": 575, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 434826.77, + "samples": 2875, + "median": 375000.0, + "mad": 144000.0, + "iqr": 357000.0, + "q1": 236000.0, + "q3": 593000.0, + "min": 172000.0, + "max": 2744000.0, + "mean": 469785.04, + "stddev": 337509.82, + "ops_per_sec": 2666.67, + "per_rep_median": [ + 375000.0, + 376000.0, + 349000.0, + 376000.0, + 376000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 454, + "timed_iters": 2271, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 110093.93, + "samples": 11355, + "median": 109000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 109000.0, + "q3": 110000.0, + "min": 108000.0, + "max": 196000.0, + "mean": 109698.37, + "stddev": 2038.3, + "ops_per_sec": 9174.31, + "per_rep_median": [ + 109000.0, + 109000.0, + 110000.0, + 110000.0, + 109000.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 287, + "timed_iters": 1436, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 174094.12, + "samples": 7180, + "median": 172000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 171000.0, + "q3": 173000.0, + "min": 169000.0, + "max": 276000.0, + "mean": 172275.07, + "stddev": 2357.74, + "ops_per_sec": 5813.95, + "per_rep_median": [ + 172000.0, + 172000.0, + 172000.0, + 172000.0, + 172000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 79, + "timed_iters": 393, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 636317.46, + "samples": 1965, + "median": 475000.0, + "mad": 206000.0, + "iqr": 413000.0, + "q1": 274000.0, + "q3": 687000.0, + "min": 267000.0, + "max": 2518000.0, + "mean": 566463.61, + "stddev": 333614.17, + "ops_per_sec": 2105.26, + "per_rep_median": [ + 474000.0, + 483000.0, + 477000.0, + 474000.0, + 475000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 276, + "timed_iters": 1378, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 181431.37, + "samples": 6890, + "median": 181000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 181000.0, + "q3": 181000.0, + "min": 180000.0, + "max": 416000.0, + "mean": 181729.46, + "stddev": 5389.78, + "ops_per_sec": 5524.86, + "per_rep_median": [ + 181000.0, + 181000.0, + 181000.0, + 181000.0, + 181000.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 35, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7150142.86, + "samples": 175, + "median": 6422000.0, + "mad": 708000.0, + "iqr": 1673000.0, + "q1": 5861500.0, + "q3": 7534500.0, + "min": 5566000.0, + "max": 14582000.0, + "mean": 7022125.71, + "stddev": 1635803.96, + "ops_per_sec": 155.71, + "per_rep_median": [ + 6133000.0, + 7254000.0, + 6413000.0, + 6541000.0, + 6278000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 244, + "timed_iters": 1221, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 204729.41, + "samples": 6105, + "median": 204000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 202000.0, + "q3": 207000.0, + "min": 191000.0, + "max": 2174000.0, + "mean": 204997.87, + "stddev": 28394.11, + "ops_per_sec": 4901.96, + "per_rep_median": [ + 205000.0, + 204000.0, + 204000.0, + 203000.0, + 204000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1584, + "timed_iters": 7919, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31569.89, + "samples": 39595, + "median": 31000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 31000.0, + "q3": 32000.0, + "min": 30000.0, + "max": 48000.0, + "mean": 31494.1, + "stddev": 768.92, + "ops_per_sec": 32258.06, + "per_rep_median": [ + 32000.0, + 31000.0, + 31000.0, + 31000.0, + 31000.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26704666.67, + "samples": 150, + "median": 20396000.0, + "mad": 1065500.0, + "iqr": 3964250.0, + "q1": 19629000.0, + "q3": 23593250.0, + "min": 19048000.0, + "max": 48025000.0, + "mean": 23114840.0, + "stddev": 6463496.66, + "ops_per_sec": 49.03, + "per_rep_median": [ + 20495500.0, + 20503000.0, + 20794000.0, + 19988000.0, + 20234000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 122, + "timed_iters": 608, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 411181.1, + "samples": 3040, + "median": 410000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 406000.0, + "q3": 414000.0, + "min": 388000.0, + "max": 1038000.0, + "mean": 411967.76, + "stddev": 25676.48, + "ops_per_sec": 2439.02, + "per_rep_median": [ + 409000.0, + 410000.0, + 409000.0, + 410000.0, + 411000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 808, + "timed_iters": 4039, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 61892.37, + "samples": 20195, + "median": 62000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 61000.0, + "max": 76000.0, + "mean": 61694.03, + "stddev": 989.66, + "ops_per_sec": 16129.03, + "per_rep_median": [ + 62000.0, + 62000.0, + 62000.0, + 62000.0, + 62000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 58, + "timed_iters": 288, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 869095.24, + "samples": 1440, + "median": 861000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 859000.0, + "q3": 865000.0, + "min": 856000.0, + "max": 1235000.0, + "mean": 863755.56, + "stddev": 12883.18, + "ops_per_sec": 1161.44, + "per_rep_median": [ + 864000.0, + 860000.0, + 859000.0, + 859000.0, + 864000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20185000.0, + "samples": 150, + "median": 20244000.0, + "mad": 95500.0, + "iqr": 240500.0, + "q1": 20197000.0, + "q3": 20437500.0, + "min": 20098000.0, + "max": 118135000.0, + "mean": 22520000.0, + "stddev": 11409127.18, + "ops_per_sec": 49.4, + "per_rep_median": [ + 20528000.0, + 20289500.0, + 20263000.0, + 20232000.0, + 20131000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 40, + "timed_iters": 200, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1249129.03, + "samples": 1000, + "median": 1246000.0, + "mad": 7000.0, + "iqr": 21000.0, + "q1": 1241000.0, + "q3": 1262000.0, + "min": 1231000.0, + "max": 2023000.0, + "mean": 1253480.0, + "stddev": 41498.58, + "ops_per_sec": 802.57, + "per_rep_median": [ + 1246000.0, + 1244000.0, + 1244000.0, + 1243000.0, + 1266000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56119000.0, + "samples": 150, + "median": 55332500.0, + "mad": 174500.0, + "iqr": 480500.0, + "q1": 55213250.0, + "q3": 55693750.0, + "min": 55021000.0, + "max": 73045000.0, + "mean": 55749646.67, + "stddev": 1629334.41, + "ops_per_sec": 18.07, + "per_rep_median": [ + 55094500.0, + 55367500.0, + 55323000.0, + 55906000.0, + 55320500.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 421084000.0, + "samples": 150, + "median": 422498500.0, + "mad": 1495500.0, + "iqr": 3356500.0, + "q1": 421408500.0, + "q3": 424765000.0, + "min": 419406000.0, + "max": 651681000.0, + "mean": 426618066.67, + "stddev": 23774234.57, + "ops_per_sec": 2.37, + "per_rep_median": [ + 421344500.0, + 422305000.0, + 422848000.0, + 422825500.0, + 422700500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 119, + "timed_iters": 597, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 418992.13, + "samples": 2985, + "median": 414000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 413000.0, + "q3": 414000.0, + "min": 412000.0, + "max": 455000.0, + "mean": 414587.6, + "stddev": 2904.15, + "ops_per_sec": 2415.46, + "per_rep_median": [ + 414000.0, + 413000.0, + 414000.0, + 414000.0, + 414000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 39, + "timed_iters": 196, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1272580.65, + "samples": 980, + "median": 1252000.0, + "mad": 5000.0, + "iqr": 13000.0, + "q1": 1248000.0, + "q3": 1261000.0, + "min": 1245000.0, + "max": 1370000.0, + "mean": 1257557.14, + "stddev": 13599.55, + "ops_per_sec": 798.72, + "per_rep_median": [ + 1259000.0, + 1251000.0, + 1249000.0, + 1248000.0, + 1276000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33527000.0, + "samples": 150, + "median": 33445000.0, + "mad": 204500.0, + "iqr": 620750.0, + "q1": 33312000.0, + "q3": 33932750.0, + "min": 33156000.0, + "max": 44854000.0, + "mean": 33816866.67, + "stddev": 1363441.03, + "ops_per_sec": 29.9, + "per_rep_median": [ + 33420500.0, + 33296000.0, + 33312000.0, + 33473000.0, + 33873000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 135, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1847064.52, + "samples": 675, + "median": 1853000.0, + "mad": 14000.0, + "iqr": 47000.0, + "q1": 1842000.0, + "q3": 1889000.0, + "min": 1834000.0, + "max": 2245000.0, + "mean": 1865703.7, + "stddev": 32187.52, + "ops_per_sec": 539.67, + "per_rep_median": [ + 1894000.0, + 1871000.0, + 1845000.0, + 1838000.0, + 1867000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3357200.0, + "samples": 370, + "median": 3352000.0, + "mad": 12000.0, + "iqr": 24000.0, + "q1": 3335000.0, + "q3": 3359000.0, + "min": 3319000.0, + "max": 3598000.0, + "mean": 3352121.62, + "stddev": 26667.86, + "ops_per_sec": 298.33, + "per_rep_median": [ + 3354000.0, + 3336500.0, + 3367000.0, + 3355000.0, + 3330000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69025000.0, + "samples": 150, + "median": 68995000.0, + "mad": 289000.0, + "iqr": 676500.0, + "q1": 68770000.0, + "q3": 69446500.0, + "min": 68577000.0, + "max": 73585000.0, + "mean": 69290773.33, + "stddev": 832886.83, + "ops_per_sec": 14.49, + "per_rep_median": [ + 69031500.0, + 68898000.0, + 69180500.0, + 68826000.0, + 69541000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1882709.68, + "samples": 665, + "median": 1900000.0, + "mad": 7000.0, + "iqr": 18000.0, + "q1": 1888000.0, + "q3": 1906000.0, + "min": 1871000.0, + "max": 2055000.0, + "mean": 1901750.38, + "stddev": 22447.41, + "ops_per_sec": 526.32, + "per_rep_median": [ + 1876000.0, + 1910000.0, + 1901000.0, + 1900000.0, + 1900000.0 + ] + } + } + } + ], + "tls": null +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/mehmetmac-20260625T220618Z.json b/tools/benchmarks/pqc/results/mehmetmac-20260625T220618Z.json new file mode 100644 index 0000000..077b314 --- /dev/null +++ b/tools/benchmarks/pqc/results/mehmetmac-20260625T220618Z.json @@ -0,0 +1,13829 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-06-25T22:37:08Z", + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'apple-m3', not cortex-a76" + ], + "host": { + "hostname": "mehmetmac", + "os": "macos", + "os_pretty": "macOS 26.3.1 (25D771280a)", + "arch": "arm64", + "kernel": "25.3.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M3", + "ncpu": 8, + "ram_bytes": 17179869184 + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-06-25T22:06:18Z", + "timestamp_end_utc": "2026-06-25T22:37:08Z", + "duration_s": 1850, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "Apple clang version 17.0.0 (clang-1700.6.4.2)", + "bench_cflags": "-O3 -mcpu=native", + "cflags_target": "apple-m3", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET arm64-Darwin-25.3.0;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_SHA3_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.6.0", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1782425178, + null, + null, + null + ], + [ + 1782425178, + null, + null, + null + ], + [ + 1782425179, + null, + null, + null + ], + [ + 1782425180, + null, + null, + null + ], + [ + 1782425181, + null, + null, + null + ], + [ + 1782425182, + null, + null, + null + ], + [ + 1782425183, + null, + null, + null + ], + [ + 1782425184, + null, + null, + null + ], + [ + 1782425185, + null, + null, + null + ], + [ + 1782425186, + null, + null, + null + ], + [ + 1782425187, + null, + null, + null + ], + [ + 1782425188, + null, + null, + null + ], + [ + 1782425189, + null, + null, + null + ], + [ + 1782425190, + null, + null, + null + ], + [ + 1782425191, + null, + null, + null + ], + [ + 1782425192, + null, + null, + null + ], + [ + 1782425193, + null, + null, + null + ], + [ + 1782425194, + null, + null, + null + ], + [ + 1782425195, + null, + null, + null + ], + [ + 1782425196, + null, + null, + null + ], + [ + 1782425197, + null, + null, + null + ], + [ + 1782425198, + null, + null, + null + ], + [ + 1782425199, + null, + null, + null + ], + [ + 1782425200, + null, + null, + null + ], + [ + 1782425201, + null, + null, + null + ], + [ + 1782425202, + null, + null, + null + ], + [ + 1782425203, + null, + null, + null + ], + [ + 1782425204, + null, + null, + null + ], + [ + 1782425205, + null, + null, + null + ], + [ + 1782425206, + null, + null, + null + ], + [ + 1782425207, + null, + null, + null + ], + [ + 1782425208, + null, + null, + null + ], + [ + 1782425209, + null, + null, + null + ], + [ + 1782425210, + null, + null, + null + ], + [ + 1782425211, + null, + null, + null + ], + [ + 1782425212, + null, + null, + null + ], + [ + 1782425213, + null, + null, + null + ], + [ + 1782425214, + null, + null, + null + ], + [ + 1782425215, + null, + null, + null + ], + [ + 1782425216, + null, + null, + null + ], + [ + 1782425217, + null, + null, + null + ], + [ + 1782425218, + null, + null, + null + ], + [ + 1782425219, + null, + null, + null + ], + [ + 1782425221, + null, + null, + null + ], + [ + 1782425222, + null, + null, + null + ], + [ + 1782425223, + null, + null, + null + ], + [ + 1782425224, + null, + null, + null + ], + [ + 1782425225, + null, + null, + null + ], + [ + 1782425226, + null, + null, + null + ], + [ + 1782425227, + null, + null, + null + ], + [ + 1782425228, + null, + null, + null + ], + [ + 1782425229, + null, + null, + null + ], + [ + 1782425230, + null, + null, + null + ], + [ + 1782425231, + null, + null, + null + ], + [ + 1782425232, + null, + null, + null + ], + [ + 1782425233, + null, + null, + null + ], + [ + 1782425234, + null, + null, + null + ], + [ + 1782425235, + null, + null, + null + ], + [ + 1782425236, + null, + null, + null + ], + [ + 1782425237, + null, + null, + null + ], + [ + 1782425238, + null, + null, + null + ], + [ + 1782425239, + null, + null, + null + ], + [ + 1782425240, + null, + null, + null + ], + [ + 1782425241, + null, + null, + null + ], + [ + 1782425242, + null, + null, + null + ], + [ + 1782425243, + null, + null, + null + ], + [ + 1782425244, + null, + null, + null + ], + [ + 1782425245, + null, + null, + null + ], + [ + 1782425246, + null, + null, + null + ], + [ + 1782425247, + null, + null, + null + ], + [ + 1782425248, + null, + null, + null + ], + [ + 1782425249, + null, + null, + null + ], + [ + 1782425250, + null, + null, + null + ], + [ + 1782425251, + null, + null, + null + ], + [ + 1782425252, + null, + null, + null + ], + [ + 1782425253, + null, + null, + null + ], + [ + 1782425254, + null, + null, + null + ], + [ + 1782425255, + null, + null, + null + ], + [ + 1782425256, + null, + null, + null + ], + [ + 1782425257, + null, + null, + null + ], + [ + 1782425258, + null, + null, + null + ], + [ + 1782425259, + null, + null, + null + ], + [ + 1782425260, + null, + null, + null + ], + [ + 1782425261, + null, + null, + null + ], + [ + 1782425262, + null, + null, + null + ], + [ + 1782425263, + null, + null, + null + ], + [ + 1782425264, + null, + null, + null + ], + [ + 1782425265, + null, + null, + null + ], + [ + 1782425266, + null, + null, + null + ], + [ + 1782425267, + null, + null, + null + ], + [ + 1782425268, + null, + null, + null + ], + [ + 1782425269, + null, + null, + null + ], + [ + 1782425270, + null, + null, + null + ], + [ + 1782425271, + null, + null, + null + ], + [ + 1782425272, + null, + null, + null + ], + [ + 1782425273, + null, + null, + null + ], + [ + 1782425274, + null, + null, + null + ], + [ + 1782425275, + null, + null, + null + ], + [ + 1782425276, + null, + null, + null + ], + [ + 1782425277, + null, + null, + null + ], + [ + 1782425278, + null, + null, + null + ], + [ + 1782425279, + null, + null, + null + ], + [ + 1782425280, + null, + null, + null + ], + [ + 1782425281, + null, + null, + null + ], + [ + 1782425282, + null, + null, + null + ], + [ + 1782425283, + null, + null, + null + ], + [ + 1782425284, + null, + null, + null + ], + [ + 1782425285, + null, + null, + null + ], + [ + 1782425286, + null, + null, + null + ], + [ + 1782425287, + null, + null, + null + ], + [ + 1782425288, + null, + null, + null + ], + [ + 1782425289, + null, + null, + null + ], + [ + 1782425290, + null, + null, + null + ], + [ + 1782425291, + null, + null, + null + ], + [ + 1782425292, + null, + null, + null + ], + [ + 1782425293, + null, + null, + null + ], + [ + 1782425294, + null, + null, + null + ], + [ + 1782425295, + null, + null, + null + ], + [ + 1782425296, + null, + null, + null + ], + [ + 1782425297, + null, + null, + null + ], + [ + 1782425298, + null, + null, + null + ], + [ + 1782425299, + null, + null, + null + ], + [ + 1782425300, + null, + null, + null + ], + [ + 1782425301, + null, + null, + null + ], + [ + 1782425302, + null, + null, + null + ], + [ + 1782425303, + null, + null, + null + ], + [ + 1782425304, + null, + null, + null + ], + [ + 1782425305, + null, + null, + null + ], + [ + 1782425306, + null, + null, + null + ], + [ + 1782425307, + null, + null, + null + ], + [ + 1782425308, + null, + null, + null + ], + [ + 1782425309, + null, + null, + null + ], + [ + 1782425310, + null, + null, + null + ], + [ + 1782425312, + null, + null, + null + ], + [ + 1782425313, + null, + null, + null + ], + [ + 1782425314, + null, + null, + null + ], + [ + 1782425315, + null, + null, + null + ], + [ + 1782425316, + null, + null, + null + ], + [ + 1782425317, + null, + null, + null + ], + [ + 1782425318, + null, + null, + null + ], + [ + 1782425319, + null, + null, + null + ], + [ + 1782425320, + null, + null, + null + ], + [ + 1782425321, + null, + null, + null + ], + [ + 1782425322, + null, + null, + null + ], + [ + 1782425323, + null, + null, + null + ], + [ + 1782425324, + null, + null, + null + ], + [ + 1782425325, + null, + null, + null + ], + [ + 1782425326, + null, + null, + null + ], + [ + 1782425327, + null, + null, + null + ], + [ + 1782425328, + null, + null, + null + ], + [ + 1782425329, + null, + null, + null + ], + [ + 1782425330, + null, + null, + null + ], + [ + 1782425331, + null, + null, + null + ], + [ + 1782425332, + null, + null, + null + ], + [ + 1782425333, + null, + null, + null + ], + [ + 1782425334, + null, + null, + null + ], + [ + 1782425335, + null, + null, + null + ], + [ + 1782425336, + null, + null, + null + ], + [ + 1782425337, + null, + null, + null + ], + [ + 1782425338, + null, + null, + null + ], + [ + 1782425339, + null, + null, + null + ], + [ + 1782425340, + null, + null, + null + ], + [ + 1782425341, + null, + null, + null + ], + [ + 1782425342, + null, + null, + null + ], + [ + 1782425343, + null, + null, + null + ], + [ + 1782425344, + null, + null, + null + ], + [ + 1782425345, + null, + null, + null + ], + [ + 1782425346, + null, + null, + null + ], + [ + 1782425347, + null, + null, + null + ], + [ + 1782425348, + null, + null, + null + ], + [ + 1782425349, + null, + null, + null + ], + [ + 1782425350, + null, + null, + null + ], + [ + 1782425351, + null, + null, + null + ], + [ + 1782425352, + null, + null, + null + ], + [ + 1782425353, + null, + null, + null + ], + [ + 1782425354, + null, + null, + null + ], + [ + 1782425355, + null, + null, + null + ], + [ + 1782425356, + null, + null, + null + ], + [ + 1782425357, + null, + null, + null + ], + [ + 1782425358, + null, + null, + null + ], + [ + 1782425359, + null, + null, + null + ], + [ + 1782425360, + null, + null, + null + ], + [ + 1782425361, + null, + null, + null + ], + [ + 1782425362, + null, + null, + null + ], + [ + 1782425363, + null, + null, + null + ], + [ + 1782425364, + null, + null, + null + ], + [ + 1782425365, + null, + null, + null + ], + [ + 1782425366, + null, + null, + null + ], + [ + 1782425367, + null, + null, + null + ], + [ + 1782425368, + null, + null, + null + ], + [ + 1782425369, + null, + null, + null + ], + [ + 1782425370, + null, + null, + null + ], + [ + 1782425371, + null, + null, + null + ], + [ + 1782425372, + null, + null, + null + ], + [ + 1782425373, + null, + null, + null + ], + [ + 1782425374, + null, + null, + null + ], + [ + 1782425375, + null, + null, + null + ], + [ + 1782425376, + null, + null, + null + ], + [ + 1782425377, + null, + null, + null + ], + [ + 1782425378, + null, + null, + null + ], + [ + 1782425379, + null, + null, + null + ], + [ + 1782425380, + null, + null, + null + ], + [ + 1782425381, + null, + null, + null + ], + [ + 1782425382, + null, + null, + null + ], + [ + 1782425383, + null, + null, + null + ], + [ + 1782425384, + null, + null, + null + ], + [ + 1782425385, + null, + null, + null + ], + [ + 1782425386, + null, + null, + null + ], + [ + 1782425387, + null, + null, + null + ], + [ + 1782425388, + null, + null, + null + ], + [ + 1782425389, + null, + null, + null + ], + [ + 1782425390, + null, + null, + null + ], + [ + 1782425391, + null, + null, + null + ], + [ + 1782425392, + null, + null, + null + ], + [ + 1782425393, + null, + null, + null + ], + [ + 1782425394, + null, + null, + null + ], + [ + 1782425395, + null, + null, + null + ], + [ + 1782425396, + null, + null, + null + ], + [ + 1782425397, + null, + null, + null + ], + [ + 1782425398, + null, + null, + null + ], + [ + 1782425399, + null, + null, + null + ], + [ + 1782425400, + null, + null, + null + ], + [ + 1782425401, + null, + null, + null + ], + [ + 1782425402, + null, + null, + null + ], + [ + 1782425403, + null, + null, + null + ], + [ + 1782425404, + null, + null, + null + ], + [ + 1782425406, + null, + null, + null + ], + [ + 1782425407, + null, + null, + null + ], + [ + 1782425408, + null, + null, + null + ], + [ + 1782425409, + null, + null, + null + ], + [ + 1782425410, + null, + null, + null + ], + [ + 1782425411, + null, + null, + null + ], + [ + 1782425412, + null, + null, + null + ], + [ + 1782425413, + null, + null, + null + ], + [ + 1782425414, + null, + null, + null + ], + [ + 1782425415, + null, + null, + null + ], + [ + 1782425416, + null, + null, + null + ], + [ + 1782425417, + null, + null, + null + ], + [ + 1782425418, + null, + null, + null + ], + [ + 1782425419, + null, + null, + null + ], + [ + 1782425420, + null, + null, + null + ], + [ + 1782425421, + null, + null, + null + ], + [ + 1782425422, + null, + null, + null + ], + [ + 1782425423, + null, + null, + null + ], + [ + 1782425424, + null, + null, + null + ], + [ + 1782425425, + null, + null, + null + ], + [ + 1782425426, + null, + null, + null + ], + [ + 1782425427, + null, + null, + null + ], + [ + 1782425428, + null, + null, + null + ], + [ + 1782425429, + null, + null, + null + ], + [ + 1782425430, + null, + null, + null + ], + [ + 1782425431, + null, + null, + null + ], + [ + 1782425432, + null, + null, + null + ], + [ + 1782425433, + null, + null, + null + ], + [ + 1782425434, + null, + null, + null + ], + [ + 1782425435, + null, + null, + null + ], + [ + 1782425436, + null, + null, + null + ], + [ + 1782425437, + null, + null, + null + ], + [ + 1782425438, + null, + null, + null + ], + [ + 1782425439, + null, + null, + null + ], + [ + 1782425440, + null, + null, + null + ], + [ + 1782425441, + null, + null, + null + ], + [ + 1782425442, + null, + null, + null + ], + [ + 1782425443, + null, + null, + null + ], + [ + 1782425444, + null, + null, + null + ], + [ + 1782425445, + null, + null, + null + ], + [ + 1782425446, + null, + null, + null + ], + [ + 1782425447, + null, + null, + null + ], + [ + 1782425448, + null, + null, + null + ], + [ + 1782425449, + null, + null, + null + ], + [ + 1782425450, + null, + null, + null + ], + [ + 1782425451, + null, + null, + null + ], + [ + 1782425452, + null, + null, + null + ], + [ + 1782425453, + null, + null, + null + ], + [ + 1782425454, + null, + null, + null + ], + [ + 1782425455, + null, + null, + null + ], + [ + 1782425456, + null, + null, + null + ], + [ + 1782425457, + null, + null, + null + ], + [ + 1782425458, + null, + null, + null + ], + [ + 1782425459, + null, + null, + null + ], + [ + 1782425460, + null, + null, + null + ], + [ + 1782425461, + null, + null, + null + ], + [ + 1782425462, + null, + null, + null + ], + [ + 1782425463, + null, + null, + null + ], + [ + 1782425464, + null, + null, + null + ], + [ + 1782425465, + null, + null, + null + ], + [ + 1782425466, + null, + null, + null + ], + [ + 1782425467, + null, + null, + null + ], + [ + 1782425468, + null, + null, + null + ], + [ + 1782425469, + null, + null, + null + ], + [ + 1782425470, + null, + null, + null + ], + [ + 1782425471, + null, + null, + null + ], + [ + 1782425472, + null, + null, + null + ], + [ + 1782425473, + null, + null, + null + ], + [ + 1782425474, + null, + null, + null + ], + [ + 1782425475, + null, + null, + null + ], + [ + 1782425476, + null, + null, + null + ], + [ + 1782425477, + null, + null, + null + ], + [ + 1782425478, + null, + null, + null + ], + [ + 1782425479, + null, + null, + null + ], + [ + 1782425480, + null, + null, + null + ], + [ + 1782425481, + null, + null, + null + ], + [ + 1782425482, + null, + null, + null + ], + [ + 1782425483, + null, + null, + null + ], + [ + 1782425484, + null, + null, + null + ], + [ + 1782425485, + null, + null, + null + ], + [ + 1782425486, + null, + null, + null + ], + [ + 1782425487, + null, + null, + null + ], + [ + 1782425488, + null, + null, + null + ], + [ + 1782425489, + null, + null, + null + ], + [ + 1782425490, + null, + null, + null + ], + [ + 1782425491, + null, + null, + null + ], + [ + 1782425493, + null, + null, + null + ], + [ + 1782425494, + null, + null, + null + ], + [ + 1782425495, + null, + null, + null + ], + [ + 1782425496, + null, + null, + null + ], + [ + 1782425497, + null, + null, + null + ], + [ + 1782425498, + null, + null, + null + ], + [ + 1782425499, + null, + null, + null + ], + [ + 1782425500, + null, + null, + null + ], + [ + 1782425501, + null, + null, + null + ], + [ + 1782425502, + null, + null, + null + ], + [ + 1782425503, + null, + null, + null + ], + [ + 1782425504, + null, + null, + null + ], + [ + 1782425505, + null, + null, + null + ], + [ + 1782425506, + null, + null, + null + ], + [ + 1782425507, + null, + null, + null + ], + [ + 1782425508, + null, + null, + null + ], + [ + 1782425509, + null, + null, + null + ], + [ + 1782425510, + null, + null, + null + ], + [ + 1782425511, + null, + null, + null + ], + [ + 1782425512, + null, + null, + null + ], + [ + 1782425513, + null, + null, + null + ], + [ + 1782425514, + null, + null, + null + ], + [ + 1782425515, + null, + null, + null + ], + [ + 1782425516, + null, + null, + null + ], + [ + 1782425517, + null, + null, + null + ], + [ + 1782425518, + null, + null, + null + ], + [ + 1782425519, + null, + null, + null + ], + [ + 1782425520, + null, + null, + null + ], + [ + 1782425521, + null, + null, + null + ], + [ + 1782425522, + null, + null, + null + ], + [ + 1782425523, + null, + null, + null + ], + [ + 1782425524, + null, + null, + null + ], + [ + 1782425525, + null, + null, + null + ], + [ + 1782425526, + null, + null, + null + ], + [ + 1782425527, + null, + null, + null + ], + [ + 1782425528, + null, + null, + null + ], + [ + 1782425529, + null, + null, + null + ], + [ + 1782425530, + null, + null, + null + ], + [ + 1782425531, + null, + null, + null + ], + [ + 1782425532, + null, + null, + null + ], + [ + 1782425533, + null, + null, + null + ], + [ + 1782425534, + null, + null, + null + ], + [ + 1782425535, + null, + null, + null + ], + [ + 1782425536, + null, + null, + null + ], + [ + 1782425537, + null, + null, + null + ], + [ + 1782425538, + null, + null, + null + ], + [ + 1782425539, + null, + null, + null + ], + [ + 1782425540, + null, + null, + null + ], + [ + 1782425541, + null, + null, + null + ], + [ + 1782425542, + null, + null, + null + ], + [ + 1782425543, + null, + null, + null + ], + [ + 1782425544, + null, + null, + null + ], + [ + 1782425545, + null, + null, + null + ], + [ + 1782425546, + null, + null, + null + ], + [ + 1782425547, + null, + null, + null + ], + [ + 1782425548, + null, + null, + null + ], + [ + 1782425549, + null, + null, + null + ], + [ + 1782425550, + null, + null, + null + ], + [ + 1782425551, + null, + null, + null + ], + [ + 1782425552, + null, + null, + null + ], + [ + 1782425553, + null, + null, + null + ], + [ + 1782425554, + null, + null, + null + ], + [ + 1782425555, + null, + null, + null + ], + [ + 1782425556, + null, + null, + null + ], + [ + 1782425557, + null, + null, + null + ], + [ + 1782425558, + null, + null, + null + ], + [ + 1782425559, + null, + null, + null + ], + [ + 1782425560, + null, + null, + null + ], + [ + 1782425562, + null, + null, + null + ], + [ + 1782425563, + null, + null, + null + ], + [ + 1782425564, + null, + null, + null + ], + [ + 1782425565, + null, + null, + null + ], + [ + 1782425566, + null, + null, + null + ], + [ + 1782425567, + null, + null, + null + ], + [ + 1782425568, + null, + null, + null + ], + [ + 1782425569, + null, + null, + null + ], + [ + 1782425570, + null, + null, + null + ], + [ + 1782425571, + null, + null, + null + ], + [ + 1782425572, + null, + null, + null + ], + [ + 1782425573, + null, + null, + null + ], + [ + 1782425574, + null, + null, + null + ], + [ + 1782425575, + null, + null, + null + ], + [ + 1782425576, + null, + null, + null + ], + [ + 1782425577, + null, + null, + null + ], + [ + 1782425578, + null, + null, + null + ], + [ + 1782425579, + null, + null, + null + ], + [ + 1782425580, + null, + null, + null + ], + [ + 1782425581, + null, + null, + null + ], + [ + 1782425582, + null, + null, + null + ], + [ + 1782425583, + null, + null, + null + ], + [ + 1782425584, + null, + null, + null + ], + [ + 1782425585, + null, + null, + null + ], + [ + 1782425586, + null, + null, + null + ], + [ + 1782425587, + null, + null, + null + ], + [ + 1782425588, + null, + null, + null + ], + [ + 1782425589, + null, + null, + null + ], + [ + 1782425590, + null, + null, + null + ], + [ + 1782425591, + null, + null, + null + ], + [ + 1782425592, + null, + null, + null + ], + [ + 1782425593, + null, + null, + null + ], + [ + 1782425594, + null, + null, + null + ], + [ + 1782425595, + null, + null, + null + ], + [ + 1782425596, + null, + null, + null + ], + [ + 1782425597, + null, + null, + null + ], + [ + 1782425598, + null, + null, + null + ], + [ + 1782425599, + null, + null, + null + ], + [ + 1782425600, + null, + null, + null + ], + [ + 1782425601, + null, + null, + null + ], + [ + 1782425602, + null, + null, + null + ], + [ + 1782425603, + null, + null, + null + ], + [ + 1782425604, + null, + null, + null + ], + [ + 1782425605, + null, + null, + null + ], + [ + 1782425606, + null, + null, + null + ], + [ + 1782425607, + null, + null, + null + ], + [ + 1782425608, + null, + null, + null + ], + [ + 1782425609, + null, + null, + null + ], + [ + 1782425610, + null, + null, + null + ], + [ + 1782425611, + null, + null, + null + ], + [ + 1782425612, + null, + null, + null + ], + [ + 1782425613, + null, + null, + null + ], + [ + 1782425614, + null, + null, + null + ], + [ + 1782425615, + null, + null, + null + ], + [ + 1782425616, + null, + null, + null + ], + [ + 1782425617, + null, + null, + null + ], + [ + 1782425618, + null, + null, + null + ], + [ + 1782425619, + null, + null, + null + ], + [ + 1782425620, + null, + null, + null + ], + [ + 1782425621, + null, + null, + null + ], + [ + 1782425622, + null, + null, + null + ], + [ + 1782425623, + null, + null, + null + ], + [ + 1782425624, + null, + null, + null + ], + [ + 1782425625, + null, + null, + null + ], + [ + 1782425626, + null, + null, + null + ], + [ + 1782425628, + null, + null, + null + ], + [ + 1782425629, + null, + null, + null + ], + [ + 1782425630, + null, + null, + null + ], + [ + 1782425631, + null, + null, + null + ], + [ + 1782425632, + null, + null, + null + ], + [ + 1782425633, + null, + null, + null + ], + [ + 1782425634, + null, + null, + null + ], + [ + 1782425635, + null, + null, + null + ], + [ + 1782425636, + null, + null, + null + ], + [ + 1782425637, + null, + null, + null + ], + [ + 1782425638, + null, + null, + null + ], + [ + 1782425639, + null, + null, + null + ], + [ + 1782425640, + null, + null, + null + ], + [ + 1782425641, + null, + null, + null + ], + [ + 1782425642, + null, + null, + null + ], + [ + 1782425643, + null, + null, + null + ], + [ + 1782425644, + null, + null, + null + ], + [ + 1782425645, + null, + null, + null + ], + [ + 1782425646, + null, + null, + null + ], + [ + 1782425647, + null, + null, + null + ], + [ + 1782425648, + null, + null, + null + ], + [ + 1782425649, + null, + null, + null + ], + [ + 1782425650, + null, + null, + null + ], + [ + 1782425651, + null, + null, + null + ], + [ + 1782425652, + null, + null, + null + ], + [ + 1782425653, + null, + null, + null + ], + [ + 1782425654, + null, + null, + null + ], + [ + 1782425655, + null, + null, + null + ], + [ + 1782425656, + null, + null, + null + ], + [ + 1782425657, + null, + null, + null + ], + [ + 1782425658, + null, + null, + null + ], + [ + 1782425659, + null, + null, + null + ], + [ + 1782425660, + null, + null, + null + ], + [ + 1782425661, + null, + null, + null + ], + [ + 1782425662, + null, + null, + null + ], + [ + 1782425663, + null, + null, + null + ], + [ + 1782425664, + null, + null, + null + ], + [ + 1782425665, + null, + null, + null + ], + [ + 1782425666, + null, + null, + null + ], + [ + 1782425667, + null, + null, + null + ], + [ + 1782425668, + null, + null, + null + ], + [ + 1782425669, + null, + null, + null + ], + [ + 1782425670, + null, + null, + null + ], + [ + 1782425671, + null, + null, + null + ], + [ + 1782425672, + null, + null, + null + ], + [ + 1782425673, + null, + null, + null + ], + [ + 1782425674, + null, + null, + null + ], + [ + 1782425675, + null, + null, + null + ], + [ + 1782425676, + null, + null, + null + ], + [ + 1782425677, + null, + null, + null + ], + [ + 1782425678, + null, + null, + null + ], + [ + 1782425679, + null, + null, + null + ], + [ + 1782425680, + null, + null, + null + ], + [ + 1782425681, + null, + null, + null + ], + [ + 1782425682, + null, + null, + null + ], + [ + 1782425683, + null, + null, + null + ], + [ + 1782425684, + null, + null, + null + ], + [ + 1782425685, + null, + null, + null + ], + [ + 1782425686, + null, + null, + null + ], + [ + 1782425687, + null, + null, + null + ], + [ + 1782425688, + null, + null, + null + ], + [ + 1782425689, + null, + null, + null + ], + [ + 1782425690, + null, + null, + null + ], + [ + 1782425691, + null, + null, + null + ], + [ + 1782425692, + null, + null, + null + ], + [ + 1782425693, + null, + null, + null + ], + [ + 1782425694, + null, + null, + null + ], + [ + 1782425696, + null, + null, + null + ], + [ + 1782425697, + null, + null, + null + ], + [ + 1782425698, + null, + null, + null + ], + [ + 1782425699, + null, + null, + null + ], + [ + 1782425700, + null, + null, + null + ], + [ + 1782425701, + null, + null, + null + ], + [ + 1782425702, + null, + null, + null + ], + [ + 1782425703, + null, + null, + null + ], + [ + 1782425704, + null, + null, + null + ], + [ + 1782425705, + null, + null, + null + ], + [ + 1782425706, + null, + null, + null + ], + [ + 1782425707, + null, + null, + null + ], + [ + 1782425708, + null, + null, + null + ], + [ + 1782425709, + null, + null, + null + ], + [ + 1782425710, + null, + null, + null + ], + [ + 1782425711, + null, + null, + null + ], + [ + 1782425712, + null, + null, + null + ], + [ + 1782425713, + null, + null, + null + ], + [ + 1782425714, + null, + null, + null + ], + [ + 1782425715, + null, + null, + null + ], + [ + 1782425716, + null, + null, + null + ], + [ + 1782425717, + null, + null, + null + ], + [ + 1782425718, + null, + null, + null + ], + [ + 1782425719, + null, + null, + null + ], + [ + 1782425720, + null, + null, + null + ], + [ + 1782425721, + null, + null, + null + ], + [ + 1782425722, + null, + null, + null + ], + [ + 1782425723, + null, + null, + null + ], + [ + 1782425724, + null, + null, + null + ], + [ + 1782425725, + null, + null, + null + ], + [ + 1782425726, + null, + null, + null + ], + [ + 1782425727, + null, + null, + null + ], + [ + 1782425728, + null, + null, + null + ], + [ + 1782425729, + null, + null, + null + ], + [ + 1782425730, + null, + null, + null + ], + [ + 1782425731, + null, + null, + null + ], + [ + 1782425732, + null, + null, + null + ], + [ + 1782425733, + null, + null, + null + ], + [ + 1782425734, + null, + null, + null + ], + [ + 1782425735, + null, + null, + null + ], + [ + 1782425736, + null, + null, + null + ], + [ + 1782425737, + null, + null, + null + ], + [ + 1782425738, + null, + null, + null + ], + [ + 1782425739, + null, + null, + null + ], + [ + 1782425740, + null, + null, + null + ], + [ + 1782425741, + null, + null, + null + ], + [ + 1782425742, + null, + null, + null + ], + [ + 1782425743, + null, + null, + null + ], + [ + 1782425744, + null, + null, + null + ], + [ + 1782425745, + null, + null, + null + ], + [ + 1782425746, + null, + null, + null + ], + [ + 1782425747, + null, + null, + null + ], + [ + 1782425748, + null, + null, + null + ], + [ + 1782425749, + null, + null, + null + ], + [ + 1782425750, + null, + null, + null + ], + [ + 1782425751, + null, + null, + null + ], + [ + 1782425752, + null, + null, + null + ], + [ + 1782425753, + null, + null, + null + ], + [ + 1782425754, + null, + null, + null + ], + [ + 1782425755, + null, + null, + null + ], + [ + 1782425756, + null, + null, + null + ], + [ + 1782425757, + null, + null, + null + ], + [ + 1782425758, + null, + null, + null + ], + [ + 1782425759, + null, + null, + null + ], + [ + 1782425760, + null, + null, + null + ], + [ + 1782425761, + null, + null, + null + ], + [ + 1782425762, + null, + null, + null + ], + [ + 1782425763, + null, + null, + null + ], + [ + 1782425765, + null, + null, + null + ], + [ + 1782425766, + null, + null, + null + ], + [ + 1782425767, + null, + null, + null + ], + [ + 1782425768, + null, + null, + null + ], + [ + 1782425769, + null, + null, + null + ], + [ + 1782425770, + null, + null, + null + ], + [ + 1782425771, + null, + null, + null + ], + [ + 1782425772, + null, + null, + null + ], + [ + 1782425773, + null, + null, + null + ], + [ + 1782425774, + null, + null, + null + ], + [ + 1782425775, + null, + null, + null + ], + [ + 1782425776, + null, + null, + null + ], + [ + 1782425777, + null, + null, + null + ], + [ + 1782425778, + null, + null, + null + ], + [ + 1782425779, + null, + null, + null + ], + [ + 1782425780, + null, + null, + null + ], + [ + 1782425781, + null, + null, + null + ], + [ + 1782425782, + null, + null, + null + ], + [ + 1782425783, + null, + null, + null + ], + [ + 1782425784, + null, + null, + null + ], + [ + 1782425785, + null, + null, + null + ], + [ + 1782425786, + null, + null, + null + ], + [ + 1782425787, + null, + null, + null + ], + [ + 1782425788, + null, + null, + null + ], + [ + 1782425789, + null, + null, + null + ], + [ + 1782425790, + null, + null, + null + ], + [ + 1782425791, + null, + null, + null + ], + [ + 1782425792, + null, + null, + null + ], + [ + 1782425793, + null, + null, + null + ], + [ + 1782425794, + null, + null, + null + ], + [ + 1782425795, + null, + null, + null + ], + [ + 1782425796, + null, + null, + null + ], + [ + 1782425797, + null, + null, + null + ], + [ + 1782425798, + null, + null, + null + ], + [ + 1782425799, + null, + null, + null + ], + [ + 1782425800, + null, + null, + null + ], + [ + 1782425801, + null, + null, + null + ], + [ + 1782425802, + null, + null, + null + ], + [ + 1782425803, + null, + null, + null + ], + [ + 1782425804, + null, + null, + null + ], + [ + 1782425805, + null, + null, + null + ], + [ + 1782425806, + null, + null, + null + ], + [ + 1782425807, + null, + null, + null + ], + [ + 1782425808, + null, + null, + null + ], + [ + 1782425809, + null, + null, + null + ], + [ + 1782425810, + null, + null, + null + ], + [ + 1782425811, + null, + null, + null + ], + [ + 1782425812, + null, + null, + null + ], + [ + 1782425813, + null, + null, + null + ], + [ + 1782425814, + null, + null, + null + ], + [ + 1782425815, + null, + null, + null + ], + [ + 1782425816, + null, + null, + null + ], + [ + 1782425817, + null, + null, + null + ], + [ + 1782425818, + null, + null, + null + ], + [ + 1782425819, + null, + null, + null + ], + [ + 1782425820, + null, + null, + null + ], + [ + 1782425821, + null, + null, + null + ], + [ + 1782425822, + null, + null, + null + ], + [ + 1782425823, + null, + null, + null + ], + [ + 1782425824, + null, + null, + null + ], + [ + 1782425825, + null, + null, + null + ], + [ + 1782425826, + null, + null, + null + ], + [ + 1782425827, + null, + null, + null + ], + [ + 1782425828, + null, + null, + null + ], + [ + 1782425829, + null, + null, + null + ], + [ + 1782425830, + null, + null, + null + ], + [ + 1782425832, + null, + null, + null + ], + [ + 1782425833, + null, + null, + null + ], + [ + 1782425834, + null, + null, + null + ], + [ + 1782425835, + null, + null, + null + ], + [ + 1782425836, + null, + null, + null + ], + [ + 1782425837, + null, + null, + null + ], + [ + 1782425838, + null, + null, + null + ], + [ + 1782425839, + null, + null, + null + ], + [ + 1782425840, + null, + null, + null + ], + [ + 1782425841, + null, + null, + null + ], + [ + 1782425842, + null, + null, + null + ], + [ + 1782425843, + null, + null, + null + ], + [ + 1782425844, + null, + null, + null + ], + [ + 1782425845, + null, + null, + null + ], + [ + 1782425846, + null, + null, + null + ], + [ + 1782425847, + null, + null, + null + ], + [ + 1782425848, + null, + null, + null + ], + [ + 1782425849, + null, + null, + null + ], + [ + 1782425850, + null, + null, + null + ], + [ + 1782425851, + null, + null, + null + ], + [ + 1782425852, + null, + null, + null + ], + [ + 1782425853, + null, + null, + null + ], + [ + 1782425854, + null, + null, + null + ], + [ + 1782425855, + null, + null, + null + ], + [ + 1782425856, + null, + null, + null + ], + [ + 1782425857, + null, + null, + null + ], + [ + 1782425858, + null, + null, + null + ], + [ + 1782425859, + null, + null, + null + ], + [ + 1782425860, + null, + null, + null + ], + [ + 1782425861, + null, + null, + null + ], + [ + 1782425862, + null, + null, + null + ], + [ + 1782425863, + null, + null, + null + ], + [ + 1782425864, + null, + null, + null + ], + [ + 1782425865, + null, + null, + null + ], + [ + 1782425866, + null, + null, + null + ], + [ + 1782425867, + null, + null, + null + ], + [ + 1782425868, + null, + null, + null + ], + [ + 1782425869, + null, + null, + null + ], + [ + 1782425870, + null, + null, + null + ], + [ + 1782425871, + null, + null, + null + ], + [ + 1782425872, + null, + null, + null + ], + [ + 1782425873, + null, + null, + null + ], + [ + 1782425874, + null, + null, + null + ], + [ + 1782425875, + null, + null, + null + ], + [ + 1782425876, + null, + null, + null + ], + [ + 1782425877, + null, + null, + null + ], + [ + 1782425878, + null, + null, + null + ], + [ + 1782425879, + null, + null, + null + ], + [ + 1782425880, + null, + null, + null + ], + [ + 1782425881, + null, + null, + null + ], + [ + 1782425882, + null, + null, + null + ], + [ + 1782425883, + null, + null, + null + ], + [ + 1782425884, + null, + null, + null + ], + [ + 1782425885, + null, + null, + null + ], + [ + 1782425886, + null, + null, + null + ], + [ + 1782425887, + null, + null, + null + ], + [ + 1782425888, + null, + null, + null + ], + [ + 1782425889, + null, + null, + null + ], + [ + 1782425890, + null, + null, + null + ], + [ + 1782425891, + null, + null, + null + ], + [ + 1782425892, + null, + null, + null + ], + [ + 1782425893, + null, + null, + null + ], + [ + 1782425894, + null, + null, + null + ], + [ + 1782425895, + null, + null, + null + ], + [ + 1782425896, + null, + null, + null + ], + [ + 1782425897, + null, + null, + null + ], + [ + 1782425899, + null, + null, + null + ], + [ + 1782425900, + null, + null, + null + ], + [ + 1782425901, + null, + null, + null + ], + [ + 1782425902, + null, + null, + null + ], + [ + 1782425903, + null, + null, + null + ], + [ + 1782425904, + null, + null, + null + ], + [ + 1782425905, + null, + null, + null + ], + [ + 1782425906, + null, + null, + null + ], + [ + 1782425907, + null, + null, + null + ], + [ + 1782425908, + null, + null, + null + ], + [ + 1782425909, + null, + null, + null + ], + [ + 1782425910, + null, + null, + null + ], + [ + 1782425911, + null, + null, + null + ], + [ + 1782425912, + null, + null, + null + ], + [ + 1782425913, + null, + null, + null + ], + [ + 1782425914, + null, + null, + null + ], + [ + 1782425915, + null, + null, + null + ], + [ + 1782425916, + null, + null, + null + ], + [ + 1782425917, + null, + null, + null + ], + [ + 1782425918, + null, + null, + null + ], + [ + 1782425919, + null, + null, + null + ], + [ + 1782425920, + null, + null, + null + ], + [ + 1782425921, + null, + null, + null + ], + [ + 1782425922, + null, + null, + null + ], + [ + 1782425923, + null, + null, + null + ], + [ + 1782425924, + null, + null, + null + ], + [ + 1782425925, + null, + null, + null + ], + [ + 1782425926, + null, + null, + null + ], + [ + 1782425927, + null, + null, + null + ], + [ + 1782425928, + null, + null, + null + ], + [ + 1782425929, + null, + null, + null + ], + [ + 1782425930, + null, + null, + null + ], + [ + 1782425931, + null, + null, + null + ], + [ + 1782425932, + null, + null, + null + ], + [ + 1782425933, + null, + null, + null + ], + [ + 1782425934, + null, + null, + null + ], + [ + 1782425935, + null, + null, + null + ], + [ + 1782425936, + null, + null, + null + ], + [ + 1782425937, + null, + null, + null + ], + [ + 1782425938, + null, + null, + null + ], + [ + 1782425939, + null, + null, + null + ], + [ + 1782425940, + null, + null, + null + ], + [ + 1782425941, + null, + null, + null + ], + [ + 1782425942, + null, + null, + null + ], + [ + 1782425943, + null, + null, + null + ], + [ + 1782425944, + null, + null, + null + ], + [ + 1782425945, + null, + null, + null + ], + [ + 1782425946, + null, + null, + null + ], + [ + 1782425947, + null, + null, + null + ], + [ + 1782425948, + null, + null, + null + ], + [ + 1782425949, + null, + null, + null + ], + [ + 1782425950, + null, + null, + null + ], + [ + 1782425951, + null, + null, + null + ], + [ + 1782425952, + null, + null, + null + ], + [ + 1782425953, + null, + null, + null + ], + [ + 1782425954, + null, + null, + null + ], + [ + 1782425955, + null, + null, + null + ], + [ + 1782425956, + null, + null, + null + ], + [ + 1782425957, + null, + null, + null + ], + [ + 1782425958, + null, + null, + null + ], + [ + 1782425959, + null, + null, + null + ], + [ + 1782425960, + null, + null, + null + ], + [ + 1782425961, + null, + null, + null + ], + [ + 1782425962, + null, + null, + null + ], + [ + 1782425963, + null, + null, + null + ], + [ + 1782425964, + null, + null, + null + ], + [ + 1782425965, + null, + null, + null + ], + [ + 1782425967, + null, + null, + null + ], + [ + 1782425968, + null, + null, + null + ], + [ + 1782425969, + null, + null, + null + ], + [ + 1782425970, + null, + null, + null + ], + [ + 1782425971, + null, + null, + null + ], + [ + 1782425972, + null, + null, + null + ], + [ + 1782425973, + null, + null, + null + ], + [ + 1782425974, + null, + null, + null + ], + [ + 1782425975, + null, + null, + null + ], + [ + 1782425976, + null, + null, + null + ], + [ + 1782425977, + null, + null, + null + ], + [ + 1782425978, + null, + null, + null + ], + [ + 1782425979, + null, + null, + null + ], + [ + 1782425980, + null, + null, + null + ], + [ + 1782425981, + null, + null, + null + ], + [ + 1782425982, + null, + null, + null + ], + [ + 1782425983, + null, + null, + null + ], + [ + 1782425984, + null, + null, + null + ], + [ + 1782425985, + null, + null, + null + ], + [ + 1782425986, + null, + null, + null + ], + [ + 1782425987, + null, + null, + null + ], + [ + 1782425988, + null, + null, + null + ], + [ + 1782425989, + null, + null, + null + ], + [ + 1782425990, + null, + null, + null + ], + [ + 1782425991, + null, + null, + null + ], + [ + 1782425992, + null, + null, + null + ], + [ + 1782425993, + null, + null, + null + ], + [ + 1782425994, + null, + null, + null + ], + [ + 1782425995, + null, + null, + null + ], + [ + 1782425996, + null, + null, + null + ], + [ + 1782425997, + null, + null, + null + ], + [ + 1782425998, + null, + null, + null + ], + [ + 1782425999, + null, + null, + null + ], + [ + 1782426000, + null, + null, + null + ], + [ + 1782426001, + null, + null, + null + ], + [ + 1782426002, + null, + null, + null + ], + [ + 1782426003, + null, + null, + null + ], + [ + 1782426004, + null, + null, + null + ], + [ + 1782426005, + null, + null, + null + ], + [ + 1782426006, + null, + null, + null + ], + [ + 1782426007, + null, + null, + null + ], + [ + 1782426008, + null, + null, + null + ], + [ + 1782426009, + null, + null, + null + ], + [ + 1782426010, + null, + null, + null + ], + [ + 1782426011, + null, + null, + null + ], + [ + 1782426012, + null, + null, + null + ], + [ + 1782426013, + null, + null, + null + ], + [ + 1782426014, + null, + null, + null + ], + [ + 1782426015, + null, + null, + null + ], + [ + 1782426016, + null, + null, + null + ], + [ + 1782426017, + null, + null, + null + ], + [ + 1782426018, + null, + null, + null + ], + [ + 1782426019, + null, + null, + null + ], + [ + 1782426020, + null, + null, + null + ], + [ + 1782426021, + null, + null, + null + ], + [ + 1782426022, + null, + null, + null + ], + [ + 1782426023, + null, + null, + null + ], + [ + 1782426024, + null, + null, + null + ], + [ + 1782426025, + null, + null, + null + ], + [ + 1782426026, + null, + null, + null + ], + [ + 1782426027, + null, + null, + null + ], + [ + 1782426028, + null, + null, + null + ], + [ + 1782426029, + null, + null, + null + ], + [ + 1782426030, + null, + null, + null + ], + [ + 1782426031, + null, + null, + null + ], + [ + 1782426032, + null, + null, + null + ], + [ + 1782426033, + null, + null, + null + ], + [ + 1782426034, + null, + null, + null + ], + [ + 1782426035, + null, + null, + null + ], + [ + 1782426036, + null, + null, + null + ], + [ + 1782426037, + null, + null, + null + ], + [ + 1782426038, + null, + null, + null + ], + [ + 1782426039, + null, + null, + null + ], + [ + 1782426040, + null, + null, + null + ], + [ + 1782426041, + null, + null, + null + ], + [ + 1782426042, + null, + null, + null + ], + [ + 1782426043, + null, + null, + null + ], + [ + 1782426044, + null, + null, + null + ], + [ + 1782426045, + null, + null, + null + ], + [ + 1782426046, + null, + null, + null + ], + [ + 1782426047, + null, + null, + null + ], + [ + 1782426048, + null, + null, + null + ], + [ + 1782426049, + null, + null, + null + ], + [ + 1782426050, + null, + null, + null + ], + [ + 1782426051, + null, + null, + null + ], + [ + 1782426052, + null, + null, + null + ], + [ + 1782426053, + null, + null, + null + ], + [ + 1782426054, + null, + null, + null + ], + [ + 1782426055, + null, + null, + null + ], + [ + 1782426056, + null, + null, + null + ], + [ + 1782426057, + null, + null, + null + ], + [ + 1782426058, + null, + null, + null + ], + [ + 1782426059, + null, + null, + null + ], + [ + 1782426060, + null, + null, + null + ], + [ + 1782426061, + null, + null, + null + ], + [ + 1782426062, + null, + null, + null + ], + [ + 1782426063, + null, + null, + null + ], + [ + 1782426064, + null, + null, + null + ], + [ + 1782426065, + null, + null, + null + ], + [ + 1782426066, + null, + null, + null + ], + [ + 1782426068, + null, + null, + null + ], + [ + 1782426069, + null, + null, + null + ], + [ + 1782426070, + null, + null, + null + ], + [ + 1782426071, + null, + null, + null + ], + [ + 1782426072, + null, + null, + null + ], + [ + 1782426073, + null, + null, + null + ], + [ + 1782426074, + null, + null, + null + ], + [ + 1782426075, + null, + null, + null + ], + [ + 1782426076, + null, + null, + null + ], + [ + 1782426077, + null, + null, + null + ], + [ + 1782426078, + null, + null, + null + ], + [ + 1782426079, + null, + null, + null + ], + [ + 1782426080, + null, + null, + null + ], + [ + 1782426081, + null, + null, + null + ], + [ + 1782426082, + null, + null, + null + ], + [ + 1782426083, + null, + null, + null + ], + [ + 1782426084, + null, + null, + null + ], + [ + 1782426085, + null, + null, + null + ], + [ + 1782426086, + null, + null, + null + ], + [ + 1782426087, + null, + null, + null + ], + [ + 1782426088, + null, + null, + null + ], + [ + 1782426089, + null, + null, + null + ], + [ + 1782426090, + null, + null, + null + ], + [ + 1782426091, + null, + null, + null + ], + [ + 1782426092, + null, + null, + null + ], + [ + 1782426093, + null, + null, + null + ], + [ + 1782426094, + null, + null, + null + ], + [ + 1782426095, + null, + null, + null + ], + [ + 1782426096, + null, + null, + null + ], + [ + 1782426097, + null, + null, + null + ], + [ + 1782426098, + null, + null, + null + ], + [ + 1782426099, + null, + null, + null + ], + [ + 1782426100, + null, + null, + null + ], + [ + 1782426101, + null, + null, + null + ], + [ + 1782426102, + null, + null, + null + ], + [ + 1782426103, + null, + null, + null + ], + [ + 1782426104, + null, + null, + null + ], + [ + 1782426105, + null, + null, + null + ], + [ + 1782426106, + null, + null, + null + ], + [ + 1782426107, + null, + null, + null + ], + [ + 1782426108, + null, + null, + null + ], + [ + 1782426109, + null, + null, + null + ], + [ + 1782426110, + null, + null, + null + ], + [ + 1782426111, + null, + null, + null + ], + [ + 1782426112, + null, + null, + null + ], + [ + 1782426113, + null, + null, + null + ], + [ + 1782426114, + null, + null, + null + ], + [ + 1782426115, + null, + null, + null + ], + [ + 1782426116, + null, + null, + null + ], + [ + 1782426117, + null, + null, + null + ], + [ + 1782426118, + null, + null, + null + ], + [ + 1782426119, + null, + null, + null + ], + [ + 1782426120, + null, + null, + null + ], + [ + 1782426121, + null, + null, + null + ], + [ + 1782426122, + null, + null, + null + ], + [ + 1782426123, + null, + null, + null + ], + [ + 1782426124, + null, + null, + null + ], + [ + 1782426125, + null, + null, + null + ], + [ + 1782426126, + null, + null, + null + ], + [ + 1782426127, + null, + null, + null + ], + [ + 1782426128, + null, + null, + null + ], + [ + 1782426129, + null, + null, + null + ], + [ + 1782426130, + null, + null, + null + ], + [ + 1782426131, + null, + null, + null + ], + [ + 1782426132, + null, + null, + null + ], + [ + 1782426133, + null, + null, + null + ], + [ + 1782426134, + null, + null, + null + ], + [ + 1782426135, + null, + null, + null + ], + [ + 1782426136, + null, + null, + null + ], + [ + 1782426137, + null, + null, + null + ], + [ + 1782426138, + null, + null, + null + ], + [ + 1782426139, + null, + null, + null + ], + [ + 1782426140, + null, + null, + null + ], + [ + 1782426141, + null, + null, + null + ], + [ + 1782426142, + null, + null, + null + ], + [ + 1782426143, + null, + null, + null + ], + [ + 1782426144, + null, + null, + null + ], + [ + 1782426145, + null, + null, + null + ], + [ + 1782426146, + null, + null, + null + ], + [ + 1782426147, + null, + null, + null + ], + [ + 1782426148, + null, + null, + null + ], + [ + 1782426149, + null, + null, + null + ], + [ + 1782426150, + null, + null, + null + ], + [ + 1782426152, + null, + null, + null + ], + [ + 1782426153, + null, + null, + null + ], + [ + 1782426154, + null, + null, + null + ], + [ + 1782426155, + null, + null, + null + ], + [ + 1782426156, + null, + null, + null + ], + [ + 1782426157, + null, + null, + null + ], + [ + 1782426158, + null, + null, + null + ], + [ + 1782426159, + null, + null, + null + ], + [ + 1782426160, + null, + null, + null + ], + [ + 1782426161, + null, + null, + null + ], + [ + 1782426162, + null, + null, + null + ], + [ + 1782426163, + null, + null, + null + ], + [ + 1782426164, + null, + null, + null + ], + [ + 1782426165, + null, + null, + null + ], + [ + 1782426166, + null, + null, + null + ], + [ + 1782426167, + null, + null, + null + ], + [ + 1782426168, + null, + null, + null + ], + [ + 1782426169, + null, + null, + null + ], + [ + 1782426170, + null, + null, + null + ], + [ + 1782426171, + null, + null, + null + ], + [ + 1782426172, + null, + null, + null + ], + [ + 1782426173, + null, + null, + null + ], + [ + 1782426174, + null, + null, + null + ], + [ + 1782426175, + null, + null, + null + ], + [ + 1782426176, + null, + null, + null + ], + [ + 1782426177, + null, + null, + null + ], + [ + 1782426178, + null, + null, + null + ], + [ + 1782426179, + null, + null, + null + ], + [ + 1782426180, + null, + null, + null + ], + [ + 1782426181, + null, + null, + null + ], + [ + 1782426182, + null, + null, + null + ], + [ + 1782426183, + null, + null, + null + ], + [ + 1782426184, + null, + null, + null + ], + [ + 1782426185, + null, + null, + null + ], + [ + 1782426186, + null, + null, + null + ], + [ + 1782426187, + null, + null, + null + ], + [ + 1782426188, + null, + null, + null + ], + [ + 1782426189, + null, + null, + null + ], + [ + 1782426190, + null, + null, + null + ], + [ + 1782426191, + null, + null, + null + ], + [ + 1782426192, + null, + null, + null + ], + [ + 1782426193, + null, + null, + null + ], + [ + 1782426194, + null, + null, + null + ], + [ + 1782426195, + null, + null, + null + ], + [ + 1782426196, + null, + null, + null + ], + [ + 1782426197, + null, + null, + null + ], + [ + 1782426198, + null, + null, + null + ], + [ + 1782426199, + null, + null, + null + ], + [ + 1782426200, + null, + null, + null + ], + [ + 1782426201, + null, + null, + null + ], + [ + 1782426202, + null, + null, + null + ], + [ + 1782426203, + null, + null, + null + ], + [ + 1782426204, + null, + null, + null + ], + [ + 1782426205, + null, + null, + null + ], + [ + 1782426206, + null, + null, + null + ], + [ + 1782426207, + null, + null, + null + ], + [ + 1782426208, + null, + null, + null + ], + [ + 1782426209, + null, + null, + null + ], + [ + 1782426210, + null, + null, + null + ], + [ + 1782426211, + null, + null, + null + ], + [ + 1782426212, + null, + null, + null + ], + [ + 1782426213, + null, + null, + null + ], + [ + 1782426214, + null, + null, + null + ], + [ + 1782426215, + null, + null, + null + ], + [ + 1782426216, + null, + null, + null + ], + [ + 1782426217, + null, + null, + null + ], + [ + 1782426218, + null, + null, + null + ], + [ + 1782426219, + null, + null, + null + ], + [ + 1782426220, + null, + null, + null + ], + [ + 1782426221, + null, + null, + null + ], + [ + 1782426222, + null, + null, + null + ], + [ + 1782426223, + null, + null, + null + ], + [ + 1782426225, + null, + null, + null + ], + [ + 1782426226, + null, + null, + null + ], + [ + 1782426227, + null, + null, + null + ], + [ + 1782426228, + null, + null, + null + ], + [ + 1782426229, + null, + null, + null + ], + [ + 1782426230, + null, + null, + null + ], + [ + 1782426231, + null, + null, + null + ], + [ + 1782426232, + null, + null, + null + ], + [ + 1782426233, + null, + null, + null + ], + [ + 1782426234, + null, + null, + null + ], + [ + 1782426235, + null, + null, + null + ], + [ + 1782426236, + null, + null, + null + ], + [ + 1782426237, + null, + null, + null + ], + [ + 1782426238, + null, + null, + null + ], + [ + 1782426239, + null, + null, + null + ], + [ + 1782426240, + null, + null, + null + ], + [ + 1782426241, + null, + null, + null + ], + [ + 1782426242, + null, + null, + null + ], + [ + 1782426243, + null, + null, + null + ], + [ + 1782426244, + null, + null, + null + ], + [ + 1782426245, + null, + null, + null + ], + [ + 1782426246, + null, + null, + null + ], + [ + 1782426247, + null, + null, + null + ], + [ + 1782426248, + null, + null, + null + ], + [ + 1782426249, + null, + null, + null + ], + [ + 1782426250, + null, + null, + null + ], + [ + 1782426251, + null, + null, + null + ], + [ + 1782426252, + null, + null, + null + ], + [ + 1782426253, + null, + null, + null + ], + [ + 1782426254, + null, + null, + null + ], + [ + 1782426255, + null, + null, + null + ], + [ + 1782426256, + null, + null, + null + ], + [ + 1782426257, + null, + null, + null + ], + [ + 1782426258, + null, + null, + null + ], + [ + 1782426259, + null, + null, + null + ], + [ + 1782426260, + null, + null, + null + ], + [ + 1782426261, + null, + null, + null + ], + [ + 1782426262, + null, + null, + null + ], + [ + 1782426263, + null, + null, + null + ], + [ + 1782426264, + null, + null, + null + ], + [ + 1782426265, + null, + null, + null + ], + [ + 1782426266, + null, + null, + null + ], + [ + 1782426267, + null, + null, + null + ], + [ + 1782426268, + null, + null, + null + ], + [ + 1782426269, + null, + null, + null + ], + [ + 1782426270, + null, + null, + null + ], + [ + 1782426271, + null, + null, + null + ], + [ + 1782426272, + null, + null, + null + ], + [ + 1782426273, + null, + null, + null + ], + [ + 1782426274, + null, + null, + null + ], + [ + 1782426275, + null, + null, + null + ], + [ + 1782426276, + null, + null, + null + ], + [ + 1782426277, + null, + null, + null + ], + [ + 1782426278, + null, + null, + null + ], + [ + 1782426279, + null, + null, + null + ], + [ + 1782426280, + null, + null, + null + ], + [ + 1782426281, + null, + null, + null + ], + [ + 1782426282, + null, + null, + null + ], + [ + 1782426283, + null, + null, + null + ], + [ + 1782426284, + null, + null, + null + ], + [ + 1782426285, + null, + null, + null + ], + [ + 1782426286, + null, + null, + null + ], + [ + 1782426287, + null, + null, + null + ], + [ + 1782426288, + null, + null, + null + ], + [ + 1782426289, + null, + null, + null + ], + [ + 1782426290, + null, + null, + null + ], + [ + 1782426291, + null, + null, + null + ], + [ + 1782426292, + null, + null, + null + ], + [ + 1782426293, + null, + null, + null + ], + [ + 1782426294, + null, + null, + null + ], + [ + 1782426295, + null, + null, + null + ], + [ + 1782426296, + null, + null, + null + ], + [ + 1782426297, + null, + null, + null + ], + [ + 1782426298, + null, + null, + null + ], + [ + 1782426299, + null, + null, + null + ], + [ + 1782426300, + null, + null, + null + ], + [ + 1782426301, + null, + null, + null + ], + [ + 1782426302, + null, + null, + null + ], + [ + 1782426303, + null, + null, + null + ], + [ + 1782426304, + null, + null, + null + ], + [ + 1782426305, + null, + null, + null + ], + [ + 1782426306, + null, + null, + null + ], + [ + 1782426307, + null, + null, + null + ], + [ + 1782426308, + null, + null, + null + ], + [ + 1782426309, + null, + null, + null + ], + [ + 1782426310, + null, + null, + null + ], + [ + 1782426311, + null, + null, + null + ], + [ + 1782426312, + null, + null, + null + ], + [ + 1782426313, + null, + null, + null + ], + [ + 1782426314, + null, + null, + null + ], + [ + 1782426315, + null, + null, + null + ], + [ + 1782426316, + null, + null, + null + ], + [ + 1782426317, + null, + null, + null + ], + [ + 1782426318, + null, + null, + null + ], + [ + 1782426320, + null, + null, + null + ], + [ + 1782426321, + null, + null, + null + ], + [ + 1782426322, + null, + null, + null + ], + [ + 1782426323, + null, + null, + null + ], + [ + 1782426324, + null, + null, + null + ], + [ + 1782426325, + null, + null, + null + ], + [ + 1782426326, + null, + null, + null + ], + [ + 1782426327, + null, + null, + null + ], + [ + 1782426328, + null, + null, + null + ], + [ + 1782426329, + null, + null, + null + ], + [ + 1782426330, + null, + null, + null + ], + [ + 1782426331, + null, + null, + null + ], + [ + 1782426332, + null, + null, + null + ], + [ + 1782426333, + null, + null, + null + ], + [ + 1782426334, + null, + null, + null + ], + [ + 1782426335, + null, + null, + null + ], + [ + 1782426336, + null, + null, + null + ], + [ + 1782426337, + null, + null, + null + ], + [ + 1782426338, + null, + null, + null + ], + [ + 1782426339, + null, + null, + null + ], + [ + 1782426340, + null, + null, + null + ], + [ + 1782426341, + null, + null, + null + ], + [ + 1782426342, + null, + null, + null + ], + [ + 1782426343, + null, + null, + null + ], + [ + 1782426344, + null, + null, + null + ], + [ + 1782426345, + null, + null, + null + ], + [ + 1782426346, + null, + null, + null + ], + [ + 1782426347, + null, + null, + null + ], + [ + 1782426348, + null, + null, + null + ], + [ + 1782426349, + null, + null, + null + ], + [ + 1782426350, + null, + null, + null + ], + [ + 1782426351, + null, + null, + null + ], + [ + 1782426352, + null, + null, + null + ], + [ + 1782426353, + null, + null, + null + ], + [ + 1782426354, + null, + null, + null + ], + [ + 1782426355, + null, + null, + null + ], + [ + 1782426356, + null, + null, + null + ], + [ + 1782426357, + null, + null, + null + ], + [ + 1782426358, + null, + null, + null + ], + [ + 1782426359, + null, + null, + null + ], + [ + 1782426360, + null, + null, + null + ], + [ + 1782426361, + null, + null, + null + ], + [ + 1782426362, + null, + null, + null + ], + [ + 1782426363, + null, + null, + null + ], + [ + 1782426364, + null, + null, + null + ], + [ + 1782426365, + null, + null, + null + ], + [ + 1782426366, + null, + null, + null + ], + [ + 1782426367, + null, + null, + null + ], + [ + 1782426368, + null, + null, + null + ], + [ + 1782426369, + null, + null, + null + ], + [ + 1782426370, + null, + null, + null + ], + [ + 1782426371, + null, + null, + null + ], + [ + 1782426372, + null, + null, + null + ], + [ + 1782426373, + null, + null, + null + ], + [ + 1782426374, + null, + null, + null + ], + [ + 1782426375, + null, + null, + null + ], + [ + 1782426376, + null, + null, + null + ], + [ + 1782426377, + null, + null, + null + ], + [ + 1782426378, + null, + null, + null + ], + [ + 1782426379, + null, + null, + null + ], + [ + 1782426380, + null, + null, + null + ], + [ + 1782426381, + null, + null, + null + ], + [ + 1782426382, + null, + null, + null + ], + [ + 1782426383, + null, + null, + null + ], + [ + 1782426384, + null, + null, + null + ], + [ + 1782426385, + null, + null, + null + ], + [ + 1782426386, + null, + null, + null + ], + [ + 1782426387, + null, + null, + null + ], + [ + 1782426388, + null, + null, + null + ], + [ + 1782426389, + null, + null, + null + ], + [ + 1782426390, + null, + null, + null + ], + [ + 1782426391, + null, + null, + null + ], + [ + 1782426392, + null, + null, + null + ], + [ + 1782426393, + null, + null, + null + ], + [ + 1782426394, + null, + null, + null + ], + [ + 1782426395, + null, + null, + null + ], + [ + 1782426396, + null, + null, + null + ], + [ + 1782426397, + null, + null, + null + ], + [ + 1782426398, + null, + null, + null + ], + [ + 1782426399, + null, + null, + null + ], + [ + 1782426400, + null, + null, + null + ], + [ + 1782426401, + null, + null, + null + ], + [ + 1782426402, + null, + null, + null + ], + [ + 1782426403, + null, + null, + null + ], + [ + 1782426404, + null, + null, + null + ], + [ + 1782426405, + null, + null, + null + ], + [ + 1782426406, + null, + null, + null + ], + [ + 1782426407, + null, + null, + null + ], + [ + 1782426408, + null, + null, + null + ], + [ + 1782426409, + null, + null, + null + ], + [ + 1782426410, + null, + null, + null + ], + [ + 1782426411, + null, + null, + null + ], + [ + 1782426412, + null, + null, + null + ], + [ + 1782426413, + null, + null, + null + ], + [ + 1782426414, + null, + null, + null + ], + [ + 1782426415, + null, + null, + null + ], + [ + 1782426416, + null, + null, + null + ], + [ + 1782426417, + null, + null, + null + ], + [ + 1782426418, + null, + null, + null + ], + [ + 1782426419, + null, + null, + null + ], + [ + 1782426420, + null, + null, + null + ], + [ + 1782426421, + null, + null, + null + ], + [ + 1782426423, + null, + null, + null + ], + [ + 1782426424, + null, + null, + null + ], + [ + 1782426425, + null, + null, + null + ], + [ + 1782426426, + null, + null, + null + ], + [ + 1782426427, + null, + null, + null + ], + [ + 1782426428, + null, + null, + null + ], + [ + 1782426429, + null, + null, + null + ], + [ + 1782426430, + null, + null, + null + ], + [ + 1782426431, + null, + null, + null + ], + [ + 1782426432, + null, + null, + null + ], + [ + 1782426433, + null, + null, + null + ], + [ + 1782426434, + null, + null, + null + ], + [ + 1782426435, + null, + null, + null + ], + [ + 1782426436, + null, + null, + null + ], + [ + 1782426437, + null, + null, + null + ], + [ + 1782426438, + null, + null, + null + ], + [ + 1782426439, + null, + null, + null + ], + [ + 1782426440, + null, + null, + null + ], + [ + 1782426441, + null, + null, + null + ], + [ + 1782426442, + null, + null, + null + ], + [ + 1782426443, + null, + null, + null + ], + [ + 1782426444, + null, + null, + null + ], + [ + 1782426445, + null, + null, + null + ], + [ + 1782426446, + null, + null, + null + ], + [ + 1782426447, + null, + null, + null + ], + [ + 1782426448, + null, + null, + null + ], + [ + 1782426449, + null, + null, + null + ], + [ + 1782426450, + null, + null, + null + ], + [ + 1782426451, + null, + null, + null + ], + [ + 1782426452, + null, + null, + null + ], + [ + 1782426453, + null, + null, + null + ], + [ + 1782426454, + null, + null, + null + ], + [ + 1782426455, + null, + null, + null + ], + [ + 1782426456, + null, + null, + null + ], + [ + 1782426457, + null, + null, + null + ], + [ + 1782426458, + null, + null, + null + ], + [ + 1782426459, + null, + null, + null + ], + [ + 1782426460, + null, + null, + null + ], + [ + 1782426461, + null, + null, + null + ], + [ + 1782426462, + null, + null, + null + ], + [ + 1782426463, + null, + null, + null + ], + [ + 1782426464, + null, + null, + null + ], + [ + 1782426465, + null, + null, + null + ], + [ + 1782426466, + null, + null, + null + ], + [ + 1782426467, + null, + null, + null + ], + [ + 1782426468, + null, + null, + null + ], + [ + 1782426469, + null, + null, + null + ], + [ + 1782426470, + null, + null, + null + ], + [ + 1782426471, + null, + null, + null + ], + [ + 1782426472, + null, + null, + null + ], + [ + 1782426473, + null, + null, + null + ], + [ + 1782426474, + null, + null, + null + ], + [ + 1782426475, + null, + null, + null + ], + [ + 1782426476, + null, + null, + null + ], + [ + 1782426477, + null, + null, + null + ], + [ + 1782426478, + null, + null, + null + ], + [ + 1782426479, + null, + null, + null + ], + [ + 1782426480, + null, + null, + null + ], + [ + 1782426481, + null, + null, + null + ], + [ + 1782426482, + null, + null, + null + ], + [ + 1782426483, + null, + null, + null + ], + [ + 1782426484, + null, + null, + null + ], + [ + 1782426485, + null, + null, + null + ], + [ + 1782426486, + null, + null, + null + ], + [ + 1782426487, + null, + null, + null + ], + [ + 1782426488, + null, + null, + null + ], + [ + 1782426489, + null, + null, + null + ], + [ + 1782426490, + null, + null, + null + ], + [ + 1782426491, + null, + null, + null + ], + [ + 1782426492, + null, + null, + null + ], + [ + 1782426493, + null, + null, + null + ], + [ + 1782426494, + null, + null, + null + ], + [ + 1782426495, + null, + null, + null + ], + [ + 1782426496, + null, + null, + null + ], + [ + 1782426497, + null, + null, + null + ], + [ + 1782426498, + null, + null, + null + ], + [ + 1782426499, + null, + null, + null + ], + [ + 1782426500, + null, + null, + null + ], + [ + 1782426501, + null, + null, + null + ], + [ + 1782426502, + null, + null, + null + ], + [ + 1782426503, + null, + null, + null + ], + [ + 1782426504, + null, + null, + null + ], + [ + 1782426505, + null, + null, + null + ], + [ + 1782426506, + null, + null, + null + ], + [ + 1782426507, + null, + null, + null + ], + [ + 1782426508, + null, + null, + null + ], + [ + 1782426509, + null, + null, + null + ], + [ + 1782426510, + null, + null, + null + ], + [ + 1782426511, + null, + null, + null + ], + [ + 1782426512, + null, + null, + null + ], + [ + 1782426513, + null, + null, + null + ], + [ + 1782426514, + null, + null, + null + ], + [ + 1782426515, + null, + null, + null + ], + [ + 1782426516, + null, + null, + null + ], + [ + 1782426517, + null, + null, + null + ], + [ + 1782426518, + null, + null, + null + ], + [ + 1782426519, + null, + null, + null + ], + [ + 1782426520, + null, + null, + null + ], + [ + 1782426521, + null, + null, + null + ], + [ + 1782426523, + null, + null, + null + ], + [ + 1782426524, + null, + null, + null + ], + [ + 1782426525, + null, + null, + null + ], + [ + 1782426526, + null, + null, + null + ], + [ + 1782426527, + null, + null, + null + ], + [ + 1782426528, + null, + null, + null + ], + [ + 1782426529, + null, + null, + null + ], + [ + 1782426530, + null, + null, + null + ], + [ + 1782426531, + null, + null, + null + ], + [ + 1782426532, + null, + null, + null + ], + [ + 1782426533, + null, + null, + null + ], + [ + 1782426534, + null, + null, + null + ], + [ + 1782426535, + null, + null, + null + ], + [ + 1782426536, + null, + null, + null + ], + [ + 1782426537, + null, + null, + null + ], + [ + 1782426538, + null, + null, + null + ], + [ + 1782426539, + null, + null, + null + ], + [ + 1782426540, + null, + null, + null + ], + [ + 1782426541, + null, + null, + null + ], + [ + 1782426542, + null, + null, + null + ], + [ + 1782426543, + null, + null, + null + ], + [ + 1782426544, + null, + null, + null + ], + [ + 1782426545, + null, + null, + null + ], + [ + 1782426546, + null, + null, + null + ], + [ + 1782426547, + null, + null, + null + ], + [ + 1782426548, + null, + null, + null + ], + [ + 1782426549, + null, + null, + null + ], + [ + 1782426550, + null, + null, + null + ], + [ + 1782426551, + null, + null, + null + ], + [ + 1782426552, + null, + null, + null + ], + [ + 1782426553, + null, + null, + null + ], + [ + 1782426554, + null, + null, + null + ], + [ + 1782426555, + null, + null, + null + ], + [ + 1782426556, + null, + null, + null + ], + [ + 1782426557, + null, + null, + null + ], + [ + 1782426558, + null, + null, + null + ], + [ + 1782426559, + null, + null, + null + ], + [ + 1782426560, + null, + null, + null + ], + [ + 1782426561, + null, + null, + null + ], + [ + 1782426562, + null, + null, + null + ], + [ + 1782426563, + null, + null, + null + ], + [ + 1782426564, + null, + null, + null + ], + [ + 1782426565, + null, + null, + null + ], + [ + 1782426566, + null, + null, + null + ], + [ + 1782426567, + null, + null, + null + ], + [ + 1782426568, + null, + null, + null + ], + [ + 1782426569, + null, + null, + null + ], + [ + 1782426570, + null, + null, + null + ], + [ + 1782426571, + null, + null, + null + ], + [ + 1782426572, + null, + null, + null + ], + [ + 1782426573, + null, + null, + null + ], + [ + 1782426574, + null, + null, + null + ], + [ + 1782426575, + null, + null, + null + ], + [ + 1782426576, + null, + null, + null + ], + [ + 1782426577, + null, + null, + null + ], + [ + 1782426578, + null, + null, + null + ], + [ + 1782426579, + null, + null, + null + ], + [ + 1782426580, + null, + null, + null + ], + [ + 1782426581, + null, + null, + null + ], + [ + 1782426582, + null, + null, + null + ], + [ + 1782426583, + null, + null, + null + ], + [ + 1782426584, + null, + null, + null + ], + [ + 1782426585, + null, + null, + null + ], + [ + 1782426586, + null, + null, + null + ], + [ + 1782426587, + null, + null, + null + ], + [ + 1782426588, + null, + null, + null + ], + [ + 1782426589, + null, + null, + null + ], + [ + 1782426590, + null, + null, + null + ], + [ + 1782426591, + null, + null, + null + ], + [ + 1782426593, + null, + null, + null + ], + [ + 1782426594, + null, + null, + null + ], + [ + 1782426595, + null, + null, + null + ], + [ + 1782426596, + null, + null, + null + ], + [ + 1782426597, + null, + null, + null + ], + [ + 1782426598, + null, + null, + null + ], + [ + 1782426599, + null, + null, + null + ], + [ + 1782426600, + null, + null, + null + ], + [ + 1782426601, + null, + null, + null + ], + [ + 1782426602, + null, + null, + null + ], + [ + 1782426603, + null, + null, + null + ], + [ + 1782426604, + null, + null, + null + ], + [ + 1782426605, + null, + null, + null + ], + [ + 1782426606, + null, + null, + null + ], + [ + 1782426607, + null, + null, + null + ], + [ + 1782426608, + null, + null, + null + ], + [ + 1782426609, + null, + null, + null + ], + [ + 1782426610, + null, + null, + null + ], + [ + 1782426611, + null, + null, + null + ], + [ + 1782426612, + null, + null, + null + ], + [ + 1782426613, + null, + null, + null + ], + [ + 1782426614, + null, + null, + null + ], + [ + 1782426615, + null, + null, + null + ], + [ + 1782426616, + null, + null, + null + ], + [ + 1782426617, + null, + null, + null + ], + [ + 1782426618, + null, + null, + null + ], + [ + 1782426619, + null, + null, + null + ], + [ + 1782426620, + null, + null, + null + ], + [ + 1782426621, + null, + null, + null + ], + [ + 1782426622, + null, + null, + null + ], + [ + 1782426623, + null, + null, + null + ], + [ + 1782426624, + null, + null, + null + ], + [ + 1782426625, + null, + null, + null + ], + [ + 1782426626, + null, + null, + null + ], + [ + 1782426627, + null, + null, + null + ], + [ + 1782426628, + null, + null, + null + ], + [ + 1782426629, + null, + null, + null + ], + [ + 1782426630, + null, + null, + null + ], + [ + 1782426631, + null, + null, + null + ], + [ + 1782426632, + null, + null, + null + ], + [ + 1782426633, + null, + null, + null + ], + [ + 1782426634, + null, + null, + null + ], + [ + 1782426635, + null, + null, + null + ], + [ + 1782426636, + null, + null, + null + ], + [ + 1782426637, + null, + null, + null + ], + [ + 1782426638, + null, + null, + null + ], + [ + 1782426639, + null, + null, + null + ], + [ + 1782426640, + null, + null, + null + ], + [ + 1782426641, + null, + null, + null + ], + [ + 1782426642, + null, + null, + null + ], + [ + 1782426643, + null, + null, + null + ], + [ + 1782426644, + null, + null, + null + ], + [ + 1782426645, + null, + null, + null + ], + [ + 1782426646, + null, + null, + null + ], + [ + 1782426647, + null, + null, + null + ], + [ + 1782426648, + null, + null, + null + ], + [ + 1782426649, + null, + null, + null + ], + [ + 1782426650, + null, + null, + null + ], + [ + 1782426651, + null, + null, + null + ], + [ + 1782426652, + null, + null, + null + ], + [ + 1782426653, + null, + null, + null + ], + [ + 1782426654, + null, + null, + null + ], + [ + 1782426655, + null, + null, + null + ], + [ + 1782426656, + null, + null, + null + ], + [ + 1782426657, + null, + null, + null + ], + [ + 1782426658, + null, + null, + null + ], + [ + 1782426660, + null, + null, + null + ], + [ + 1782426661, + null, + null, + null + ], + [ + 1782426662, + null, + null, + null + ], + [ + 1782426663, + null, + null, + null + ], + [ + 1782426664, + null, + null, + null + ], + [ + 1782426665, + null, + null, + null + ], + [ + 1782426666, + null, + null, + null + ], + [ + 1782426667, + null, + null, + null + ], + [ + 1782426668, + null, + null, + null + ], + [ + 1782426669, + null, + null, + null + ], + [ + 1782426670, + null, + null, + null + ], + [ + 1782426671, + null, + null, + null + ], + [ + 1782426672, + null, + null, + null + ], + [ + 1782426673, + null, + null, + null + ], + [ + 1782426674, + null, + null, + null + ], + [ + 1782426675, + null, + null, + null + ], + [ + 1782426676, + null, + null, + null + ], + [ + 1782426677, + null, + null, + null + ], + [ + 1782426678, + null, + null, + null + ], + [ + 1782426679, + null, + null, + null + ], + [ + 1782426680, + null, + null, + null + ], + [ + 1782426681, + null, + null, + null + ], + [ + 1782426682, + null, + null, + null + ], + [ + 1782426683, + null, + null, + null + ], + [ + 1782426684, + null, + null, + null + ], + [ + 1782426685, + null, + null, + null + ], + [ + 1782426686, + null, + null, + null + ], + [ + 1782426687, + null, + null, + null + ], + [ + 1782426688, + null, + null, + null + ], + [ + 1782426689, + null, + null, + null + ], + [ + 1782426690, + null, + null, + null + ], + [ + 1782426691, + null, + null, + null + ], + [ + 1782426692, + null, + null, + null + ], + [ + 1782426693, + null, + null, + null + ], + [ + 1782426694, + null, + null, + null + ], + [ + 1782426695, + null, + null, + null + ], + [ + 1782426696, + null, + null, + null + ], + [ + 1782426697, + null, + null, + null + ], + [ + 1782426698, + null, + null, + null + ], + [ + 1782426699, + null, + null, + null + ], + [ + 1782426700, + null, + null, + null + ], + [ + 1782426701, + null, + null, + null + ], + [ + 1782426702, + null, + null, + null + ], + [ + 1782426703, + null, + null, + null + ], + [ + 1782426704, + null, + null, + null + ], + [ + 1782426705, + null, + null, + null + ], + [ + 1782426706, + null, + null, + null + ], + [ + 1782426707, + null, + null, + null + ], + [ + 1782426708, + null, + null, + null + ], + [ + 1782426709, + null, + null, + null + ], + [ + 1782426710, + null, + null, + null + ], + [ + 1782426711, + null, + null, + null + ], + [ + 1782426712, + null, + null, + null + ], + [ + 1782426713, + null, + null, + null + ], + [ + 1782426714, + null, + null, + null + ], + [ + 1782426715, + null, + null, + null + ], + [ + 1782426716, + null, + null, + null + ], + [ + 1782426717, + null, + null, + null + ], + [ + 1782426718, + null, + null, + null + ], + [ + 1782426719, + null, + null, + null + ], + [ + 1782426720, + null, + null, + null + ], + [ + 1782426721, + null, + null, + null + ], + [ + 1782426722, + null, + null, + null + ], + [ + 1782426723, + null, + null, + null + ], + [ + 1782426724, + null, + null, + null + ], + [ + 1782426725, + null, + null, + null + ], + [ + 1782426726, + null, + null, + null + ], + [ + 1782426728, + null, + null, + null + ], + [ + 1782426729, + null, + null, + null + ], + [ + 1782426730, + null, + null, + null + ], + [ + 1782426731, + null, + null, + null + ], + [ + 1782426732, + null, + null, + null + ], + [ + 1782426733, + null, + null, + null + ], + [ + 1782426734, + null, + null, + null + ], + [ + 1782426735, + null, + null, + null + ], + [ + 1782426736, + null, + null, + null + ], + [ + 1782426737, + null, + null, + null + ], + [ + 1782426738, + null, + null, + null + ], + [ + 1782426739, + null, + null, + null + ], + [ + 1782426740, + null, + null, + null + ], + [ + 1782426741, + null, + null, + null + ], + [ + 1782426742, + null, + null, + null + ], + [ + 1782426743, + null, + null, + null + ], + [ + 1782426744, + null, + null, + null + ], + [ + 1782426745, + null, + null, + null + ], + [ + 1782426746, + null, + null, + null + ], + [ + 1782426747, + null, + null, + null + ], + [ + 1782426748, + null, + null, + null + ], + [ + 1782426749, + null, + null, + null + ], + [ + 1782426750, + null, + null, + null + ], + [ + 1782426751, + null, + null, + null + ], + [ + 1782426752, + null, + null, + null + ], + [ + 1782426753, + null, + null, + null + ], + [ + 1782426754, + null, + null, + null + ], + [ + 1782426755, + null, + null, + null + ], + [ + 1782426756, + null, + null, + null + ], + [ + 1782426757, + null, + null, + null + ], + [ + 1782426758, + null, + null, + null + ], + [ + 1782426759, + null, + null, + null + ], + [ + 1782426760, + null, + null, + null + ], + [ + 1782426761, + null, + null, + null + ], + [ + 1782426762, + null, + null, + null + ], + [ + 1782426763, + null, + null, + null + ], + [ + 1782426764, + null, + null, + null + ], + [ + 1782426765, + null, + null, + null + ], + [ + 1782426766, + null, + null, + null + ], + [ + 1782426767, + null, + null, + null + ], + [ + 1782426768, + null, + null, + null + ], + [ + 1782426769, + null, + null, + null + ], + [ + 1782426770, + null, + null, + null + ], + [ + 1782426771, + null, + null, + null + ], + [ + 1782426772, + null, + null, + null + ], + [ + 1782426773, + null, + null, + null + ], + [ + 1782426774, + null, + null, + null + ], + [ + 1782426775, + null, + null, + null + ], + [ + 1782426776, + null, + null, + null + ], + [ + 1782426777, + null, + null, + null + ], + [ + 1782426778, + null, + null, + null + ], + [ + 1782426779, + null, + null, + null + ], + [ + 1782426780, + null, + null, + null + ], + [ + 1782426782, + null, + null, + null + ], + [ + 1782426783, + null, + null, + null + ], + [ + 1782426784, + null, + null, + null + ], + [ + 1782426785, + null, + null, + null + ], + [ + 1782426786, + null, + null, + null + ], + [ + 1782426787, + null, + null, + null + ], + [ + 1782426788, + null, + null, + null + ], + [ + 1782426789, + null, + null, + null + ], + [ + 1782426790, + null, + null, + null + ], + [ + 1782426791, + null, + null, + null + ], + [ + 1782426792, + null, + null, + null + ], + [ + 1782426793, + null, + null, + null + ], + [ + 1782426794, + null, + null, + null + ], + [ + 1782426795, + null, + null, + null + ], + [ + 1782426796, + null, + null, + null + ], + [ + 1782426797, + null, + null, + null + ], + [ + 1782426798, + null, + null, + null + ], + [ + 1782426799, + null, + null, + null + ], + [ + 1782426800, + null, + null, + null + ], + [ + 1782426801, + null, + null, + null + ], + [ + 1782426802, + null, + null, + null + ], + [ + 1782426803, + null, + null, + null + ], + [ + 1782426804, + null, + null, + null + ], + [ + 1782426805, + null, + null, + null + ], + [ + 1782426806, + null, + null, + null + ], + [ + 1782426807, + null, + null, + null + ], + [ + 1782426808, + null, + null, + null + ], + [ + 1782426809, + null, + null, + null + ], + [ + 1782426810, + null, + null, + null + ], + [ + 1782426811, + null, + null, + null + ], + [ + 1782426812, + null, + null, + null + ], + [ + 1782426813, + null, + null, + null + ], + [ + 1782426814, + null, + null, + null + ], + [ + 1782426815, + null, + null, + null + ], + [ + 1782426816, + null, + null, + null + ], + [ + 1782426817, + null, + null, + null + ], + [ + 1782426818, + null, + null, + null + ], + [ + 1782426819, + null, + null, + null + ], + [ + 1782426820, + null, + null, + null + ], + [ + 1782426821, + null, + null, + null + ], + [ + 1782426822, + null, + null, + null + ], + [ + 1782426823, + null, + null, + null + ], + [ + 1782426824, + null, + null, + null + ], + [ + 1782426825, + null, + null, + null + ], + [ + 1782426826, + null, + null, + null + ], + [ + 1782426827, + null, + null, + null + ], + [ + 1782426828, + null, + null, + null + ], + [ + 1782426829, + null, + null, + null + ], + [ + 1782426830, + null, + null, + null + ], + [ + 1782426831, + null, + null, + null + ], + [ + 1782426832, + null, + null, + null + ], + [ + 1782426833, + null, + null, + null + ], + [ + 1782426834, + null, + null, + null + ], + [ + 1782426835, + null, + null, + null + ], + [ + 1782426836, + null, + null, + null + ], + [ + 1782426837, + null, + null, + null + ], + [ + 1782426838, + null, + null, + null + ], + [ + 1782426839, + null, + null, + null + ], + [ + 1782426840, + null, + null, + null + ], + [ + 1782426841, + null, + null, + null + ], + [ + 1782426842, + null, + null, + null + ], + [ + 1782426843, + null, + null, + null + ], + [ + 1782426844, + null, + null, + null + ], + [ + 1782426845, + null, + null, + null + ], + [ + 1782426847, + null, + null, + null + ], + [ + 1782426848, + null, + null, + null + ], + [ + 1782426849, + null, + null, + null + ], + [ + 1782426850, + null, + null, + null + ], + [ + 1782426851, + null, + null, + null + ], + [ + 1782426852, + null, + null, + null + ], + [ + 1782426853, + null, + null, + null + ], + [ + 1782426854, + null, + null, + null + ], + [ + 1782426855, + null, + null, + null + ], + [ + 1782426856, + null, + null, + null + ], + [ + 1782426857, + null, + null, + null + ], + [ + 1782426858, + null, + null, + null + ], + [ + 1782426859, + null, + null, + null + ], + [ + 1782426860, + null, + null, + null + ], + [ + 1782426861, + null, + null, + null + ], + [ + 1782426862, + null, + null, + null + ], + [ + 1782426863, + null, + null, + null + ], + [ + 1782426864, + null, + null, + null + ], + [ + 1782426865, + null, + null, + null + ], + [ + 1782426866, + null, + null, + null + ], + [ + 1782426867, + null, + null, + null + ], + [ + 1782426868, + null, + null, + null + ], + [ + 1782426869, + null, + null, + null + ], + [ + 1782426870, + null, + null, + null + ], + [ + 1782426871, + null, + null, + null + ], + [ + 1782426872, + null, + null, + null + ], + [ + 1782426873, + null, + null, + null + ], + [ + 1782426874, + null, + null, + null + ], + [ + 1782426875, + null, + null, + null + ], + [ + 1782426876, + null, + null, + null + ], + [ + 1782426877, + null, + null, + null + ], + [ + 1782426878, + null, + null, + null + ], + [ + 1782426879, + null, + null, + null + ], + [ + 1782426880, + null, + null, + null + ], + [ + 1782426881, + null, + null, + null + ], + [ + 1782426882, + null, + null, + null + ], + [ + 1782426883, + null, + null, + null + ], + [ + 1782426884, + null, + null, + null + ], + [ + 1782426885, + null, + null, + null + ], + [ + 1782426886, + null, + null, + null + ], + [ + 1782426887, + null, + null, + null + ], + [ + 1782426888, + null, + null, + null + ], + [ + 1782426889, + null, + null, + null + ], + [ + 1782426890, + null, + null, + null + ], + [ + 1782426891, + null, + null, + null + ], + [ + 1782426892, + null, + null, + null + ], + [ + 1782426893, + null, + null, + null + ], + [ + 1782426894, + null, + null, + null + ], + [ + 1782426895, + null, + null, + null + ], + [ + 1782426896, + null, + null, + null + ], + [ + 1782426897, + null, + null, + null + ], + [ + 1782426898, + null, + null, + null + ], + [ + 1782426899, + null, + null, + null + ], + [ + 1782426900, + null, + null, + null + ], + [ + 1782426901, + null, + null, + null + ], + [ + 1782426902, + null, + null, + null + ], + [ + 1782426903, + null, + null, + null + ], + [ + 1782426904, + null, + null, + null + ], + [ + 1782426905, + null, + null, + null + ], + [ + 1782426906, + null, + null, + null + ], + [ + 1782426907, + null, + null, + null + ], + [ + 1782426908, + null, + null, + null + ], + [ + 1782426909, + null, + null, + null + ], + [ + 1782426910, + null, + null, + null + ], + [ + 1782426911, + null, + null, + null + ], + [ + 1782426912, + null, + null, + null + ], + [ + 1782426914, + null, + null, + null + ], + [ + 1782426915, + null, + null, + null + ], + [ + 1782426916, + null, + null, + null + ], + [ + 1782426917, + null, + null, + null + ], + [ + 1782426918, + null, + null, + null + ], + [ + 1782426919, + null, + null, + null + ], + [ + 1782426920, + null, + null, + null + ], + [ + 1782426921, + null, + null, + null + ], + [ + 1782426922, + null, + null, + null + ], + [ + 1782426923, + null, + null, + null + ], + [ + 1782426924, + null, + null, + null + ], + [ + 1782426925, + null, + null, + null + ], + [ + 1782426926, + null, + null, + null + ], + [ + 1782426927, + null, + null, + null + ], + [ + 1782426928, + null, + null, + null + ], + [ + 1782426929, + null, + null, + null + ], + [ + 1782426930, + null, + null, + null + ], + [ + 1782426931, + null, + null, + null + ], + [ + 1782426932, + null, + null, + null + ], + [ + 1782426933, + null, + null, + null + ], + [ + 1782426934, + null, + null, + null + ], + [ + 1782426935, + null, + null, + null + ], + [ + 1782426936, + null, + null, + null + ], + [ + 1782426937, + null, + null, + null + ], + [ + 1782426938, + null, + null, + null + ], + [ + 1782426939, + null, + null, + null + ], + [ + 1782426940, + null, + null, + null + ], + [ + 1782426941, + null, + null, + null + ], + [ + 1782426942, + null, + null, + null + ], + [ + 1782426943, + null, + null, + null + ], + [ + 1782426944, + null, + null, + null + ], + [ + 1782426945, + null, + null, + null + ], + [ + 1782426946, + null, + null, + null + ], + [ + 1782426947, + null, + null, + null + ], + [ + 1782426948, + null, + null, + null + ], + [ + 1782426949, + null, + null, + null + ], + [ + 1782426950, + null, + null, + null + ], + [ + 1782426951, + null, + null, + null + ], + [ + 1782426952, + null, + null, + null + ], + [ + 1782426953, + null, + null, + null + ], + [ + 1782426954, + null, + null, + null + ], + [ + 1782426955, + null, + null, + null + ], + [ + 1782426956, + null, + null, + null + ], + [ + 1782426957, + null, + null, + null + ], + [ + 1782426958, + null, + null, + null + ], + [ + 1782426959, + null, + null, + null + ], + [ + 1782426960, + null, + null, + null + ], + [ + 1782426961, + null, + null, + null + ], + [ + 1782426962, + null, + null, + null + ], + [ + 1782426963, + null, + null, + null + ], + [ + 1782426964, + null, + null, + null + ], + [ + 1782426965, + null, + null, + null + ], + [ + 1782426966, + null, + null, + null + ], + [ + 1782426967, + null, + null, + null + ], + [ + 1782426968, + null, + null, + null + ], + [ + 1782426969, + null, + null, + null + ], + [ + 1782426970, + null, + null, + null + ], + [ + 1782426971, + null, + null, + null + ], + [ + 1782426972, + null, + null, + null + ], + [ + 1782426973, + null, + null, + null + ], + [ + 1782426974, + null, + null, + null + ], + [ + 1782426975, + null, + null, + null + ], + [ + 1782426976, + null, + null, + null + ], + [ + 1782426977, + null, + null, + null + ], + [ + 1782426979, + null, + null, + null + ], + [ + 1782426980, + null, + null, + null + ], + [ + 1782426981, + null, + null, + null + ], + [ + 1782426982, + null, + null, + null + ], + [ + 1782426983, + null, + null, + null + ], + [ + 1782426984, + null, + null, + null + ], + [ + 1782426985, + null, + null, + null + ], + [ + 1782426986, + null, + null, + null + ], + [ + 1782426987, + null, + null, + null + ], + [ + 1782426988, + null, + null, + null + ], + [ + 1782426989, + null, + null, + null + ], + [ + 1782426990, + null, + null, + null + ], + [ + 1782426991, + null, + null, + null + ], + [ + 1782426992, + null, + null, + null + ], + [ + 1782426993, + null, + null, + null + ], + [ + 1782426994, + null, + null, + null + ], + [ + 1782426995, + null, + null, + null + ], + [ + 1782426996, + null, + null, + null + ], + [ + 1782426997, + null, + null, + null + ], + [ + 1782426998, + null, + null, + null + ], + [ + 1782426999, + null, + null, + null + ], + [ + 1782427000, + null, + null, + null + ], + [ + 1782427001, + null, + null, + null + ], + [ + 1782427002, + null, + null, + null + ], + [ + 1782427003, + null, + null, + null + ], + [ + 1782427004, + null, + null, + null + ], + [ + 1782427005, + null, + null, + null + ], + [ + 1782427006, + null, + null, + null + ], + [ + 1782427007, + null, + null, + null + ], + [ + 1782427008, + null, + null, + null + ], + [ + 1782427009, + null, + null, + null + ], + [ + 1782427010, + null, + null, + null + ], + [ + 1782427011, + null, + null, + null + ], + [ + 1782427012, + null, + null, + null + ], + [ + 1782427013, + null, + null, + null + ], + [ + 1782427014, + null, + null, + null + ], + [ + 1782427015, + null, + null, + null + ], + [ + 1782427016, + null, + null, + null + ], + [ + 1782427017, + null, + null, + null + ], + [ + 1782427018, + null, + null, + null + ], + [ + 1782427019, + null, + null, + null + ], + [ + 1782427020, + null, + null, + null + ], + [ + 1782427021, + null, + null, + null + ], + [ + 1782427022, + null, + null, + null + ], + [ + 1782427023, + null, + null, + null + ], + [ + 1782427024, + null, + null, + null + ], + [ + 1782427025, + null, + null, + null + ], + [ + 1782427026, + null, + null, + null + ], + [ + 1782427027, + null, + null, + null + ] + ], + "temp_c": null, + "arm_clock_hz": null, + "throttling_detected": false + }, + "warnings": [ + "governor is 'unavailable', not 'performance' (need root on Linux, or unsupported on macOS)", + "core pinning unavailable (no taskset/numactl) \u2014 results will be noisier", + "NOT RPi5-baseline-grade: host is not a Raspberry Pi (model='', os=macos); CPU governor is 'unavailable', not 'performance'; benchmark was not pinned to a dedicated core (no taskset); build flags targeted 'apple-m3', not cortex-a76" + ], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1075, + "timed_iters": 5374, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 46521.02, + "samples": 26870, + "median": 45000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 44000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 1007000.0, + "mean": 45261.63, + "stddev": 11022.5, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1157, + "timed_iters": 5784, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43224.83, + "samples": 28920, + "median": 43000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 43000.0, + "q3": 43000.0, + "min": 42000.0, + "max": 685000.0, + "mean": 43489.07, + "stddev": 7839.77, + "ops_per_sec": 23255.81, + "per_rep_median": [ + 43000.0, + 43000.0, + 43000.0, + 43000.0, + 43000.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5189, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9636.14, + "samples": 100000, + "median": 10000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 9000.0, + "q3": 10000.0, + "min": 9000.0, + "max": 387000.0, + "mean": 9625.33, + "stddev": 1779.86, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0, + 10000.0, + 10000.0, + 10000.0, + 10000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4661, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10727.72, + "samples": 100000, + "median": 11000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 10000.0, + "q3": 11000.0, + "min": 10000.0, + "max": 92000.0, + "mean": 10788.22, + "stddev": 988.61, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 3976, + "timed_iters": 19882, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12574.36, + "samples": 99410, + "median": 13000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 12000.0, + "max": 608000.0, + "mean": 12646.51, + "stddev": 2696.01, + "ops_per_sec": 76923.08, + "per_rep_median": [ + 13000.0, + 13000.0, + 13000.0, + 13000.0, + 13000.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3106, + "timed_iters": 15531, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16097.22, + "samples": 77655, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 15000.0, + "max": 128000.0, + "mean": 16081.42, + "stddev": 1273.26, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2868, + "timed_iters": 14341, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17432.34, + "samples": 71705, + "median": 17000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 17000.0, + "q3": 17000.0, + "min": 16000.0, + "max": 106000.0, + "mean": 17042.34, + "stddev": 1374.89, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 17000.0, + 17000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2543, + "timed_iters": 12716, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19660.97, + "samples": 63580, + "median": 20000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 19000.0, + "q3": 20000.0, + "min": 19000.0, + "max": 2659000.0, + "mean": 20179.6, + "stddev": 20041.25, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 20000.0, + 20000.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2001, + "timed_iters": 10007, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24981.92, + "samples": 50035, + "median": 24000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 23000.0, + "q3": 24000.0, + "min": 23000.0, + "max": 41574000.0, + "mean": 28119.14, + "stddev": 251531.54, + "ops_per_sec": 41666.67, + "per_rep_median": [ + 25000.0, + 24000.0, + 24000.0, + 24000.0, + 24000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1939, + "timed_iters": 9697, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25780.65, + "samples": 48485, + "median": 26000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 25000.0, + "q3": 26000.0, + "min": 25000.0, + "max": 145000.0, + "mean": 25801.65, + "stddev": 1264.28, + "ops_per_sec": 38461.54, + "per_rep_median": [ + 26000.0, + 26000.0, + 26000.0, + 26000.0, + 26000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1664, + "timed_iters": 8319, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30052.79, + "samples": 41595, + "median": 30000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 30000.0, + "q3": 30000.0, + "min": 29000.0, + "max": 542000.0, + "mean": 30205.46, + "stddev": 3876.22, + "ops_per_sec": 33333.33, + "per_rep_median": [ + 30000.0, + 30000.0, + 30000.0, + 30000.0, + 30000.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100925000.0, + "samples": 150, + "median": 178485000.0, + "mad": 77284500.0, + "iqr": 231150500.0, + "q1": 101414500.0, + "q3": 332565000.0, + "min": 100654000.0, + "max": 1486052000.0, + "mean": 289599746.67, + "stddev": 247897979.08, + "ops_per_sec": 5.6, + "per_rep_median": [ + 255157000.0, + 216411000.0, + 177790500.0, + 178384500.0, + 331343500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2000, + "timed_iters": 10001, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24996.58, + "samples": 50005, + "median": 22000.0, + "mad": 1000.0, + "iqr": 5000.0, + "q1": 21000.0, + "q3": 26000.0, + "min": 21000.0, + "max": 80000.0, + "mean": 24691.65, + "stddev": 4915.04, + "ops_per_sec": 45454.55, + "per_rep_median": [ + 22000.0, + 22000.0, + 22000.0, + 22000.0, + 22000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25752000.0, + "samples": 150, + "median": 25759000.0, + "mad": 19000.0, + "iqr": 44500.0, + "q1": 25730250.0, + "q3": 25774750.0, + "min": 25700000.0, + "max": 26016000.0, + "mean": 25757373.33, + "stddev": 36363.66, + "ops_per_sec": 38.82, + "per_rep_median": [ + 25763500.0, + 25763500.0, + 25755000.0, + 25755000.0, + 25748500.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 584744000.0, + "samples": 150, + "median": 717814500.0, + "mad": 391387000.0, + "iqr": 970404500.0, + "q1": 326465000.0, + "q3": 1296869500.0, + "min": 324753000.0, + "max": 3177431000.0, + "mean": 937807760.0, + "stddev": 674289516.54, + "ops_per_sec": 1.39, + "per_rep_median": [ + 717814500.0, + 585954500.0, + 844827500.0, + 586253500.0, + 717738000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 908, + "timed_iters": 4540, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55065.49, + "samples": 22700, + "median": 48000.0, + "mad": 9000.0, + "iqr": 26000.0, + "q1": 39000.0, + "q3": 65000.0, + "min": 38000.0, + "max": 259000.0, + "mean": 54390.97, + "stddev": 19062.83, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59265000.0, + "samples": 150, + "median": 59398000.0, + "mad": 28500.0, + "iqr": 70500.0, + "q1": 59352250.0, + "q3": 59422750.0, + "min": 59260000.0, + "max": 64566000.0, + "mean": 59444553.33, + "stddev": 476148.58, + "ops_per_sec": 16.84, + "per_rep_median": [ + 59397000.0, + 59398500.0, + 59405500.0, + 59387000.0, + 59395000.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 341390000.0, + "samples": 150, + "median": 341787500.0, + "mad": 451500.0, + "iqr": 911250.0, + "q1": 341355000.0, + "q3": 342266250.0, + "min": 340589000.0, + "max": 353790000.0, + "mean": 342111633.33, + "stddev": 1695918.52, + "ops_per_sec": 2.93, + "per_rep_median": [ + 341404000.0, + 341963500.0, + 341924500.0, + 341820500.0, + 341904500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 917, + "timed_iters": 4585, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54528.84, + "samples": 22925, + "median": 48000.0, + "mad": 9000.0, + "iqr": 26000.0, + "q1": 39000.0, + "q3": 65000.0, + "min": 38000.0, + "max": 469000.0, + "mean": 54823.34, + "stddev": 20163.02, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59475000.0, + "samples": 150, + "median": 59391000.0, + "mad": 38500.0, + "iqr": 97000.0, + "q1": 59323000.0, + "q3": 59420000.0, + "min": 59268000.0, + "max": 72541000.0, + "mean": 59499606.67, + "stddev": 1107932.34, + "ops_per_sec": 16.84, + "per_rep_median": [ + 59373000.0, + 59387000.0, + 59390000.0, + 59405500.0, + 59386500.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2082895000.0, + "samples": 150, + "median": 2078429500.0, + "mad": 1339938500.0, + "iqr": 2702899000.0, + "q1": 739608250.0, + "q3": 3442507250.0, + "min": 735976000.0, + "max": 12138910000.0, + "mean": 2685279200.0, + "stddev": 2308475757.57, + "ops_per_sec": 0.48, + "per_rep_median": [ + 2080959000.0, + 2415120500.0, + 2079610000.0, + 1405587000.0, + 2087484500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 389, + "timed_iters": 1946, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 128454.9, + "samples": 9730, + "median": 120000.0, + "mad": 26000.0, + "iqr": 53000.0, + "q1": 94000.0, + "q3": 147000.0, + "min": 93000.0, + "max": 428000.0, + "mean": 126612.85, + "stddev": 38274.07, + "ops_per_sec": 8333.33, + "per_rep_median": [ + 120000.0, + 120000.0, + 120000.0, + 120000.0, + 109000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114042000.0, + "samples": 150, + "median": 114067000.0, + "mad": 65500.0, + "iqr": 153750.0, + "q1": 114020250.0, + "q3": 114174000.0, + "min": 113919000.0, + "max": 482118000.0, + "mean": 117548113.33, + "stddev": 31672668.02, + "ops_per_sec": 8.77, + "per_rep_median": [ + 114031000.0, + 114028000.0, + 114096000.0, + 114149500.0, + 114179000.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2469350000.0, + "samples": 150, + "median": 1871076000.0, + "mad": 619611500.0, + "iqr": 1224627000.0, + "q1": 1268002750.0, + "q3": 2492629750.0, + "min": 667361000.0, + "max": 9700768000.0, + "mean": 2206371146.67, + "stddev": 1736141421.73, + "ops_per_sec": 0.53, + "per_rep_median": [ + 1271024500.0, + 1874400000.0, + 1271720000.0, + 1871026500.0, + 1871354000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 281, + "timed_iters": 1407, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 177686.27, + "samples": 7035, + "median": 158000.0, + "mad": 12000.0, + "iqr": 33000.0, + "q1": 147000.0, + "q3": 180000.0, + "min": 145000.0, + "max": 830000.0, + "mean": 167553.38, + "stddev": 28004.93, + "ops_per_sec": 6329.11, + "per_rep_median": [ + 158000.0, + 158000.0, + 159000.0, + 159000.0, + 159000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 110531000.0, + "samples": 150, + "median": 110526000.0, + "mad": 45500.0, + "iqr": 102750.0, + "q1": 110460250.0, + "q3": 110563000.0, + "min": 110340000.0, + "max": 114608000.0, + "mean": 110635220.0, + "stddev": 621170.36, + "ops_per_sec": 9.05, + "per_rep_median": [ + 110540000.0, + 110520000.0, + 110550500.0, + 110524000.0, + 110532000.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1690644000.0, + "samples": 150, + "median": 1691580500.0, + "mad": 815511500.0, + "iqr": 2435046500.0, + "q1": 878912750.0, + "q3": 3313959250.0, + "min": 875041000.0, + "max": 10603396000.0, + "mean": 2708152340.0, + "stddev": 2167686375.47, + "ops_per_sec": 0.59, + "per_rep_median": [ + 1690336000.0, + 2502437000.0, + 2092296500.0, + 1683476500.0, + 1689066000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 490, + "timed_iters": 2450, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 102027.4, + "samples": 12250, + "median": 93000.0, + "mad": 13000.0, + "iqr": 37000.0, + "q1": 81000.0, + "q3": 118000.0, + "min": 79000.0, + "max": 1187000.0, + "mean": 103094.45, + "stddev": 30270.57, + "ops_per_sec": 10752.69, + "per_rep_median": [ + 93000.0, + 93000.0, + 93000.0, + 93000.0, + 93000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 139715000.0, + "samples": 150, + "median": 139695500.0, + "mad": 58000.0, + "iqr": 126000.0, + "q1": 139617500.0, + "q3": 139743500.0, + "min": 139446000.0, + "max": 142958000.0, + "mean": 139740900.0, + "stddev": 393654.91, + "ops_per_sec": 7.16, + "per_rep_median": [ + 139671000.0, + 139689500.0, + 139719000.0, + 139707500.0, + 139700000.0 + ] + } + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 181, + "timed_iters": 907, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 275614.17, + "samples": 4535, + "median": 275000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 274000.0, + "q3": 276000.0, + "min": 271000.0, + "max": 918000.0, + "mean": 277030.65, + "stddev": 24144.22, + "ops_per_sec": 3636.36, + "per_rep_median": [ + 275000.0, + 275000.0, + 275000.0, + 275000.0, + 275000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 134, + "timed_iters": 669, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 373889.76, + "samples": 3345, + "median": 368000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 367000.0, + "q3": 368000.0, + "min": 365000.0, + "max": 1195000.0, + "mean": 368920.78, + "stddev": 14898.96, + "ops_per_sec": 2717.39, + "per_rep_median": [ + 369000.0, + 368000.0, + 367000.0, + 367000.0, + 367000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 142, + "timed_iters": 712, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 350984.25, + "samples": 3560, + "median": 348000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 348000.0, + "q3": 349000.0, + "min": 346000.0, + "max": 551000.0, + "mean": 348960.39, + "stddev": 4557.01, + "ops_per_sec": 2873.56, + "per_rep_median": [ + 348000.0, + 348000.0, + 348000.0, + 349000.0, + 348000.0 + ] + } + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 92, + "timed_iters": 461, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 541841.27, + "samples": 2305, + "median": 542000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 540000.0, + "q3": 543000.0, + "min": 538000.0, + "max": 569000.0, + "mean": 542247.29, + "stddev": 3375.2, + "ops_per_sec": 1845.02, + "per_rep_median": [ + 542000.0, + 542000.0, + 542000.0, + 542000.0, + 542000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 69, + "timed_iters": 347, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 719873.02, + "samples": 1735, + "median": 719000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 717000.0, + "q3": 720000.0, + "min": 715000.0, + "max": 1405000.0, + "mean": 720536.6, + "stddev": 24148.78, + "ops_per_sec": 1390.82, + "per_rep_median": [ + 719000.0, + 718000.0, + 719000.0, + 719000.0, + 719000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 366, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 683841.27, + "samples": 1830, + "median": 682000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 680000.0, + "q3": 684000.0, + "min": 678000.0, + "max": 1129000.0, + "mean": 686081.42, + "stddev": 29420.64, + "ops_per_sec": 1466.28, + "per_rep_median": [ + 683000.0, + 682000.0, + 682000.0, + 682000.0, + 682000.0 + ] + } + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 52, + "timed_iters": 262, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 954571.43, + "samples": 1310, + "median": 954000.0, + "mad": 3000.0, + "iqr": 4000.0, + "q1": 951000.0, + "q3": 955000.0, + "min": 949000.0, + "max": 1373000.0, + "mean": 955759.54, + "stddev": 20047.37, + "ops_per_sec": 1048.22, + "per_rep_median": [ + 954000.0, + 954000.0, + 954000.0, + 953000.0, + 953000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 40, + "timed_iters": 202, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1239806.45, + "samples": 1010, + "median": 1236000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 1234000.0, + "q3": 1239000.0, + "min": 1233000.0, + "max": 1273000.0, + "mean": 1237884.16, + "stddev": 5471.56, + "ops_per_sec": 809.06, + "per_rep_median": [ + 1237000.0, + 1236000.0, + 1236000.0, + 1236000.0, + 1236500.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 42, + "timed_iters": 210, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1188258.06, + "samples": 1050, + "median": 1187000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 1185000.0, + "q3": 1190000.0, + "min": 1183000.0, + "max": 1291000.0, + "mean": 1190085.71, + "stddev": 12913.82, + "ops_per_sec": 842.46, + "per_rep_median": [ + 1188000.0, + 1187000.0, + 1187000.0, + 1187000.0, + 1187000.0 + ] + } + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1107, + "timed_iters": 5535, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45171.07, + "samples": 27675, + "median": 45000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 45000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 58000.0, + "mean": 44846.21, + "stddev": 859.41, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1115, + "timed_iters": 5574, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44854.35, + "samples": 27870, + "median": 45000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 45000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 58000.0, + "mean": 44865.34, + "stddev": 807.75, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 402, + "timed_iters": 2011, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 124313.73, + "samples": 10055, + "median": 124000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 124000.0, + "q3": 124000.0, + "min": 123000.0, + "max": 143000.0, + "mean": 124169.47, + "stddev": 1201.97, + "ops_per_sec": 8064.52, + "per_rep_median": [ + 124000.0, + 124000.0, + 124000.0, + 124000.0, + 124000.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 801, + "timed_iters": 4003, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 62448.14, + "samples": 20015, + "median": 62000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 60000.0, + "max": 93000.0, + "mean": 61891.18, + "stddev": 1121.81, + "ops_per_sec": 16129.03, + "per_rep_median": [ + 62000.0, + 62000.0, + 62000.0, + 62000.0, + 62000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 176, + "timed_iters": 879, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 284275.59, + "samples": 4395, + "median": 227000.0, + "mad": 112000.0, + "iqr": 224000.0, + "q1": 160000.0, + "q3": 384000.0, + "min": 114000.0, + "max": 49069000.0, + "mean": 400433.67, + "stddev": 1364832.25, + "ops_per_sec": 4405.29, + "per_rep_median": [ + 216000.0, + 217000.0, + 216000.0, + 216000.0, + 322000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 662, + "timed_iters": 3310, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 75526.42, + "samples": 16550, + "median": 67000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 67000.0, + "q3": 67000.0, + "min": 66000.0, + "max": 88000.0, + "mean": 67143.81, + "stddev": 966.53, + "ops_per_sec": 14925.37, + "per_rep_median": [ + 67000.0, + 67000.0, + 67000.0, + 67000.0, + 67000.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 410, + "timed_iters": 2050, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 121968.63, + "samples": 10250, + "median": 121000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 121000.0, + "q3": 122000.0, + "min": 119000.0, + "max": 138000.0, + "mean": 121558.54, + "stddev": 1373.02, + "ops_per_sec": 8264.46, + "per_rep_median": [ + 121000.0, + 121000.0, + 121000.0, + 121000.0, + 121000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 108, + "timed_iters": 541, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 461716.54, + "samples": 2705, + "median": 376000.0, + "mad": 156000.0, + "iqr": 362000.0, + "q1": 236000.0, + "q3": 598000.0, + "min": 172000.0, + "max": 3253000.0, + "mean": 474120.89, + "stddev": 329222.43, + "ops_per_sec": 2659.57, + "per_rep_median": [ + 376000.0, + 376000.0, + 392000.0, + 375000.0, + 391000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 457, + "timed_iters": 2286, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 109371.82, + "samples": 11430, + "median": 109000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 109000.0, + "q3": 110000.0, + "min": 108000.0, + "max": 137000.0, + "mean": 109489.76, + "stddev": 1211.34, + "ops_per_sec": 9174.31, + "per_rep_median": [ + 109000.0, + 109000.0, + 109000.0, + 109000.0, + 110000.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 287, + "timed_iters": 1435, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 174211.76, + "samples": 7175, + "median": 172000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 172000.0, + "q3": 173000.0, + "min": 169000.0, + "max": 193000.0, + "mean": 172359.16, + "stddev": 1537.99, + "ops_per_sec": 5813.95, + "per_rep_median": [ + 172000.0, + 172000.0, + 172000.0, + 172000.0, + 172000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 75, + "timed_iters": 377, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 662841.27, + "samples": 1885, + "median": 475000.0, + "mad": 206000.0, + "iqr": 420000.0, + "q1": 272000.0, + "q3": 692000.0, + "min": 267000.0, + "max": 2696000.0, + "mean": 561211.67, + "stddev": 339779.55, + "ops_per_sec": 2105.26, + "per_rep_median": [ + 454000.0, + 496000.0, + 476000.0, + 475000.0, + 453000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 276, + "timed_iters": 1380, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 181160.78, + "samples": 6900, + "median": 181000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 181000.0, + "q3": 181000.0, + "min": 180000.0, + "max": 257000.0, + "mean": 181143.62, + "stddev": 2213.84, + "ops_per_sec": 5524.86, + "per_rep_median": [ + 181000.0, + 181000.0, + 181000.0, + 181000.0, + 181000.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 35, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7111000.0, + "samples": 175, + "median": 6557000.0, + "mad": 675000.0, + "iqr": 1273000.0, + "q1": 5991500.0, + "q3": 7264500.0, + "min": 5572000.0, + "max": 15023000.0, + "mean": 6938411.43, + "stddev": 1442365.12, + "ops_per_sec": 152.51, + "per_rep_median": [ + 6555000.0, + 6694000.0, + 6422000.0, + 6559000.0, + 6426000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 245, + "timed_iters": 1224, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 204227.45, + "samples": 6120, + "median": 204000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 201000.0, + "q3": 206000.0, + "min": 189000.0, + "max": 223000.0, + "mean": 203931.21, + "stddev": 3838.04, + "ops_per_sec": 4901.96, + "per_rep_median": [ + 204000.0, + 204000.0, + 204000.0, + 203000.0, + 203000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1586, + "timed_iters": 7931, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31521.02, + "samples": 39655, + "median": 32000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 31000.0, + "q3": 32000.0, + "min": 30000.0, + "max": 473000.0, + "mean": 31718.9, + "stddev": 4108.49, + "ops_per_sec": 31250.0, + "per_rep_median": [ + 32000.0, + 32000.0, + 32000.0, + 32000.0, + 32000.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21524333.33, + "samples": 150, + "median": 20948500.0, + "mad": 1365500.0, + "iqr": 3289000.0, + "q1": 19789500.0, + "q3": 23078500.0, + "min": 19066000.0, + "max": 54086000.0, + "mean": 22651240.0, + "stddev": 5075415.28, + "ops_per_sec": 47.74, + "per_rep_median": [ + 20468000.0, + 20957000.0, + 21640500.0, + 20989000.0, + 20981500.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 122, + "timed_iters": 609, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 410527.56, + "samples": 3045, + "median": 409000.0, + "mad": 4000.0, + "iqr": 7000.0, + "q1": 405000.0, + "q3": 412000.0, + "min": 389000.0, + "max": 436000.0, + "mean": 409052.55, + "stddev": 5801.4, + "ops_per_sec": 2444.99, + "per_rep_median": [ + 410000.0, + 409000.0, + 409000.0, + 408000.0, + 408000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 811, + "timed_iters": 4053, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 61686.89, + "samples": 20265, + "median": 62000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 60000.0, + "max": 73000.0, + "mean": 61775.13, + "stddev": 1002.52, + "ops_per_sec": 16129.03, + "per_rep_median": [ + 62000.0, + 62000.0, + 62000.0, + 62000.0, + 62000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 57, + "timed_iters": 286, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 872920.63, + "samples": 1430, + "median": 866000.0, + "mad": 3000.0, + "iqr": 5000.0, + "q1": 863000.0, + "q3": 868000.0, + "min": 859000.0, + "max": 920000.0, + "mean": 867146.15, + "stddev": 6262.42, + "ops_per_sec": 1154.73, + "per_rep_median": [ + 868000.0, + 866000.0, + 862000.0, + 865000.0, + 865000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20203333.33, + "samples": 150, + "median": 20155000.0, + "mad": 34000.0, + "iqr": 69750.0, + "q1": 20132000.0, + "q3": 20201750.0, + "min": 20090000.0, + "max": 20517000.0, + "mean": 20179473.33, + "stddev": 76688.4, + "ops_per_sec": 49.62, + "per_rep_median": [ + 20206500.0, + 20147500.0, + 20274500.0, + 20116500.0, + 20141000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 41, + "timed_iters": 206, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1212548.39, + "samples": 1030, + "median": 1211000.0, + "mad": 2000.0, + "iqr": 6000.0, + "q1": 1209000.0, + "q3": 1215000.0, + "min": 1207000.0, + "max": 1283000.0, + "mean": 1216231.07, + "stddev": 14223.64, + "ops_per_sec": 825.76, + "per_rep_median": [ + 1210000.0, + 1211000.0, + 1210000.0, + 1210000.0, + 1243000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55334000.0, + "samples": 150, + "median": 55436500.0, + "mad": 257500.0, + "iqr": 517000.0, + "q1": 55213750.0, + "q3": 55730750.0, + "min": 54966000.0, + "max": 57524000.0, + "mean": 55557473.33, + "stddev": 452267.54, + "ops_per_sec": 18.04, + "per_rep_median": [ + 55632000.0, + 55429500.0, + 55614000.0, + 55193500.0, + 55121000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 424461000.0, + "samples": 150, + "median": 422006500.0, + "mad": 1661000.0, + "iqr": 3570500.0, + "q1": 420549000.0, + "q3": 424119500.0, + "min": 418755000.0, + "max": 606566000.0, + "mean": 423844466.67, + "stddev": 15250616.04, + "ops_per_sec": 2.37, + "per_rep_median": [ + 423611000.0, + 421329000.0, + 421705500.0, + 421372500.0, + 422424500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 125, + "timed_iters": 625, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 399787.4, + "samples": 3125, + "median": 395000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 394000.0, + "q3": 397000.0, + "min": 392000.0, + "max": 446000.0, + "mean": 395872.96, + "stddev": 3498.24, + "ops_per_sec": 2531.65, + "per_rep_median": [ + 395000.0, + 394000.0, + 400000.0, + 394000.0, + 394000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 39, + "timed_iters": 196, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1273967.74, + "samples": 980, + "median": 1255000.0, + "mad": 3000.0, + "iqr": 7000.0, + "q1": 1253000.0, + "q3": 1260000.0, + "min": 1246000.0, + "max": 1291000.0, + "mean": 1257083.67, + "stddev": 6316.24, + "ops_per_sec": 796.81, + "per_rep_median": [ + 1256000.0, + 1256000.0, + 1256000.0, + 1255000.0, + 1253000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33240000.0, + "samples": 150, + "median": 33370000.0, + "mad": 51000.0, + "iqr": 106500.0, + "q1": 33322500.0, + "q3": 33429000.0, + "min": 33117000.0, + "max": 37018000.0, + "mean": 33456106.67, + "stddev": 369561.85, + "ops_per_sec": 29.97, + "per_rep_median": [ + 33619500.0, + 33408000.0, + 33352500.0, + 33342500.0, + 33371000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 141, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1777612.9, + "samples": 705, + "median": 1773000.0, + "mad": 5000.0, + "iqr": 15000.0, + "q1": 1769000.0, + "q3": 1784000.0, + "min": 1761000.0, + "max": 1860000.0, + "mean": 1778225.53, + "stddev": 14463.47, + "ops_per_sec": 564.02, + "per_rep_median": [ + 1774000.0, + 1791000.0, + 1773000.0, + 1770000.0, + 1770000.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3330466.67, + "samples": 375, + "median": 3320000.0, + "mad": 6000.0, + "iqr": 13000.0, + "q1": 3314000.0, + "q3": 3327000.0, + "min": 3306000.0, + "max": 3386000.0, + "mean": 3321840.0, + "stddev": 10971.57, + "ops_per_sec": 301.2, + "per_rep_median": [ + 3324000.0, + 3320000.0, + 3319000.0, + 3315000.0, + 3319000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 68615000.0, + "samples": 150, + "median": 68626500.0, + "mad": 105000.0, + "iqr": 228000.0, + "q1": 68531250.0, + "q3": 68759250.0, + "min": 68385000.0, + "max": 71147000.0, + "mean": 68727526.67, + "stddev": 395205.03, + "ops_per_sec": 14.57, + "per_rep_median": [ + 68539500.0, + 68672500.0, + 68546000.0, + 68567000.0, + 68762500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 139, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1795064.52, + "samples": 695, + "median": 1784000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 1781000.0, + "q3": 1787000.0, + "min": 1775000.0, + "max": 1818000.0, + "mean": 1785132.37, + "stddev": 6416.59, + "ops_per_sec": 560.54, + "per_rep_median": [ + 1785000.0, + 1786000.0, + 1786000.0, + 1781000.0, + 1780000.0 + ] + } + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 711000.0, + "p95": 722000.0, + "min": 706000.0, + "max": 835000.0, + "mean": 712783.0, + "stddev": 6393.8 + }, + "handshakes_per_sec": 1406.5, + "bytes_on_wire": { + "client_to_server": 371, + "server_to_client": 1189, + "total": 1560 + }, + "client_hello_bytes": 291, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1162500.0, + "p95": 1969050.0, + "min": 975000.0, + "max": 3226000.0, + "mean": 1292954.0, + "stddev": 335163.0 + }, + "handshakes_per_sec": 860.2, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 8294, + "total": 9843 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1551000.0, + "p95": 2794050.0, + "min": 1176000.0, + "max": 4901000.0, + "mean": 1713766.0, + "stddev": 564566.2 + }, + "handshakes_per_sec": 644.7, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 10712, + "total": 12261 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1848000.0, + "p95": 3275000.0, + "min": 1487000.0, + "max": 5062000.0, + "mean": 2008523.0, + "stddev": 583159.4 + }, + "handshakes_per_sec": 541.1, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 13988, + "total": 15537 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1666000.0, + "p95": 1683000.0, + "min": 1649000.0, + "max": 2841000.0, + "mean": 1669097.0, + "stddev": 41557.4 + }, + "handshakes_per_sec": 600.2, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 4339, + "total": 5888 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24625500.0, + "p95": 25097050.0, + "min": 23995000.0, + "max": 31304000.0, + "mean": 24620496.0, + "stddev": 412492.6 + }, + "handshakes_per_sec": 40.6, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 36394, + "total": 37943 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1157000.0, + "p95": 1958050.0, + "min": 968000.0, + "max": 4268000.0, + "mean": 1288673.0, + "stddev": 370312.4 + }, + "handshakes_per_sec": 864.3, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 8327, + "total": 9909 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1543000.0, + "p95": 2908050.0, + "min": 1168000.0, + "max": 4522000.0, + "mean": 1688849.0, + "stddev": 566143.3 + }, + "handshakes_per_sec": 648.1, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 10745, + "total": 12327 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1848000.0, + "p95": 3448200.0, + "min": 1485000.0, + "max": 6342000.0, + "mean": 2027265.0, + "stddev": 652400.1 + }, + "handshakes_per_sec": 541.1, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 14021, + "total": 15603 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1655000.0, + "p95": 1686050.0, + "min": 1638000.0, + "max": 3671000.0, + "mean": 1667737.0, + "stddev": 103101.4 + }, + "handshakes_per_sec": 604.2, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 4378, + "total": 5960 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24819500.0, + "p95": 25310050.0, + "min": 24227000.0, + "max": 27278000.0, + "mean": 24786145.0, + "stddev": 323190.6 + }, + "handshakes_per_sec": 40.3, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 36427, + "total": 38009 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 925000.0, + "p95": 1640050.0, + "min": 740000.0, + "max": 3634000.0, + "mean": 1045272.0, + "stddev": 339437.3 + }, + "handshakes_per_sec": 1081.1, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 7942, + "total": 9075 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1316000.0, + "p95": 2447400.0, + "min": 941000.0, + "max": 5057000.0, + "mean": 1450007.0, + "stddev": 543135.4 + }, + "handshakes_per_sec": 759.9, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 10360, + "total": 11493 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1612000.0, + "p95": 3039100.0, + "min": 1250000.0, + "max": 6789000.0, + "mean": 1783615.0, + "stddev": 604958.7 + }, + "handshakes_per_sec": 620.3, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 13636, + "total": 14769 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1427000.0, + "p95": 1459100.0, + "min": 1410000.0, + "max": 2716000.0, + "mean": 1438196.0, + "stddev": 79132.3 + }, + "handshakes_per_sec": 700.8, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 3989, + "total": 5122 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24697000.0, + "p95": 25165100.0, + "min": 23943000.0, + "max": 32026000.0, + "mean": 24686483.0, + "stddev": 406141.2 + }, + "handshakes_per_sec": 40.5, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 36042, + "total": 37175 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 972000.0, + "p95": 1772000.0, + "min": 790000.0, + "max": 3369000.0, + "mean": 1087896.0, + "stddev": 346252.1 + }, + "handshakes_per_sec": 1028.8, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 8262, + "total": 9779 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1361000.0, + "p95": 2614050.0, + "min": 987000.0, + "max": 5334000.0, + "mean": 1514568.0, + "stddev": 566912.4 + }, + "handshakes_per_sec": 734.8, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 10680, + "total": 12197 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1659000.0, + "p95": 3082000.0, + "min": 1298000.0, + "max": 5597000.0, + "mean": 1830573.0, + "stddev": 596462.5 + }, + "handshakes_per_sec": 602.8, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 13956, + "total": 15473 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1470000.0, + "p95": 1490050.0, + "min": 1457000.0, + "max": 1611000.0, + "mean": 1474078.0, + "stddev": 19375.4 + }, + "handshakes_per_sec": 680.3, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 4305, + "total": 5822 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24603000.0, + "p95": 25079100.0, + "min": 24053000.0, + "max": 157458000.0, + "mean": 24854192.0, + "stddev": 4716531.1 + }, + "handshakes_per_sec": 40.6, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 36362, + "total": 37879 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1034000.0, + "p95": 1744000.0, + "min": 851000.0, + "max": 2746000.0, + "mean": 1135006.0, + "stddev": 303208.8 + }, + "handshakes_per_sec": 967.1, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 8742, + "total": 10643 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1425000.0, + "p95": 2674000.0, + "min": 1050000.0, + "max": 5034000.0, + "mean": 1575114.0, + "stddev": 551475.8 + }, + "handshakes_per_sec": 701.8, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 11160, + "total": 13061 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1723500.0, + "p95": 2999500.0, + "min": 1361000.0, + "max": 4772000.0, + "mean": 1883920.0, + "stddev": 556616.3 + }, + "handshakes_per_sec": 580.2, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 14436, + "total": 16337 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1528000.0, + "p95": 1541050.0, + "min": 1516000.0, + "max": 1572000.0, + "mean": 1529399.0, + "stddev": 6727.0 + }, + "handshakes_per_sec": 654.5, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 4791, + "total": 6692 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24511000.0, + "p95": 25007050.0, + "min": 23924000.0, + "max": 33493000.0, + "mean": 24546099.0, + "stddev": 448598.6 + }, + "handshakes_per_sec": 40.8, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 36842, + "total": 38743 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400 + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/mehmetmac-20260719T224937Z.json b/tools/benchmarks/pqc/results/mehmetmac-20260719T224937Z.json new file mode 100644 index 0000000..bce3992 --- /dev/null +++ b/tools/benchmarks/pqc/results/mehmetmac-20260719T224937Z.json @@ -0,0 +1,24177 @@ +{ + "schema_version": "2.0.0", + "tool_version": "0.2.0", + "generated_utc": "2026-07-19T23:25:49Z", + "is_baseline_grade": false, + "baseline_grade_reasons": [ + "host is not a Raspberry Pi (model='', os=macos)", + "CPU governor is 'unavailable', not 'performance'", + "benchmark was not pinned to a dedicated core (no taskset)", + "build flags targeted 'apple-m3', not cortex-a76" + ], + "host": { + "hostname": "mehmetmac", + "os": "macos", + "os_pretty": "macOS 26.3.1 (25D771280a)", + "arch": "arm64", + "kernel": "25.3.0", + "is_rpi": false, + "rpi_model": "", + "cpu_brand": "Apple M3", + "ncpu": 8, + "ram_bytes": 17179869184 + }, + "cpu_features": { + "source": "sysctl", + "neon": true, + "sha2": true, + "sha3": true, + "sha512": true, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-19T22:49:37Z", + "timestamp_end_utc": "2026-07-19T23:25:49Z", + "duration_s": 2172, + "governor_requested": "performance", + "governor_before": "unavailable", + "governor_after": "unavailable", + "bench_core": 3, + "pinned": false, + "taskset_cmd": "", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "Apple clang version 17.0.0 (clang-1700.6.4.2)", + "bench_cflags": "-O3 -mcpu=native", + "cflags_target": "apple-m3", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET arm64-Darwin-25.3.0;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_SHA3_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.7", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.93.0 (254b59607 2026-01-19)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "target_features_compiled": [ + "aes", + "bf16", + "bti", + "crc", + "dit", + "dotprod", + "dpb", + "dpb2", + "fcma", + "fhm", + "flagm", + "fp16", + "frintts", + "i8mm", + "jsconv", + "lor", + "lse", + "neon", + "paca", + "pacg", + "pan", + "pmuv3", + "ras", + "rcpc", + "rcpc2", + "rdm", + "sb", + "sha2", + "sha3", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": true + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.93.0 (254b59607 2026-01-19)", + "target": "aarch64-apple-darwin", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=native", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1784501377, + null, + null, + null + ], + [ + 1784501377, + null, + null, + null + ], + [ + 1784501378, + null, + null, + null + ], + [ + 1784501379, + null, + null, + null + ], + [ + 1784501380, + null, + null, + null + ], + [ + 1784501381, + null, + null, + null + ], + [ + 1784501382, + null, + null, + null + ], + [ + 1784501383, + null, + null, + null + ], + [ + 1784501384, + null, + null, + null + ], + [ + 1784501385, + null, + null, + null + ], + [ + 1784501386, + null, + null, + null + ], + [ + 1784501387, + null, + null, + null + ], + [ + 1784501388, + null, + null, + null + ], + [ + 1784501389, + null, + null, + null + ], + [ + 1784501390, + null, + null, + null + ], + [ + 1784501391, + null, + null, + null + ], + [ + 1784501392, + null, + null, + null + ], + [ + 1784501393, + null, + null, + null + ], + [ + 1784501394, + null, + null, + null + ], + [ + 1784501395, + null, + null, + null + ], + [ + 1784501396, + null, + null, + null + ], + [ + 1784501397, + null, + null, + null + ], + [ + 1784501398, + null, + null, + null + ], + [ + 1784501399, + null, + null, + null + ], + [ + 1784501400, + null, + null, + null + ], + [ + 1784501401, + null, + null, + null + ], + [ + 1784501402, + null, + null, + null + ], + [ + 1784501403, + null, + null, + null + ], + [ + 1784501404, + null, + null, + null + ], + [ + 1784501405, + null, + null, + null + ], + [ + 1784501406, + null, + null, + null + ], + [ + 1784501407, + null, + null, + null + ], + [ + 1784501408, + null, + null, + null + ], + [ + 1784501409, + null, + null, + null + ], + [ + 1784501410, + null, + null, + null + ], + [ + 1784501411, + null, + null, + null + ], + [ + 1784501412, + null, + null, + null + ], + [ + 1784501413, + null, + null, + null + ], + [ + 1784501414, + null, + null, + null + ], + [ + 1784501415, + null, + null, + null + ], + [ + 1784501416, + null, + null, + null + ], + [ + 1784501417, + null, + null, + null + ], + [ + 1784501418, + null, + null, + null + ], + [ + 1784501419, + null, + null, + null + ], + [ + 1784501420, + null, + null, + null + ], + [ + 1784501421, + null, + null, + null + ], + [ + 1784501422, + null, + null, + null + ], + [ + 1784501423, + null, + null, + null + ], + [ + 1784501424, + null, + null, + null + ], + [ + 1784501425, + null, + null, + null + ], + [ + 1784501426, + null, + null, + null + ], + [ + 1784501427, + null, + null, + null + ], + [ + 1784501428, + null, + null, + null + ], + [ + 1784501429, + null, + null, + null + ], + [ + 1784501430, + null, + null, + null + ], + [ + 1784501431, + null, + null, + null + ], + [ + 1784501432, + null, + null, + null + ], + [ + 1784501433, + null, + null, + null + ], + [ + 1784501434, + null, + null, + null + ], + [ + 1784501435, + null, + null, + null + ], + [ + 1784501436, + null, + null, + null + ], + [ + 1784501437, + null, + null, + null + ], + [ + 1784501438, + null, + null, + null + ], + [ + 1784501439, + null, + null, + null + ], + [ + 1784501440, + null, + null, + null + ], + [ + 1784501441, + null, + null, + null + ], + [ + 1784501442, + null, + null, + null + ], + [ + 1784501443, + null, + null, + null + ], + [ + 1784501444, + null, + null, + null + ], + [ + 1784501445, + null, + null, + null + ], + [ + 1784501446, + null, + null, + null + ], + [ + 1784501448, + null, + null, + null + ], + [ + 1784501449, + null, + null, + null + ], + [ + 1784501450, + null, + null, + null + ], + [ + 1784501451, + null, + null, + null + ], + [ + 1784501452, + null, + null, + null + ], + [ + 1784501453, + null, + null, + null + ], + [ + 1784501454, + null, + null, + null + ], + [ + 1784501455, + null, + null, + null + ], + [ + 1784501456, + null, + null, + null + ], + [ + 1784501457, + null, + null, + null + ], + [ + 1784501458, + null, + null, + null + ], + [ + 1784501459, + null, + null, + null + ], + [ + 1784501460, + null, + null, + null + ], + [ + 1784501461, + null, + null, + null + ], + [ + 1784501462, + null, + null, + null + ], + [ + 1784501463, + null, + null, + null + ], + [ + 1784501464, + null, + null, + null + ], + [ + 1784501465, + null, + null, + null + ], + [ + 1784501466, + null, + null, + null + ], + [ + 1784501467, + null, + null, + null + ], + [ + 1784501468, + null, + null, + null + ], + [ + 1784501469, + null, + null, + null + ], + [ + 1784501470, + null, + null, + null + ], + [ + 1784501471, + null, + null, + null + ], + [ + 1784501472, + null, + null, + null + ], + [ + 1784501473, + null, + null, + null + ], + [ + 1784501474, + null, + null, + null + ], + [ + 1784501475, + null, + null, + null + ], + [ + 1784501476, + null, + null, + null + ], + [ + 1784501477, + null, + null, + null + ], + [ + 1784501478, + null, + null, + null + ], + [ + 1784501479, + null, + null, + null + ], + [ + 1784501480, + null, + null, + null + ], + [ + 1784501481, + null, + null, + null + ], + [ + 1784501482, + null, + null, + null + ], + [ + 1784501483, + null, + null, + null + ], + [ + 1784501484, + null, + null, + null + ], + [ + 1784501485, + null, + null, + null + ], + [ + 1784501486, + null, + null, + null + ], + [ + 1784501487, + null, + null, + null + ], + [ + 1784501488, + null, + null, + null + ], + [ + 1784501489, + null, + null, + null + ], + [ + 1784501490, + null, + null, + null + ], + [ + 1784501491, + null, + null, + null + ], + [ + 1784501492, + null, + null, + null + ], + [ + 1784501493, + null, + null, + null + ], + [ + 1784501494, + null, + null, + null + ], + [ + 1784501495, + null, + null, + null + ], + [ + 1784501496, + null, + null, + null + ], + [ + 1784501497, + null, + null, + null + ], + [ + 1784501498, + null, + null, + null + ], + [ + 1784501499, + null, + null, + null + ], + [ + 1784501500, + null, + null, + null + ], + [ + 1784501501, + null, + null, + null + ], + [ + 1784501502, + null, + null, + null + ], + [ + 1784501503, + null, + null, + null + ], + [ + 1784501504, + null, + null, + null + ], + [ + 1784501505, + null, + null, + null + ], + [ + 1784501506, + null, + null, + null + ], + [ + 1784501507, + null, + null, + null + ], + [ + 1784501508, + null, + null, + null + ], + [ + 1784501509, + null, + null, + null + ], + [ + 1784501510, + null, + null, + null + ], + [ + 1784501511, + null, + null, + null + ], + [ + 1784501512, + null, + null, + null + ], + [ + 1784501513, + null, + null, + null + ], + [ + 1784501514, + null, + null, + null + ], + [ + 1784501515, + null, + null, + null + ], + [ + 1784501516, + null, + null, + null + ], + [ + 1784501517, + null, + null, + null + ], + [ + 1784501518, + null, + null, + null + ], + [ + 1784501519, + null, + null, + null + ], + [ + 1784501520, + null, + null, + null + ], + [ + 1784501521, + null, + null, + null + ], + [ + 1784501522, + null, + null, + null + ], + [ + 1784501523, + null, + null, + null + ], + [ + 1784501524, + null, + null, + null + ], + [ + 1784501525, + null, + null, + null + ], + [ + 1784501526, + null, + null, + null + ], + [ + 1784501527, + null, + null, + null + ], + [ + 1784501528, + null, + null, + null + ], + [ + 1784501529, + null, + null, + null + ], + [ + 1784501530, + null, + null, + null + ], + [ + 1784501531, + null, + null, + null + ], + [ + 1784501532, + null, + null, + null + ], + [ + 1784501533, + null, + null, + null + ], + [ + 1784501534, + null, + null, + null + ], + [ + 1784501535, + null, + null, + null + ], + [ + 1784501536, + null, + null, + null + ], + [ + 1784501538, + null, + null, + null + ], + [ + 1784501539, + null, + null, + null + ], + [ + 1784501540, + null, + null, + null + ], + [ + 1784501541, + null, + null, + null + ], + [ + 1784501542, + null, + null, + null + ], + [ + 1784501543, + null, + null, + null + ], + [ + 1784501544, + null, + null, + null + ], + [ + 1784501545, + null, + null, + null + ], + [ + 1784501546, + null, + null, + null + ], + [ + 1784501547, + null, + null, + null + ], + [ + 1784501548, + null, + null, + null + ], + [ + 1784501549, + null, + null, + null + ], + [ + 1784501550, + null, + null, + null + ], + [ + 1784501551, + null, + null, + null + ], + [ + 1784501552, + null, + null, + null + ], + [ + 1784501553, + null, + null, + null + ], + [ + 1784501554, + null, + null, + null + ], + [ + 1784501555, + null, + null, + null + ], + [ + 1784501556, + null, + null, + null + ], + [ + 1784501557, + null, + null, + null + ], + [ + 1784501558, + null, + null, + null + ], + [ + 1784501559, + null, + null, + null + ], + [ + 1784501560, + null, + null, + null + ], + [ + 1784501561, + null, + null, + null + ], + [ + 1784501562, + null, + null, + null + ], + [ + 1784501563, + null, + null, + null + ], + [ + 1784501564, + null, + null, + null + ], + [ + 1784501565, + null, + null, + null + ], + [ + 1784501566, + null, + null, + null + ], + [ + 1784501567, + null, + null, + null + ], + [ + 1784501568, + null, + null, + null + ], + [ + 1784501569, + null, + null, + null + ], + [ + 1784501570, + null, + null, + null + ], + [ + 1784501571, + null, + null, + null + ], + [ + 1784501572, + null, + null, + null + ], + [ + 1784501573, + null, + null, + null + ], + [ + 1784501574, + null, + null, + null + ], + [ + 1784501575, + null, + null, + null + ], + [ + 1784501576, + null, + null, + null + ], + [ + 1784501577, + null, + null, + null + ], + [ + 1784501578, + null, + null, + null + ], + [ + 1784501579, + null, + null, + null + ], + [ + 1784501580, + null, + null, + null + ], + [ + 1784501581, + null, + null, + null + ], + [ + 1784501582, + null, + null, + null + ], + [ + 1784501583, + null, + null, + null + ], + [ + 1784501584, + null, + null, + null + ], + [ + 1784501585, + null, + null, + null + ], + [ + 1784501586, + null, + null, + null + ], + [ + 1784501587, + null, + null, + null + ], + [ + 1784501588, + null, + null, + null + ], + [ + 1784501589, + null, + null, + null + ], + [ + 1784501590, + null, + null, + null + ], + [ + 1784501591, + null, + null, + null + ], + [ + 1784501592, + null, + null, + null + ], + [ + 1784501593, + null, + null, + null + ], + [ + 1784501594, + null, + null, + null + ], + [ + 1784501595, + null, + null, + null + ], + [ + 1784501596, + null, + null, + null + ], + [ + 1784501597, + null, + null, + null + ], + [ + 1784501598, + null, + null, + null + ], + [ + 1784501599, + null, + null, + null + ], + [ + 1784501600, + null, + null, + null + ], + [ + 1784501601, + null, + null, + null + ], + [ + 1784501602, + null, + null, + null + ], + [ + 1784501603, + null, + null, + null + ], + [ + 1784501604, + null, + null, + null + ], + [ + 1784501605, + null, + null, + null + ], + [ + 1784501606, + null, + null, + null + ], + [ + 1784501607, + null, + null, + null + ], + [ + 1784501608, + null, + null, + null + ], + [ + 1784501609, + null, + null, + null + ], + [ + 1784501610, + null, + null, + null + ], + [ + 1784501611, + null, + null, + null + ], + [ + 1784501612, + null, + null, + null + ], + [ + 1784501613, + null, + null, + null + ], + [ + 1784501614, + null, + null, + null + ], + [ + 1784501615, + null, + null, + null + ], + [ + 1784501616, + null, + null, + null + ], + [ + 1784501617, + null, + null, + null + ], + [ + 1784501618, + null, + null, + null + ], + [ + 1784501619, + null, + null, + null + ], + [ + 1784501620, + null, + null, + null + ], + [ + 1784501621, + null, + null, + null + ], + [ + 1784501622, + null, + null, + null + ], + [ + 1784501623, + null, + null, + null + ], + [ + 1784501624, + null, + null, + null + ], + [ + 1784501625, + null, + null, + null + ], + [ + 1784501627, + null, + null, + null + ], + [ + 1784501628, + null, + null, + null + ], + [ + 1784501629, + null, + null, + null + ], + [ + 1784501630, + null, + null, + null + ], + [ + 1784501631, + null, + null, + null + ], + [ + 1784501632, + null, + null, + null + ], + [ + 1784501633, + null, + null, + null + ], + [ + 1784501634, + null, + null, + null + ], + [ + 1784501635, + null, + null, + null + ], + [ + 1784501636, + null, + null, + null + ], + [ + 1784501637, + null, + null, + null + ], + [ + 1784501638, + null, + null, + null + ], + [ + 1784501639, + null, + null, + null + ], + [ + 1784501640, + null, + null, + null + ], + [ + 1784501641, + null, + null, + null + ], + [ + 1784501642, + null, + null, + null + ], + [ + 1784501643, + null, + null, + null + ], + [ + 1784501644, + null, + null, + null + ], + [ + 1784501645, + null, + null, + null + ], + [ + 1784501646, + null, + null, + null + ], + [ + 1784501647, + null, + null, + null + ], + [ + 1784501648, + null, + null, + null + ], + [ + 1784501649, + null, + null, + null + ], + [ + 1784501650, + null, + null, + null + ], + [ + 1784501651, + null, + null, + null + ], + [ + 1784501652, + null, + null, + null + ], + [ + 1784501653, + null, + null, + null + ], + [ + 1784501654, + null, + null, + null + ], + [ + 1784501655, + null, + null, + null + ], + [ + 1784501656, + null, + null, + null + ], + [ + 1784501657, + null, + null, + null + ], + [ + 1784501658, + null, + null, + null + ], + [ + 1784501659, + null, + null, + null + ], + [ + 1784501660, + null, + null, + null + ], + [ + 1784501661, + null, + null, + null + ], + [ + 1784501662, + null, + null, + null + ], + [ + 1784501663, + null, + null, + null + ], + [ + 1784501664, + null, + null, + null + ], + [ + 1784501665, + null, + null, + null + ], + [ + 1784501666, + null, + null, + null + ], + [ + 1784501667, + null, + null, + null + ], + [ + 1784501668, + null, + null, + null + ], + [ + 1784501669, + null, + null, + null + ], + [ + 1784501670, + null, + null, + null + ], + [ + 1784501671, + null, + null, + null + ], + [ + 1784501672, + null, + null, + null + ], + [ + 1784501673, + null, + null, + null + ], + [ + 1784501674, + null, + null, + null + ], + [ + 1784501675, + null, + null, + null + ], + [ + 1784501676, + null, + null, + null + ], + [ + 1784501677, + null, + null, + null + ], + [ + 1784501678, + null, + null, + null + ], + [ + 1784501679, + null, + null, + null + ], + [ + 1784501680, + null, + null, + null + ], + [ + 1784501681, + null, + null, + null + ], + [ + 1784501682, + null, + null, + null + ], + [ + 1784501683, + null, + null, + null + ], + [ + 1784501684, + null, + null, + null + ], + [ + 1784501685, + null, + null, + null + ], + [ + 1784501686, + null, + null, + null + ], + [ + 1784501687, + null, + null, + null + ], + [ + 1784501688, + null, + null, + null + ], + [ + 1784501689, + null, + null, + null + ], + [ + 1784501690, + null, + null, + null + ], + [ + 1784501691, + null, + null, + null + ], + [ + 1784501692, + null, + null, + null + ], + [ + 1784501693, + null, + null, + null + ], + [ + 1784501694, + null, + null, + null + ], + [ + 1784501695, + null, + null, + null + ], + [ + 1784501696, + null, + null, + null + ], + [ + 1784501697, + null, + null, + null + ], + [ + 1784501698, + null, + null, + null + ], + [ + 1784501699, + null, + null, + null + ], + [ + 1784501700, + null, + null, + null + ], + [ + 1784501701, + null, + null, + null + ], + [ + 1784501702, + null, + null, + null + ], + [ + 1784501703, + null, + null, + null + ], + [ + 1784501704, + null, + null, + null + ], + [ + 1784501705, + null, + null, + null + ], + [ + 1784501706, + null, + null, + null + ], + [ + 1784501707, + null, + null, + null + ], + [ + 1784501708, + null, + null, + null + ], + [ + 1784501709, + null, + null, + null + ], + [ + 1784501710, + null, + null, + null + ], + [ + 1784501711, + null, + null, + null + ], + [ + 1784501713, + null, + null, + null + ], + [ + 1784501714, + null, + null, + null + ], + [ + 1784501715, + null, + null, + null + ], + [ + 1784501716, + null, + null, + null + ], + [ + 1784501717, + null, + null, + null + ], + [ + 1784501718, + null, + null, + null + ], + [ + 1784501719, + null, + null, + null + ], + [ + 1784501720, + null, + null, + null + ], + [ + 1784501721, + null, + null, + null + ], + [ + 1784501722, + null, + null, + null + ], + [ + 1784501723, + null, + null, + null + ], + [ + 1784501724, + null, + null, + null + ], + [ + 1784501725, + null, + null, + null + ], + [ + 1784501726, + null, + null, + null + ], + [ + 1784501727, + null, + null, + null + ], + [ + 1784501728, + null, + null, + null + ], + [ + 1784501729, + null, + null, + null + ], + [ + 1784501730, + null, + null, + null + ], + [ + 1784501731, + null, + null, + null + ], + [ + 1784501732, + null, + null, + null + ], + [ + 1784501733, + null, + null, + null + ], + [ + 1784501734, + null, + null, + null + ], + [ + 1784501735, + null, + null, + null + ], + [ + 1784501736, + null, + null, + null + ], + [ + 1784501737, + null, + null, + null + ], + [ + 1784501738, + null, + null, + null + ], + [ + 1784501739, + null, + null, + null + ], + [ + 1784501740, + null, + null, + null + ], + [ + 1784501741, + null, + null, + null + ], + [ + 1784501742, + null, + null, + null + ], + [ + 1784501743, + null, + null, + null + ], + [ + 1784501744, + null, + null, + null + ], + [ + 1784501745, + null, + null, + null + ], + [ + 1784501746, + null, + null, + null + ], + [ + 1784501747, + null, + null, + null + ], + [ + 1784501748, + null, + null, + null + ], + [ + 1784501749, + null, + null, + null + ], + [ + 1784501750, + null, + null, + null + ], + [ + 1784501751, + null, + null, + null + ], + [ + 1784501752, + null, + null, + null + ], + [ + 1784501753, + null, + null, + null + ], + [ + 1784501754, + null, + null, + null + ], + [ + 1784501755, + null, + null, + null + ], + [ + 1784501756, + null, + null, + null + ], + [ + 1784501757, + null, + null, + null + ], + [ + 1784501758, + null, + null, + null + ], + [ + 1784501759, + null, + null, + null + ], + [ + 1784501760, + null, + null, + null + ], + [ + 1784501761, + null, + null, + null + ], + [ + 1784501762, + null, + null, + null + ], + [ + 1784501763, + null, + null, + null + ], + [ + 1784501764, + null, + null, + null + ], + [ + 1784501765, + null, + null, + null + ], + [ + 1784501766, + null, + null, + null + ], + [ + 1784501767, + null, + null, + null + ], + [ + 1784501768, + null, + null, + null + ], + [ + 1784501769, + null, + null, + null + ], + [ + 1784501770, + null, + null, + null + ], + [ + 1784501771, + null, + null, + null + ], + [ + 1784501772, + null, + null, + null + ], + [ + 1784501773, + null, + null, + null + ], + [ + 1784501774, + null, + null, + null + ], + [ + 1784501775, + null, + null, + null + ], + [ + 1784501776, + null, + null, + null + ], + [ + 1784501777, + null, + null, + null + ], + [ + 1784501778, + null, + null, + null + ], + [ + 1784501779, + null, + null, + null + ], + [ + 1784501780, + null, + null, + null + ], + [ + 1784501781, + null, + null, + null + ], + [ + 1784501782, + null, + null, + null + ], + [ + 1784501783, + null, + null, + null + ], + [ + 1784501784, + null, + null, + null + ], + [ + 1784501785, + null, + null, + null + ], + [ + 1784501786, + null, + null, + null + ], + [ + 1784501787, + null, + null, + null + ], + [ + 1784501788, + null, + null, + null + ], + [ + 1784501789, + null, + null, + null + ], + [ + 1784501790, + null, + null, + null + ], + [ + 1784501791, + null, + null, + null + ], + [ + 1784501792, + null, + null, + null + ], + [ + 1784501793, + null, + null, + null + ], + [ + 1784501794, + null, + null, + null + ], + [ + 1784501795, + null, + null, + null + ], + [ + 1784501796, + null, + null, + null + ], + [ + 1784501797, + null, + null, + null + ], + [ + 1784501798, + null, + null, + null + ], + [ + 1784501799, + null, + null, + null + ], + [ + 1784501800, + null, + null, + null + ], + [ + 1784501801, + null, + null, + null + ], + [ + 1784501802, + null, + null, + null + ], + [ + 1784501803, + null, + null, + null + ], + [ + 1784501804, + null, + null, + null + ], + [ + 1784501805, + null, + null, + null + ], + [ + 1784501807, + null, + null, + null + ], + [ + 1784501808, + null, + null, + null + ], + [ + 1784501809, + null, + null, + null + ], + [ + 1784501810, + null, + null, + null + ], + [ + 1784501811, + null, + null, + null + ], + [ + 1784501812, + null, + null, + null + ], + [ + 1784501813, + null, + null, + null + ], + [ + 1784501814, + null, + null, + null + ], + [ + 1784501815, + null, + null, + null + ], + [ + 1784501816, + null, + null, + null + ], + [ + 1784501817, + null, + null, + null + ], + [ + 1784501818, + null, + null, + null + ], + [ + 1784501819, + null, + null, + null + ], + [ + 1784501820, + null, + null, + null + ], + [ + 1784501821, + null, + null, + null + ], + [ + 1784501822, + null, + null, + null + ], + [ + 1784501823, + null, + null, + null + ], + [ + 1784501824, + null, + null, + null + ], + [ + 1784501825, + null, + null, + null + ], + [ + 1784501826, + null, + null, + null + ], + [ + 1784501827, + null, + null, + null + ], + [ + 1784501828, + null, + null, + null + ], + [ + 1784501829, + null, + null, + null + ], + [ + 1784501830, + null, + null, + null + ], + [ + 1784501831, + null, + null, + null + ], + [ + 1784501832, + null, + null, + null + ], + [ + 1784501833, + null, + null, + null + ], + [ + 1784501834, + null, + null, + null + ], + [ + 1784501835, + null, + null, + null + ], + [ + 1784501836, + null, + null, + null + ], + [ + 1784501837, + null, + null, + null + ], + [ + 1784501838, + null, + null, + null + ], + [ + 1784501839, + null, + null, + null + ], + [ + 1784501840, + null, + null, + null + ], + [ + 1784501841, + null, + null, + null + ], + [ + 1784501842, + null, + null, + null + ], + [ + 1784501843, + null, + null, + null + ], + [ + 1784501844, + null, + null, + null + ], + [ + 1784501845, + null, + null, + null + ], + [ + 1784501846, + null, + null, + null + ], + [ + 1784501847, + null, + null, + null + ], + [ + 1784501848, + null, + null, + null + ], + [ + 1784501849, + null, + null, + null + ], + [ + 1784501850, + null, + null, + null + ], + [ + 1784501851, + null, + null, + null + ], + [ + 1784501852, + null, + null, + null + ], + [ + 1784501853, + null, + null, + null + ], + [ + 1784501854, + null, + null, + null + ], + [ + 1784501855, + null, + null, + null + ], + [ + 1784501856, + null, + null, + null + ], + [ + 1784501857, + null, + null, + null + ], + [ + 1784501858, + null, + null, + null + ], + [ + 1784501859, + null, + null, + null + ], + [ + 1784501860, + null, + null, + null + ], + [ + 1784501861, + null, + null, + null + ], + [ + 1784501862, + null, + null, + null + ], + [ + 1784501863, + null, + null, + null + ], + [ + 1784501864, + null, + null, + null + ], + [ + 1784501865, + null, + null, + null + ], + [ + 1784501866, + null, + null, + null + ], + [ + 1784501867, + null, + null, + null + ], + [ + 1784501868, + null, + null, + null + ], + [ + 1784501869, + null, + null, + null + ], + [ + 1784501870, + null, + null, + null + ], + [ + 1784501871, + null, + null, + null + ], + [ + 1784501872, + null, + null, + null + ], + [ + 1784501873, + null, + null, + null + ], + [ + 1784501874, + null, + null, + null + ], + [ + 1784501875, + null, + null, + null + ], + [ + 1784501876, + null, + null, + null + ], + [ + 1784501877, + null, + null, + null + ], + [ + 1784501878, + null, + null, + null + ], + [ + 1784501879, + null, + null, + null + ], + [ + 1784501880, + null, + null, + null + ], + [ + 1784501881, + null, + null, + null + ], + [ + 1784501882, + null, + null, + null + ], + [ + 1784501883, + null, + null, + null + ], + [ + 1784501884, + null, + null, + null + ], + [ + 1784501885, + null, + null, + null + ], + [ + 1784501886, + null, + null, + null + ], + [ + 1784501887, + null, + null, + null + ], + [ + 1784501888, + null, + null, + null + ], + [ + 1784501889, + null, + null, + null + ], + [ + 1784501890, + null, + null, + null + ], + [ + 1784501891, + null, + null, + null + ], + [ + 1784501892, + null, + null, + null + ], + [ + 1784501893, + null, + null, + null + ], + [ + 1784501894, + null, + null, + null + ], + [ + 1784501895, + null, + null, + null + ], + [ + 1784501896, + null, + null, + null + ], + [ + 1784501897, + null, + null, + null + ], + [ + 1784501898, + null, + null, + null + ], + [ + 1784501899, + null, + null, + null + ], + [ + 1784501900, + null, + null, + null + ], + [ + 1784501901, + null, + null, + null + ], + [ + 1784501902, + null, + null, + null + ], + [ + 1784501904, + null, + null, + null + ], + [ + 1784501905, + null, + null, + null + ], + [ + 1784501906, + null, + null, + null + ], + [ + 1784501907, + null, + null, + null + ], + [ + 1784501908, + null, + null, + null + ], + [ + 1784501909, + null, + null, + null + ], + [ + 1784501910, + null, + null, + null + ], + [ + 1784501911, + null, + null, + null + ], + [ + 1784501912, + null, + null, + null + ], + [ + 1784501913, + null, + null, + null + ], + [ + 1784501914, + null, + null, + null + ], + [ + 1784501915, + null, + null, + null + ], + [ + 1784501916, + null, + null, + null + ], + [ + 1784501917, + null, + null, + null + ], + [ + 1784501918, + null, + null, + null + ], + [ + 1784501919, + null, + null, + null + ], + [ + 1784501920, + null, + null, + null + ], + [ + 1784501921, + null, + null, + null + ], + [ + 1784501922, + null, + null, + null + ], + [ + 1784501923, + null, + null, + null + ], + [ + 1784501924, + null, + null, + null + ], + [ + 1784501925, + null, + null, + null + ], + [ + 1784501926, + null, + null, + null + ], + [ + 1784501927, + null, + null, + null + ], + [ + 1784501928, + null, + null, + null + ], + [ + 1784501929, + null, + null, + null + ], + [ + 1784501930, + null, + null, + null + ], + [ + 1784501931, + null, + null, + null + ], + [ + 1784501932, + null, + null, + null + ], + [ + 1784501933, + null, + null, + null + ], + [ + 1784501934, + null, + null, + null + ], + [ + 1784501935, + null, + null, + null + ], + [ + 1784501936, + null, + null, + null + ], + [ + 1784501937, + null, + null, + null + ], + [ + 1784501938, + null, + null, + null + ], + [ + 1784501939, + null, + null, + null + ], + [ + 1784501940, + null, + null, + null + ], + [ + 1784501941, + null, + null, + null + ], + [ + 1784501942, + null, + null, + null + ], + [ + 1784501943, + null, + null, + null + ], + [ + 1784501944, + null, + null, + null + ], + [ + 1784501945, + null, + null, + null + ], + [ + 1784501946, + null, + null, + null + ], + [ + 1784501947, + null, + null, + null + ], + [ + 1784501948, + null, + null, + null + ], + [ + 1784501949, + null, + null, + null + ], + [ + 1784501950, + null, + null, + null + ], + [ + 1784501951, + null, + null, + null + ], + [ + 1784501952, + null, + null, + null + ], + [ + 1784501953, + null, + null, + null + ], + [ + 1784501954, + null, + null, + null + ], + [ + 1784501955, + null, + null, + null + ], + [ + 1784501956, + null, + null, + null + ], + [ + 1784501957, + null, + null, + null + ], + [ + 1784501958, + null, + null, + null + ], + [ + 1784501959, + null, + null, + null + ], + [ + 1784501960, + null, + null, + null + ], + [ + 1784501961, + null, + null, + null + ], + [ + 1784501962, + null, + null, + null + ], + [ + 1784501963, + null, + null, + null + ], + [ + 1784501964, + null, + null, + null + ], + [ + 1784501965, + null, + null, + null + ], + [ + 1784501966, + null, + null, + null + ], + [ + 1784501967, + null, + null, + null + ], + [ + 1784501968, + null, + null, + null + ], + [ + 1784501969, + null, + null, + null + ], + [ + 1784501970, + null, + null, + null + ], + [ + 1784501971, + null, + null, + null + ], + [ + 1784501972, + null, + null, + null + ], + [ + 1784501973, + null, + null, + null + ], + [ + 1784501974, + null, + null, + null + ], + [ + 1784501975, + null, + null, + null + ], + [ + 1784501976, + null, + null, + null + ], + [ + 1784501977, + null, + null, + null + ], + [ + 1784501978, + null, + null, + null + ], + [ + 1784501979, + null, + null, + null + ], + [ + 1784501980, + null, + null, + null + ], + [ + 1784501981, + null, + null, + null + ], + [ + 1784501982, + null, + null, + null + ], + [ + 1784501983, + null, + null, + null + ], + [ + 1784501984, + null, + null, + null + ], + [ + 1784501985, + null, + null, + null + ], + [ + 1784501986, + null, + null, + null + ], + [ + 1784501987, + null, + null, + null + ], + [ + 1784501988, + null, + null, + null + ], + [ + 1784501989, + null, + null, + null + ], + [ + 1784501990, + null, + null, + null + ], + [ + 1784501991, + null, + null, + null + ], + [ + 1784501992, + null, + null, + null + ], + [ + 1784501993, + null, + null, + null + ], + [ + 1784501994, + null, + null, + null + ], + [ + 1784501995, + null, + null, + null + ], + [ + 1784501997, + null, + null, + null + ], + [ + 1784501998, + null, + null, + null + ], + [ + 1784501999, + null, + null, + null + ], + [ + 1784502000, + null, + null, + null + ], + [ + 1784502001, + null, + null, + null + ], + [ + 1784502002, + null, + null, + null + ], + [ + 1784502003, + null, + null, + null + ], + [ + 1784502004, + null, + null, + null + ], + [ + 1784502005, + null, + null, + null + ], + [ + 1784502006, + null, + null, + null + ], + [ + 1784502007, + null, + null, + null + ], + [ + 1784502008, + null, + null, + null + ], + [ + 1784502009, + null, + null, + null + ], + [ + 1784502010, + null, + null, + null + ], + [ + 1784502011, + null, + null, + null + ], + [ + 1784502012, + null, + null, + null + ], + [ + 1784502013, + null, + null, + null + ], + [ + 1784502014, + null, + null, + null + ], + [ + 1784502015, + null, + null, + null + ], + [ + 1784502016, + null, + null, + null + ], + [ + 1784502017, + null, + null, + null + ], + [ + 1784502018, + null, + null, + null + ], + [ + 1784502019, + null, + null, + null + ], + [ + 1784502020, + null, + null, + null + ], + [ + 1784502021, + null, + null, + null + ], + [ + 1784502022, + null, + null, + null + ], + [ + 1784502023, + null, + null, + null + ], + [ + 1784502024, + null, + null, + null + ], + [ + 1784502025, + null, + null, + null + ], + [ + 1784502026, + null, + null, + null + ], + [ + 1784502027, + null, + null, + null + ], + [ + 1784502028, + null, + null, + null + ], + [ + 1784502029, + null, + null, + null + ], + [ + 1784502030, + null, + null, + null + ], + [ + 1784502031, + null, + null, + null + ], + [ + 1784502032, + null, + null, + null + ], + [ + 1784502033, + null, + null, + null + ], + [ + 1784502034, + null, + null, + null + ], + [ + 1784502035, + null, + null, + null + ], + [ + 1784502036, + null, + null, + null + ], + [ + 1784502037, + null, + null, + null + ], + [ + 1784502038, + null, + null, + null + ], + [ + 1784502039, + null, + null, + null + ], + [ + 1784502040, + null, + null, + null + ], + [ + 1784502041, + null, + null, + null + ], + [ + 1784502042, + null, + null, + null + ], + [ + 1784502043, + null, + null, + null + ], + [ + 1784502044, + null, + null, + null + ], + [ + 1784502045, + null, + null, + null + ], + [ + 1784502046, + null, + null, + null + ], + [ + 1784502047, + null, + null, + null + ], + [ + 1784502048, + null, + null, + null + ], + [ + 1784502049, + null, + null, + null + ], + [ + 1784502050, + null, + null, + null + ], + [ + 1784502051, + null, + null, + null + ], + [ + 1784502052, + null, + null, + null + ], + [ + 1784502053, + null, + null, + null + ], + [ + 1784502054, + null, + null, + null + ], + [ + 1784502055, + null, + null, + null + ], + [ + 1784502056, + null, + null, + null + ], + [ + 1784502057, + null, + null, + null + ], + [ + 1784502058, + null, + null, + null + ], + [ + 1784502059, + null, + null, + null + ], + [ + 1784502060, + null, + null, + null + ], + [ + 1784502061, + null, + null, + null + ], + [ + 1784502062, + null, + null, + null + ], + [ + 1784502063, + null, + null, + null + ], + [ + 1784502065, + null, + null, + null + ], + [ + 1784502066, + null, + null, + null + ], + [ + 1784502067, + null, + null, + null + ], + [ + 1784502068, + null, + null, + null + ], + [ + 1784502069, + null, + null, + null + ], + [ + 1784502070, + null, + null, + null + ], + [ + 1784502071, + null, + null, + null + ], + [ + 1784502072, + null, + null, + null + ], + [ + 1784502073, + null, + null, + null + ], + [ + 1784502074, + null, + null, + null + ], + [ + 1784502075, + null, + null, + null + ], + [ + 1784502076, + null, + null, + null + ], + [ + 1784502077, + null, + null, + null + ], + [ + 1784502078, + null, + null, + null + ], + [ + 1784502079, + null, + null, + null + ], + [ + 1784502080, + null, + null, + null + ], + [ + 1784502081, + null, + null, + null + ], + [ + 1784502082, + null, + null, + null + ], + [ + 1784502083, + null, + null, + null + ], + [ + 1784502084, + null, + null, + null + ], + [ + 1784502085, + null, + null, + null + ], + [ + 1784502086, + null, + null, + null + ], + [ + 1784502087, + null, + null, + null + ], + [ + 1784502088, + null, + null, + null + ], + [ + 1784502089, + null, + null, + null + ], + [ + 1784502090, + null, + null, + null + ], + [ + 1784502091, + null, + null, + null + ], + [ + 1784502092, + null, + null, + null + ], + [ + 1784502093, + null, + null, + null + ], + [ + 1784502094, + null, + null, + null + ], + [ + 1784502095, + null, + null, + null + ], + [ + 1784502096, + null, + null, + null + ], + [ + 1784502097, + null, + null, + null + ], + [ + 1784502098, + null, + null, + null + ], + [ + 1784502099, + null, + null, + null + ], + [ + 1784502100, + null, + null, + null + ], + [ + 1784502101, + null, + null, + null + ], + [ + 1784502102, + null, + null, + null + ], + [ + 1784502103, + null, + null, + null + ], + [ + 1784502104, + null, + null, + null + ], + [ + 1784502105, + null, + null, + null + ], + [ + 1784502106, + null, + null, + null + ], + [ + 1784502107, + null, + null, + null + ], + [ + 1784502108, + null, + null, + null + ], + [ + 1784502109, + null, + null, + null + ], + [ + 1784502110, + null, + null, + null + ], + [ + 1784502111, + null, + null, + null + ], + [ + 1784502112, + null, + null, + null + ], + [ + 1784502113, + null, + null, + null + ], + [ + 1784502114, + null, + null, + null + ], + [ + 1784502115, + null, + null, + null + ], + [ + 1784502116, + null, + null, + null + ], + [ + 1784502117, + null, + null, + null + ], + [ + 1784502118, + null, + null, + null + ], + [ + 1784502119, + null, + null, + null + ], + [ + 1784502120, + null, + null, + null + ], + [ + 1784502121, + null, + null, + null + ], + [ + 1784502122, + null, + null, + null + ], + [ + 1784502123, + null, + null, + null + ], + [ + 1784502124, + null, + null, + null + ], + [ + 1784502125, + null, + null, + null + ], + [ + 1784502126, + null, + null, + null + ], + [ + 1784502127, + null, + null, + null + ], + [ + 1784502128, + null, + null, + null + ], + [ + 1784502130, + null, + null, + null + ], + [ + 1784502131, + null, + null, + null + ], + [ + 1784502132, + null, + null, + null + ], + [ + 1784502133, + null, + null, + null + ], + [ + 1784502134, + null, + null, + null + ], + [ + 1784502135, + null, + null, + null + ], + [ + 1784502136, + null, + null, + null + ], + [ + 1784502137, + null, + null, + null + ], + [ + 1784502138, + null, + null, + null + ], + [ + 1784502139, + null, + null, + null + ], + [ + 1784502140, + null, + null, + null + ], + [ + 1784502141, + null, + null, + null + ], + [ + 1784502142, + null, + null, + null + ], + [ + 1784502143, + null, + null, + null + ], + [ + 1784502144, + null, + null, + null + ], + [ + 1784502145, + null, + null, + null + ], + [ + 1784502146, + null, + null, + null + ], + [ + 1784502147, + null, + null, + null + ], + [ + 1784502148, + null, + null, + null + ], + [ + 1784502149, + null, + null, + null + ], + [ + 1784502150, + null, + null, + null + ], + [ + 1784502151, + null, + null, + null + ], + [ + 1784502152, + null, + null, + null + ], + [ + 1784502153, + null, + null, + null + ], + [ + 1784502154, + null, + null, + null + ], + [ + 1784502155, + null, + null, + null + ], + [ + 1784502156, + null, + null, + null + ], + [ + 1784502157, + null, + null, + null + ], + [ + 1784502158, + null, + null, + null + ], + [ + 1784502159, + null, + null, + null + ], + [ + 1784502160, + null, + null, + null + ], + [ + 1784502161, + null, + null, + null + ], + [ + 1784502162, + null, + null, + null + ], + [ + 1784502163, + null, + null, + null + ], + [ + 1784502164, + null, + null, + null + ], + [ + 1784502165, + null, + null, + null + ], + [ + 1784502166, + null, + null, + null + ], + [ + 1784502167, + null, + null, + null + ], + [ + 1784502168, + null, + null, + null + ], + [ + 1784502169, + null, + null, + null + ], + [ + 1784502170, + null, + null, + null + ], + [ + 1784502171, + null, + null, + null + ], + [ + 1784502172, + null, + null, + null + ], + [ + 1784502173, + null, + null, + null + ], + [ + 1784502174, + null, + null, + null + ], + [ + 1784502175, + null, + null, + null + ], + [ + 1784502176, + null, + null, + null + ], + [ + 1784502177, + null, + null, + null + ], + [ + 1784502178, + null, + null, + null + ], + [ + 1784502179, + null, + null, + null + ], + [ + 1784502180, + null, + null, + null + ], + [ + 1784502181, + null, + null, + null + ], + [ + 1784502182, + null, + null, + null + ], + [ + 1784502183, + null, + null, + null + ], + [ + 1784502184, + null, + null, + null + ], + [ + 1784502185, + null, + null, + null + ], + [ + 1784502186, + null, + null, + null + ], + [ + 1784502187, + null, + null, + null + ], + [ + 1784502188, + null, + null, + null + ], + [ + 1784502189, + null, + null, + null + ], + [ + 1784502190, + null, + null, + null + ], + [ + 1784502191, + null, + null, + null + ], + [ + 1784502192, + null, + null, + null + ], + [ + 1784502194, + null, + null, + null + ], + [ + 1784502195, + null, + null, + null + ], + [ + 1784502196, + null, + null, + null + ], + [ + 1784502197, + null, + null, + null + ], + [ + 1784502198, + null, + null, + null + ], + [ + 1784502199, + null, + null, + null + ], + [ + 1784502200, + null, + null, + null + ], + [ + 1784502201, + null, + null, + null + ], + [ + 1784502202, + null, + null, + null + ], + [ + 1784502203, + null, + null, + null + ], + [ + 1784502204, + null, + null, + null + ], + [ + 1784502205, + null, + null, + null + ], + [ + 1784502206, + null, + null, + null + ], + [ + 1784502207, + null, + null, + null + ], + [ + 1784502208, + null, + null, + null + ], + [ + 1784502209, + null, + null, + null + ], + [ + 1784502210, + null, + null, + null + ], + [ + 1784502211, + null, + null, + null + ], + [ + 1784502212, + null, + null, + null + ], + [ + 1784502213, + null, + null, + null + ], + [ + 1784502214, + null, + null, + null + ], + [ + 1784502215, + null, + null, + null + ], + [ + 1784502216, + null, + null, + null + ], + [ + 1784502217, + null, + null, + null + ], + [ + 1784502218, + null, + null, + null + ], + [ + 1784502219, + null, + null, + null + ], + [ + 1784502220, + null, + null, + null + ], + [ + 1784502221, + null, + null, + null + ], + [ + 1784502222, + null, + null, + null + ], + [ + 1784502223, + null, + null, + null + ], + [ + 1784502224, + null, + null, + null + ], + [ + 1784502225, + null, + null, + null + ], + [ + 1784502226, + null, + null, + null + ], + [ + 1784502227, + null, + null, + null + ], + [ + 1784502228, + null, + null, + null + ], + [ + 1784502229, + null, + null, + null + ], + [ + 1784502230, + null, + null, + null + ], + [ + 1784502231, + null, + null, + null + ], + [ + 1784502232, + null, + null, + null + ], + [ + 1784502233, + null, + null, + null + ], + [ + 1784502234, + null, + null, + null + ], + [ + 1784502235, + null, + null, + null + ], + [ + 1784502236, + null, + null, + null + ], + [ + 1784502237, + null, + null, + null + ], + [ + 1784502238, + null, + null, + null + ], + [ + 1784502239, + null, + null, + null + ], + [ + 1784502240, + null, + null, + null + ], + [ + 1784502241, + null, + null, + null + ], + [ + 1784502242, + null, + null, + null + ], + [ + 1784502243, + null, + null, + null + ], + [ + 1784502244, + null, + null, + null + ], + [ + 1784502245, + null, + null, + null + ], + [ + 1784502246, + null, + null, + null + ], + [ + 1784502247, + null, + null, + null + ], + [ + 1784502248, + null, + null, + null + ], + [ + 1784502249, + null, + null, + null + ], + [ + 1784502250, + null, + null, + null + ], + [ + 1784502251, + null, + null, + null + ], + [ + 1784502252, + null, + null, + null + ], + [ + 1784502253, + null, + null, + null + ], + [ + 1784502254, + null, + null, + null + ], + [ + 1784502255, + null, + null, + null + ], + [ + 1784502256, + null, + null, + null + ], + [ + 1784502257, + null, + null, + null + ], + [ + 1784502258, + null, + null, + null + ], + [ + 1784502260, + null, + null, + null + ], + [ + 1784502261, + null, + null, + null + ], + [ + 1784502262, + null, + null, + null + ], + [ + 1784502263, + null, + null, + null + ], + [ + 1784502264, + null, + null, + null + ], + [ + 1784502265, + null, + null, + null + ], + [ + 1784502266, + null, + null, + null + ], + [ + 1784502267, + null, + null, + null + ], + [ + 1784502268, + null, + null, + null + ], + [ + 1784502269, + null, + null, + null + ], + [ + 1784502270, + null, + null, + null + ], + [ + 1784502271, + null, + null, + null + ], + [ + 1784502272, + null, + null, + null + ], + [ + 1784502273, + null, + null, + null + ], + [ + 1784502274, + null, + null, + null + ], + [ + 1784502275, + null, + null, + null + ], + [ + 1784502276, + null, + null, + null + ], + [ + 1784502277, + null, + null, + null + ], + [ + 1784502278, + null, + null, + null + ], + [ + 1784502279, + null, + null, + null + ], + [ + 1784502280, + null, + null, + null + ], + [ + 1784502281, + null, + null, + null + ], + [ + 1784502282, + null, + null, + null + ], + [ + 1784502283, + null, + null, + null + ], + [ + 1784502284, + null, + null, + null + ], + [ + 1784502285, + null, + null, + null + ], + [ + 1784502286, + null, + null, + null + ], + [ + 1784502287, + null, + null, + null + ], + [ + 1784502288, + null, + null, + null + ], + [ + 1784502289, + null, + null, + null + ], + [ + 1784502290, + null, + null, + null + ], + [ + 1784502291, + null, + null, + null + ], + [ + 1784502292, + null, + null, + null + ], + [ + 1784502293, + null, + null, + null + ], + [ + 1784502294, + null, + null, + null + ], + [ + 1784502295, + null, + null, + null + ], + [ + 1784502296, + null, + null, + null + ], + [ + 1784502297, + null, + null, + null + ], + [ + 1784502298, + null, + null, + null + ], + [ + 1784502299, + null, + null, + null + ], + [ + 1784502300, + null, + null, + null + ], + [ + 1784502301, + null, + null, + null + ], + [ + 1784502302, + null, + null, + null + ], + [ + 1784502303, + null, + null, + null + ], + [ + 1784502304, + null, + null, + null + ], + [ + 1784502305, + null, + null, + null + ], + [ + 1784502306, + null, + null, + null + ], + [ + 1784502307, + null, + null, + null + ], + [ + 1784502308, + null, + null, + null + ], + [ + 1784502309, + null, + null, + null + ], + [ + 1784502310, + null, + null, + null + ], + [ + 1784502311, + null, + null, + null + ], + [ + 1784502312, + null, + null, + null + ], + [ + 1784502313, + null, + null, + null + ], + [ + 1784502314, + null, + null, + null + ], + [ + 1784502315, + null, + null, + null + ], + [ + 1784502316, + null, + null, + null + ], + [ + 1784502317, + null, + null, + null + ], + [ + 1784502318, + null, + null, + null + ], + [ + 1784502319, + null, + null, + null + ], + [ + 1784502320, + null, + null, + null + ], + [ + 1784502321, + null, + null, + null + ], + [ + 1784502322, + null, + null, + null + ], + [ + 1784502323, + null, + null, + null + ], + [ + 1784502324, + null, + null, + null + ], + [ + 1784502325, + null, + null, + null + ], + [ + 1784502327, + null, + null, + null + ], + [ + 1784502328, + null, + null, + null + ], + [ + 1784502329, + null, + null, + null + ], + [ + 1784502330, + null, + null, + null + ], + [ + 1784502331, + null, + null, + null + ], + [ + 1784502332, + null, + null, + null + ], + [ + 1784502333, + null, + null, + null + ], + [ + 1784502334, + null, + null, + null + ], + [ + 1784502335, + null, + null, + null + ], + [ + 1784502336, + null, + null, + null + ], + [ + 1784502337, + null, + null, + null + ], + [ + 1784502338, + null, + null, + null + ], + [ + 1784502339, + null, + null, + null + ], + [ + 1784502340, + null, + null, + null + ], + [ + 1784502341, + null, + null, + null + ], + [ + 1784502342, + null, + null, + null + ], + [ + 1784502343, + null, + null, + null + ], + [ + 1784502344, + null, + null, + null + ], + [ + 1784502345, + null, + null, + null + ], + [ + 1784502346, + null, + null, + null + ], + [ + 1784502347, + null, + null, + null + ], + [ + 1784502348, + null, + null, + null + ], + [ + 1784502349, + null, + null, + null + ], + [ + 1784502350, + null, + null, + null + ], + [ + 1784502351, + null, + null, + null + ], + [ + 1784502352, + null, + null, + null + ], + [ + 1784502353, + null, + null, + null + ], + [ + 1784502354, + null, + null, + null + ], + [ + 1784502355, + null, + null, + null + ], + [ + 1784502356, + null, + null, + null + ], + [ + 1784502357, + null, + null, + null + ], + [ + 1784502358, + null, + null, + null + ], + [ + 1784502359, + null, + null, + null + ], + [ + 1784502360, + null, + null, + null + ], + [ + 1784502361, + null, + null, + null + ], + [ + 1784502362, + null, + null, + null + ], + [ + 1784502363, + null, + null, + null + ], + [ + 1784502364, + null, + null, + null + ], + [ + 1784502365, + null, + null, + null + ], + [ + 1784502366, + null, + null, + null + ], + [ + 1784502367, + null, + null, + null + ], + [ + 1784502368, + null, + null, + null + ], + [ + 1784502369, + null, + null, + null + ], + [ + 1784502370, + null, + null, + null + ], + [ + 1784502371, + null, + null, + null + ], + [ + 1784502372, + null, + null, + null + ], + [ + 1784502373, + null, + null, + null + ], + [ + 1784502374, + null, + null, + null + ], + [ + 1784502375, + null, + null, + null + ], + [ + 1784502376, + null, + null, + null + ], + [ + 1784502377, + null, + null, + null + ], + [ + 1784502378, + null, + null, + null + ], + [ + 1784502379, + null, + null, + null + ], + [ + 1784502380, + null, + null, + null + ], + [ + 1784502381, + null, + null, + null + ], + [ + 1784502382, + null, + null, + null + ], + [ + 1784502383, + null, + null, + null + ], + [ + 1784502384, + null, + null, + null + ], + [ + 1784502385, + null, + null, + null + ], + [ + 1784502386, + null, + null, + null + ], + [ + 1784502387, + null, + null, + null + ], + [ + 1784502388, + null, + null, + null + ], + [ + 1784502389, + null, + null, + null + ], + [ + 1784502391, + null, + null, + null + ], + [ + 1784502392, + null, + null, + null + ], + [ + 1784502393, + null, + null, + null + ], + [ + 1784502394, + null, + null, + null + ], + [ + 1784502395, + null, + null, + null + ], + [ + 1784502396, + null, + null, + null + ], + [ + 1784502397, + null, + null, + null + ], + [ + 1784502398, + null, + null, + null + ], + [ + 1784502399, + null, + null, + null + ], + [ + 1784502400, + null, + null, + null + ], + [ + 1784502401, + null, + null, + null + ], + [ + 1784502402, + null, + null, + null + ], + [ + 1784502403, + null, + null, + null + ], + [ + 1784502404, + null, + null, + null + ], + [ + 1784502405, + null, + null, + null + ], + [ + 1784502406, + null, + null, + null + ], + [ + 1784502407, + null, + null, + null + ], + [ + 1784502408, + null, + null, + null + ], + [ + 1784502409, + null, + null, + null + ], + [ + 1784502410, + null, + null, + null + ], + [ + 1784502411, + null, + null, + null + ], + [ + 1784502412, + null, + null, + null + ], + [ + 1784502413, + null, + null, + null + ], + [ + 1784502414, + null, + null, + null + ], + [ + 1784502415, + null, + null, + null + ], + [ + 1784502416, + null, + null, + null + ], + [ + 1784502417, + null, + null, + null + ], + [ + 1784502418, + null, + null, + null + ], + [ + 1784502419, + null, + null, + null + ], + [ + 1784502420, + null, + null, + null + ], + [ + 1784502421, + null, + null, + null + ], + [ + 1784502422, + null, + null, + null + ], + [ + 1784502423, + null, + null, + null + ], + [ + 1784502424, + null, + null, + null + ], + [ + 1784502425, + null, + null, + null + ], + [ + 1784502426, + null, + null, + null + ], + [ + 1784502427, + null, + null, + null + ], + [ + 1784502428, + null, + null, + null + ], + [ + 1784502429, + null, + null, + null + ], + [ + 1784502430, + null, + null, + null + ], + [ + 1784502431, + null, + null, + null + ], + [ + 1784502432, + null, + null, + null + ], + [ + 1784502433, + null, + null, + null + ], + [ + 1784502434, + null, + null, + null + ], + [ + 1784502435, + null, + null, + null + ], + [ + 1784502436, + null, + null, + null + ], + [ + 1784502437, + null, + null, + null + ], + [ + 1784502438, + null, + null, + null + ], + [ + 1784502439, + null, + null, + null + ], + [ + 1784502440, + null, + null, + null + ], + [ + 1784502441, + null, + null, + null + ], + [ + 1784502442, + null, + null, + null + ], + [ + 1784502443, + null, + null, + null + ], + [ + 1784502444, + null, + null, + null + ], + [ + 1784502445, + null, + null, + null + ], + [ + 1784502446, + null, + null, + null + ], + [ + 1784502447, + null, + null, + null + ], + [ + 1784502448, + null, + null, + null + ], + [ + 1784502449, + null, + null, + null + ], + [ + 1784502450, + null, + null, + null + ], + [ + 1784502451, + null, + null, + null + ], + [ + 1784502452, + null, + null, + null + ], + [ + 1784502453, + null, + null, + null + ], + [ + 1784502454, + null, + null, + null + ], + [ + 1784502455, + null, + null, + null + ], + [ + 1784502456, + null, + null, + null + ], + [ + 1784502458, + null, + null, + null + ], + [ + 1784502459, + null, + null, + null + ], + [ + 1784502460, + null, + null, + null + ], + [ + 1784502461, + null, + null, + null + ], + [ + 1784502462, + null, + null, + null + ], + [ + 1784502463, + null, + null, + null + ], + [ + 1784502464, + null, + null, + null + ], + [ + 1784502465, + null, + null, + null + ], + [ + 1784502466, + null, + null, + null + ], + [ + 1784502467, + null, + null, + null + ], + [ + 1784502468, + null, + null, + null + ], + [ + 1784502469, + null, + null, + null + ], + [ + 1784502470, + null, + null, + null + ], + [ + 1784502471, + null, + null, + null + ], + [ + 1784502472, + null, + null, + null + ], + [ + 1784502473, + null, + null, + null + ], + [ + 1784502474, + null, + null, + null + ], + [ + 1784502475, + null, + null, + null + ], + [ + 1784502476, + null, + null, + null + ], + [ + 1784502477, + null, + null, + null + ], + [ + 1784502478, + null, + null, + null + ], + [ + 1784502479, + null, + null, + null + ], + [ + 1784502480, + null, + null, + null + ], + [ + 1784502481, + null, + null, + null + ], + [ + 1784502482, + null, + null, + null + ], + [ + 1784502483, + null, + null, + null + ], + [ + 1784502484, + null, + null, + null + ], + [ + 1784502485, + null, + null, + null + ], + [ + 1784502486, + null, + null, + null + ], + [ + 1784502487, + null, + null, + null + ], + [ + 1784502488, + null, + null, + null + ], + [ + 1784502489, + null, + null, + null + ], + [ + 1784502490, + null, + null, + null + ], + [ + 1784502491, + null, + null, + null + ], + [ + 1784502492, + null, + null, + null + ], + [ + 1784502493, + null, + null, + null + ], + [ + 1784502494, + null, + null, + null + ], + [ + 1784502495, + null, + null, + null + ], + [ + 1784502496, + null, + null, + null + ], + [ + 1784502497, + null, + null, + null + ], + [ + 1784502498, + null, + null, + null + ], + [ + 1784502499, + null, + null, + null + ], + [ + 1784502500, + null, + null, + null + ], + [ + 1784502501, + null, + null, + null + ], + [ + 1784502502, + null, + null, + null + ], + [ + 1784502503, + null, + null, + null + ], + [ + 1784502504, + null, + null, + null + ], + [ + 1784502505, + null, + null, + null + ], + [ + 1784502506, + null, + null, + null + ], + [ + 1784502507, + null, + null, + null + ], + [ + 1784502508, + null, + null, + null + ], + [ + 1784502509, + null, + null, + null + ], + [ + 1784502510, + null, + null, + null + ], + [ + 1784502511, + null, + null, + null + ], + [ + 1784502512, + null, + null, + null + ], + [ + 1784502513, + null, + null, + null + ], + [ + 1784502514, + null, + null, + null + ], + [ + 1784502515, + null, + null, + null + ], + [ + 1784502516, + null, + null, + null + ], + [ + 1784502517, + null, + null, + null + ], + [ + 1784502518, + null, + null, + null + ], + [ + 1784502519, + null, + null, + null + ], + [ + 1784502520, + null, + null, + null + ], + [ + 1784502521, + null, + null, + null + ], + [ + 1784502522, + null, + null, + null + ], + [ + 1784502524, + null, + null, + null + ], + [ + 1784502525, + null, + null, + null + ], + [ + 1784502526, + null, + null, + null + ], + [ + 1784502527, + null, + null, + null + ], + [ + 1784502528, + null, + null, + null + ], + [ + 1784502529, + null, + null, + null + ], + [ + 1784502530, + null, + null, + null + ], + [ + 1784502531, + null, + null, + null + ], + [ + 1784502532, + null, + null, + null + ], + [ + 1784502533, + null, + null, + null + ], + [ + 1784502534, + null, + null, + null + ], + [ + 1784502535, + null, + null, + null + ], + [ + 1784502536, + null, + null, + null + ], + [ + 1784502537, + null, + null, + null + ], + [ + 1784502538, + null, + null, + null + ], + [ + 1784502539, + null, + null, + null + ], + [ + 1784502540, + null, + null, + null + ], + [ + 1784502541, + null, + null, + null + ], + [ + 1784502542, + null, + null, + null + ], + [ + 1784502543, + null, + null, + null + ], + [ + 1784502544, + null, + null, + null + ], + [ + 1784502545, + null, + null, + null + ], + [ + 1784502546, + null, + null, + null + ], + [ + 1784502547, + null, + null, + null + ], + [ + 1784502548, + null, + null, + null + ], + [ + 1784502549, + null, + null, + null + ], + [ + 1784502550, + null, + null, + null + ], + [ + 1784502551, + null, + null, + null + ], + [ + 1784502552, + null, + null, + null + ], + [ + 1784502553, + null, + null, + null + ], + [ + 1784502554, + null, + null, + null + ], + [ + 1784502555, + null, + null, + null + ], + [ + 1784502556, + null, + null, + null + ], + [ + 1784502557, + null, + null, + null + ], + [ + 1784502558, + null, + null, + null + ], + [ + 1784502559, + null, + null, + null + ], + [ + 1784502560, + null, + null, + null + ], + [ + 1784502561, + null, + null, + null + ], + [ + 1784502562, + null, + null, + null + ], + [ + 1784502563, + null, + null, + null + ], + [ + 1784502564, + null, + null, + null + ], + [ + 1784502565, + null, + null, + null + ], + [ + 1784502566, + null, + null, + null + ], + [ + 1784502567, + null, + null, + null + ], + [ + 1784502568, + null, + null, + null + ], + [ + 1784502569, + null, + null, + null + ], + [ + 1784502570, + null, + null, + null + ], + [ + 1784502571, + null, + null, + null + ], + [ + 1784502572, + null, + null, + null + ], + [ + 1784502573, + null, + null, + null + ], + [ + 1784502574, + null, + null, + null + ], + [ + 1784502575, + null, + null, + null + ], + [ + 1784502576, + null, + null, + null + ], + [ + 1784502577, + null, + null, + null + ], + [ + 1784502578, + null, + null, + null + ], + [ + 1784502579, + null, + null, + null + ], + [ + 1784502580, + null, + null, + null + ], + [ + 1784502581, + null, + null, + null + ], + [ + 1784502582, + null, + null, + null + ], + [ + 1784502583, + null, + null, + null + ], + [ + 1784502584, + null, + null, + null + ], + [ + 1784502585, + null, + null, + null + ], + [ + 1784502586, + null, + null, + null + ], + [ + 1784502587, + null, + null, + null + ], + [ + 1784502588, + null, + null, + null + ], + [ + 1784502589, + null, + null, + null + ], + [ + 1784502591, + null, + null, + null + ], + [ + 1784502592, + null, + null, + null + ], + [ + 1784502593, + null, + null, + null + ], + [ + 1784502594, + null, + null, + null + ], + [ + 1784502595, + null, + null, + null + ], + [ + 1784502596, + null, + null, + null + ], + [ + 1784502597, + null, + null, + null + ], + [ + 1784502598, + null, + null, + null + ], + [ + 1784502599, + null, + null, + null + ], + [ + 1784502600, + null, + null, + null + ], + [ + 1784502601, + null, + null, + null + ], + [ + 1784502602, + null, + null, + null + ], + [ + 1784502603, + null, + null, + null + ], + [ + 1784502604, + null, + null, + null + ], + [ + 1784502605, + null, + null, + null + ], + [ + 1784502606, + null, + null, + null + ], + [ + 1784502607, + null, + null, + null + ], + [ + 1784502608, + null, + null, + null + ], + [ + 1784502609, + null, + null, + null + ], + [ + 1784502610, + null, + null, + null + ], + [ + 1784502611, + null, + null, + null + ], + [ + 1784502612, + null, + null, + null + ], + [ + 1784502613, + null, + null, + null + ], + [ + 1784502614, + null, + null, + null + ], + [ + 1784502615, + null, + null, + null + ], + [ + 1784502616, + null, + null, + null + ], + [ + 1784502617, + null, + null, + null + ], + [ + 1784502618, + null, + null, + null + ], + [ + 1784502619, + null, + null, + null + ], + [ + 1784502620, + null, + null, + null + ], + [ + 1784502621, + null, + null, + null + ], + [ + 1784502622, + null, + null, + null + ], + [ + 1784502623, + null, + null, + null + ], + [ + 1784502624, + null, + null, + null + ], + [ + 1784502625, + null, + null, + null + ], + [ + 1784502626, + null, + null, + null + ], + [ + 1784502627, + null, + null, + null + ], + [ + 1784502628, + null, + null, + null + ], + [ + 1784502629, + null, + null, + null + ], + [ + 1784502630, + null, + null, + null + ], + [ + 1784502631, + null, + null, + null + ], + [ + 1784502632, + null, + null, + null + ], + [ + 1784502633, + null, + null, + null + ], + [ + 1784502634, + null, + null, + null + ], + [ + 1784502635, + null, + null, + null + ], + [ + 1784502636, + null, + null, + null + ], + [ + 1784502637, + null, + null, + null + ], + [ + 1784502638, + null, + null, + null + ], + [ + 1784502639, + null, + null, + null + ], + [ + 1784502640, + null, + null, + null + ], + [ + 1784502641, + null, + null, + null + ], + [ + 1784502642, + null, + null, + null + ], + [ + 1784502643, + null, + null, + null + ], + [ + 1784502644, + null, + null, + null + ], + [ + 1784502645, + null, + null, + null + ], + [ + 1784502646, + null, + null, + null + ], + [ + 1784502647, + null, + null, + null + ], + [ + 1784502648, + null, + null, + null + ], + [ + 1784502649, + null, + null, + null + ], + [ + 1784502650, + null, + null, + null + ], + [ + 1784502651, + null, + null, + null + ], + [ + 1784502652, + null, + null, + null + ], + [ + 1784502653, + null, + null, + null + ], + [ + 1784502654, + null, + null, + null + ], + [ + 1784502655, + null, + null, + null + ], + [ + 1784502656, + null, + null, + null + ], + [ + 1784502658, + null, + null, + null + ], + [ + 1784502659, + null, + null, + null + ], + [ + 1784502660, + null, + null, + null + ], + [ + 1784502661, + null, + null, + null + ], + [ + 1784502662, + null, + null, + null + ], + [ + 1784502663, + null, + null, + null + ], + [ + 1784502664, + null, + null, + null + ], + [ + 1784502665, + null, + null, + null + ], + [ + 1784502666, + null, + null, + null + ], + [ + 1784502667, + null, + null, + null + ], + [ + 1784502668, + null, + null, + null + ], + [ + 1784502669, + null, + null, + null + ], + [ + 1784502670, + null, + null, + null + ], + [ + 1784502671, + null, + null, + null + ], + [ + 1784502672, + null, + null, + null + ], + [ + 1784502673, + null, + null, + null + ], + [ + 1784502674, + null, + null, + null + ], + [ + 1784502675, + null, + null, + null + ], + [ + 1784502676, + null, + null, + null + ], + [ + 1784502677, + null, + null, + null + ], + [ + 1784502678, + null, + null, + null + ], + [ + 1784502679, + null, + null, + null + ], + [ + 1784502680, + null, + null, + null + ], + [ + 1784502681, + null, + null, + null + ], + [ + 1784502682, + null, + null, + null + ], + [ + 1784502683, + null, + null, + null + ], + [ + 1784502684, + null, + null, + null + ], + [ + 1784502685, + null, + null, + null + ], + [ + 1784502686, + null, + null, + null + ], + [ + 1784502687, + null, + null, + null + ], + [ + 1784502688, + null, + null, + null + ], + [ + 1784502689, + null, + null, + null + ], + [ + 1784502690, + null, + null, + null + ], + [ + 1784502691, + null, + null, + null + ], + [ + 1784502692, + null, + null, + null + ], + [ + 1784502693, + null, + null, + null + ], + [ + 1784502694, + null, + null, + null + ], + [ + 1784502695, + null, + null, + null + ], + [ + 1784502696, + null, + null, + null + ], + [ + 1784502697, + null, + null, + null + ], + [ + 1784502698, + null, + null, + null + ], + [ + 1784502699, + null, + null, + null + ], + [ + 1784502700, + null, + null, + null + ], + [ + 1784502701, + null, + null, + null + ], + [ + 1784502702, + null, + null, + null + ], + [ + 1784502703, + null, + null, + null + ], + [ + 1784502704, + null, + null, + null + ], + [ + 1784502705, + null, + null, + null + ], + [ + 1784502706, + null, + null, + null + ], + [ + 1784502707, + null, + null, + null + ], + [ + 1784502708, + null, + null, + null + ], + [ + 1784502709, + null, + null, + null + ], + [ + 1784502710, + null, + null, + null + ], + [ + 1784502711, + null, + null, + null + ], + [ + 1784502712, + null, + null, + null + ], + [ + 1784502713, + null, + null, + null + ], + [ + 1784502714, + null, + null, + null + ], + [ + 1784502715, + null, + null, + null + ], + [ + 1784502716, + null, + null, + null + ], + [ + 1784502717, + null, + null, + null + ], + [ + 1784502718, + null, + null, + null + ], + [ + 1784502719, + null, + null, + null + ], + [ + 1784502720, + null, + null, + null + ], + [ + 1784502721, + null, + null, + null + ], + [ + 1784502722, + null, + null, + null + ], + [ + 1784502724, + null, + null, + null + ], + [ + 1784502725, + null, + null, + null + ], + [ + 1784502726, + null, + null, + null + ], + [ + 1784502727, + null, + null, + null + ], + [ + 1784502728, + null, + null, + null + ], + [ + 1784502729, + null, + null, + null + ], + [ + 1784502730, + null, + null, + null + ], + [ + 1784502731, + null, + null, + null + ], + [ + 1784502732, + null, + null, + null + ], + [ + 1784502733, + null, + null, + null + ], + [ + 1784502734, + null, + null, + null + ], + [ + 1784502735, + null, + null, + null + ], + [ + 1784502736, + null, + null, + null + ], + [ + 1784502737, + null, + null, + null + ], + [ + 1784502738, + null, + null, + null + ], + [ + 1784502739, + null, + null, + null + ], + [ + 1784502740, + null, + null, + null + ], + [ + 1784502741, + null, + null, + null + ], + [ + 1784502742, + null, + null, + null + ], + [ + 1784502743, + null, + null, + null + ], + [ + 1784502744, + null, + null, + null + ], + [ + 1784502745, + null, + null, + null + ], + [ + 1784502746, + null, + null, + null + ], + [ + 1784502747, + null, + null, + null + ], + [ + 1784502748, + null, + null, + null + ], + [ + 1784502749, + null, + null, + null + ], + [ + 1784502750, + null, + null, + null + ], + [ + 1784502751, + null, + null, + null + ], + [ + 1784502752, + null, + null, + null + ], + [ + 1784502753, + null, + null, + null + ], + [ + 1784502754, + null, + null, + null + ], + [ + 1784502755, + null, + null, + null + ], + [ + 1784502756, + null, + null, + null + ], + [ + 1784502757, + null, + null, + null + ], + [ + 1784502758, + null, + null, + null + ], + [ + 1784502759, + null, + null, + null + ], + [ + 1784502760, + null, + null, + null + ], + [ + 1784502761, + null, + null, + null + ], + [ + 1784502762, + null, + null, + null + ], + [ + 1784502763, + null, + null, + null + ], + [ + 1784502764, + null, + null, + null + ], + [ + 1784502765, + null, + null, + null + ], + [ + 1784502766, + null, + null, + null + ], + [ + 1784502767, + null, + null, + null + ], + [ + 1784502768, + null, + null, + null + ], + [ + 1784502769, + null, + null, + null + ], + [ + 1784502770, + null, + null, + null + ], + [ + 1784502771, + null, + null, + null + ], + [ + 1784502772, + null, + null, + null + ], + [ + 1784502773, + null, + null, + null + ], + [ + 1784502774, + null, + null, + null + ], + [ + 1784502775, + null, + null, + null + ], + [ + 1784502776, + null, + null, + null + ], + [ + 1784502777, + null, + null, + null + ], + [ + 1784502778, + null, + null, + null + ], + [ + 1784502779, + null, + null, + null + ], + [ + 1784502780, + null, + null, + null + ], + [ + 1784502781, + null, + null, + null + ], + [ + 1784502782, + null, + null, + null + ], + [ + 1784502783, + null, + null, + null + ], + [ + 1784502784, + null, + null, + null + ], + [ + 1784502785, + null, + null, + null + ], + [ + 1784502786, + null, + null, + null + ], + [ + 1784502787, + null, + null, + null + ], + [ + 1784502788, + null, + null, + null + ], + [ + 1784502790, + null, + null, + null + ], + [ + 1784502791, + null, + null, + null + ], + [ + 1784502792, + null, + null, + null + ], + [ + 1784502793, + null, + null, + null + ], + [ + 1784502794, + null, + null, + null + ], + [ + 1784502795, + null, + null, + null + ], + [ + 1784502796, + null, + null, + null + ], + [ + 1784502797, + null, + null, + null + ], + [ + 1784502798, + null, + null, + null + ], + [ + 1784502799, + null, + null, + null + ], + [ + 1784502800, + null, + null, + null + ], + [ + 1784502801, + null, + null, + null + ], + [ + 1784502802, + null, + null, + null + ], + [ + 1784502803, + null, + null, + null + ], + [ + 1784502804, + null, + null, + null + ], + [ + 1784502805, + null, + null, + null + ], + [ + 1784502806, + null, + null, + null + ], + [ + 1784502807, + null, + null, + null + ], + [ + 1784502808, + null, + null, + null + ], + [ + 1784502809, + null, + null, + null + ], + [ + 1784502810, + null, + null, + null + ], + [ + 1784502811, + null, + null, + null + ], + [ + 1784502812, + null, + null, + null + ], + [ + 1784502813, + null, + null, + null + ], + [ + 1784502814, + null, + null, + null + ], + [ + 1784502815, + null, + null, + null + ], + [ + 1784502816, + null, + null, + null + ], + [ + 1784502817, + null, + null, + null + ], + [ + 1784502818, + null, + null, + null + ], + [ + 1784502819, + null, + null, + null + ], + [ + 1784502820, + null, + null, + null + ], + [ + 1784502821, + null, + null, + null + ], + [ + 1784502822, + null, + null, + null + ], + [ + 1784502823, + null, + null, + null + ], + [ + 1784502824, + null, + null, + null + ], + [ + 1784502825, + null, + null, + null + ], + [ + 1784502826, + null, + null, + null + ], + [ + 1784502827, + null, + null, + null + ], + [ + 1784502828, + null, + null, + null + ], + [ + 1784502829, + null, + null, + null + ], + [ + 1784502830, + null, + null, + null + ], + [ + 1784502831, + null, + null, + null + ], + [ + 1784502832, + null, + null, + null + ], + [ + 1784502833, + null, + null, + null + ], + [ + 1784502834, + null, + null, + null + ], + [ + 1784502835, + null, + null, + null + ], + [ + 1784502836, + null, + null, + null + ], + [ + 1784502837, + null, + null, + null + ], + [ + 1784502838, + null, + null, + null + ], + [ + 1784502839, + null, + null, + null + ], + [ + 1784502840, + null, + null, + null + ], + [ + 1784502841, + null, + null, + null + ], + [ + 1784502842, + null, + null, + null + ], + [ + 1784502843, + null, + null, + null + ], + [ + 1784502844, + null, + null, + null + ], + [ + 1784502845, + null, + null, + null + ], + [ + 1784502846, + null, + null, + null + ], + [ + 1784502847, + null, + null, + null + ], + [ + 1784502848, + null, + null, + null + ], + [ + 1784502849, + null, + null, + null + ], + [ + 1784502850, + null, + null, + null + ], + [ + 1784502851, + null, + null, + null + ], + [ + 1784502852, + null, + null, + null + ], + [ + 1784502853, + null, + null, + null + ], + [ + 1784502854, + null, + null, + null + ], + [ + 1784502855, + null, + null, + null + ], + [ + 1784502857, + null, + null, + null + ], + [ + 1784502858, + null, + null, + null + ], + [ + 1784502859, + null, + null, + null + ], + [ + 1784502860, + null, + null, + null + ], + [ + 1784502861, + null, + null, + null + ], + [ + 1784502862, + null, + null, + null + ], + [ + 1784502863, + null, + null, + null + ], + [ + 1784502864, + null, + null, + null + ], + [ + 1784502865, + null, + null, + null + ], + [ + 1784502866, + null, + null, + null + ], + [ + 1784502867, + null, + null, + null + ], + [ + 1784502868, + null, + null, + null + ], + [ + 1784502869, + null, + null, + null + ], + [ + 1784502870, + null, + null, + null + ], + [ + 1784502871, + null, + null, + null + ], + [ + 1784502872, + null, + null, + null + ], + [ + 1784502873, + null, + null, + null + ], + [ + 1784502874, + null, + null, + null + ], + [ + 1784502875, + null, + null, + null + ], + [ + 1784502876, + null, + null, + null + ], + [ + 1784502877, + null, + null, + null + ], + [ + 1784502878, + null, + null, + null + ], + [ + 1784502879, + null, + null, + null + ], + [ + 1784502880, + null, + null, + null + ], + [ + 1784502881, + null, + null, + null + ], + [ + 1784502882, + null, + null, + null + ], + [ + 1784502883, + null, + null, + null + ], + [ + 1784502884, + null, + null, + null + ], + [ + 1784502885, + null, + null, + null + ], + [ + 1784502886, + null, + null, + null + ], + [ + 1784502887, + null, + null, + null + ], + [ + 1784502888, + null, + null, + null + ], + [ + 1784502889, + null, + null, + null + ], + [ + 1784502890, + null, + null, + null + ], + [ + 1784502891, + null, + null, + null + ], + [ + 1784502892, + null, + null, + null + ], + [ + 1784502893, + null, + null, + null + ], + [ + 1784502894, + null, + null, + null + ], + [ + 1784502895, + null, + null, + null + ], + [ + 1784502896, + null, + null, + null + ], + [ + 1784502897, + null, + null, + null + ], + [ + 1784502898, + null, + null, + null + ], + [ + 1784502899, + null, + null, + null + ], + [ + 1784502900, + null, + null, + null + ], + [ + 1784502901, + null, + null, + null + ], + [ + 1784502902, + null, + null, + null + ], + [ + 1784502903, + null, + null, + null + ], + [ + 1784502904, + null, + null, + null + ], + [ + 1784502905, + null, + null, + null + ], + [ + 1784502906, + null, + null, + null + ], + [ + 1784502907, + null, + null, + null + ], + [ + 1784502908, + null, + null, + null + ], + [ + 1784502909, + null, + null, + null + ], + [ + 1784502910, + null, + null, + null + ], + [ + 1784502911, + null, + null, + null + ], + [ + 1784502912, + null, + null, + null + ], + [ + 1784502913, + null, + null, + null + ], + [ + 1784502914, + null, + null, + null + ], + [ + 1784502915, + null, + null, + null + ], + [ + 1784502916, + null, + null, + null + ], + [ + 1784502917, + null, + null, + null + ], + [ + 1784502918, + null, + null, + null + ], + [ + 1784502919, + null, + null, + null + ], + [ + 1784502921, + null, + null, + null + ], + [ + 1784502922, + null, + null, + null + ], + [ + 1784502923, + null, + null, + null + ], + [ + 1784502924, + null, + null, + null + ], + [ + 1784502925, + null, + null, + null + ], + [ + 1784502926, + null, + null, + null + ], + [ + 1784502927, + null, + null, + null + ], + [ + 1784502928, + null, + null, + null + ], + [ + 1784502929, + null, + null, + null + ], + [ + 1784502930, + null, + null, + null + ], + [ + 1784502931, + null, + null, + null + ], + [ + 1784502932, + null, + null, + null + ], + [ + 1784502933, + null, + null, + null + ], + [ + 1784502934, + null, + null, + null + ], + [ + 1784502935, + null, + null, + null + ], + [ + 1784502936, + null, + null, + null + ], + [ + 1784502937, + null, + null, + null + ], + [ + 1784502938, + null, + null, + null + ], + [ + 1784502939, + null, + null, + null + ], + [ + 1784502940, + null, + null, + null + ], + [ + 1784502941, + null, + null, + null + ], + [ + 1784502942, + null, + null, + null + ], + [ + 1784502943, + null, + null, + null + ], + [ + 1784502944, + null, + null, + null + ], + [ + 1784502945, + null, + null, + null + ], + [ + 1784502946, + null, + null, + null + ], + [ + 1784502947, + null, + null, + null + ], + [ + 1784502948, + null, + null, + null + ], + [ + 1784502949, + null, + null, + null + ], + [ + 1784502950, + null, + null, + null + ], + [ + 1784502951, + null, + null, + null + ], + [ + 1784502952, + null, + null, + null + ], + [ + 1784502953, + null, + null, + null + ], + [ + 1784502954, + null, + null, + null + ], + [ + 1784502955, + null, + null, + null + ], + [ + 1784502956, + null, + null, + null + ], + [ + 1784502957, + null, + null, + null + ], + [ + 1784502958, + null, + null, + null + ], + [ + 1784502959, + null, + null, + null + ], + [ + 1784502960, + null, + null, + null + ], + [ + 1784502961, + null, + null, + null + ], + [ + 1784502962, + null, + null, + null + ], + [ + 1784502963, + null, + null, + null + ], + [ + 1784502964, + null, + null, + null + ], + [ + 1784502965, + null, + null, + null + ], + [ + 1784502966, + null, + null, + null + ], + [ + 1784502967, + null, + null, + null + ], + [ + 1784502968, + null, + null, + null + ], + [ + 1784502969, + null, + null, + null + ], + [ + 1784502970, + null, + null, + null + ], + [ + 1784502971, + null, + null, + null + ], + [ + 1784502972, + null, + null, + null + ], + [ + 1784502973, + null, + null, + null + ], + [ + 1784502974, + null, + null, + null + ], + [ + 1784502975, + null, + null, + null + ], + [ + 1784502976, + null, + null, + null + ], + [ + 1784502977, + null, + null, + null + ], + [ + 1784502978, + null, + null, + null + ], + [ + 1784502979, + null, + null, + null + ], + [ + 1784502980, + null, + null, + null + ], + [ + 1784502981, + null, + null, + null + ], + [ + 1784502983, + null, + null, + null + ], + [ + 1784502984, + null, + null, + null + ], + [ + 1784502985, + null, + null, + null + ], + [ + 1784502986, + null, + null, + null + ], + [ + 1784502987, + null, + null, + null + ], + [ + 1784502988, + null, + null, + null + ], + [ + 1784502989, + null, + null, + null + ], + [ + 1784502990, + null, + null, + null + ], + [ + 1784502991, + null, + null, + null + ], + [ + 1784502992, + null, + null, + null + ], + [ + 1784502993, + null, + null, + null + ], + [ + 1784502994, + null, + null, + null + ], + [ + 1784502995, + null, + null, + null + ], + [ + 1784502996, + null, + null, + null + ], + [ + 1784502997, + null, + null, + null + ], + [ + 1784502998, + null, + null, + null + ], + [ + 1784502999, + null, + null, + null + ], + [ + 1784503000, + null, + null, + null + ], + [ + 1784503001, + null, + null, + null + ], + [ + 1784503002, + null, + null, + null + ], + [ + 1784503003, + null, + null, + null + ], + [ + 1784503004, + null, + null, + null + ], + [ + 1784503005, + null, + null, + null + ], + [ + 1784503006, + null, + null, + null + ], + [ + 1784503007, + null, + null, + null + ], + [ + 1784503008, + null, + null, + null + ], + [ + 1784503009, + null, + null, + null + ], + [ + 1784503010, + null, + null, + null + ], + [ + 1784503011, + null, + null, + null + ], + [ + 1784503012, + null, + null, + null + ], + [ + 1784503013, + null, + null, + null + ], + [ + 1784503014, + null, + null, + null + ], + [ + 1784503015, + null, + null, + null + ], + [ + 1784503016, + null, + null, + null + ], + [ + 1784503017, + null, + null, + null + ], + [ + 1784503018, + null, + null, + null + ], + [ + 1784503019, + null, + null, + null + ], + [ + 1784503020, + null, + null, + null + ], + [ + 1784503021, + null, + null, + null + ], + [ + 1784503022, + null, + null, + null + ], + [ + 1784503023, + null, + null, + null + ], + [ + 1784503024, + null, + null, + null + ], + [ + 1784503025, + null, + null, + null + ], + [ + 1784503026, + null, + null, + null + ], + [ + 1784503027, + null, + null, + null + ], + [ + 1784503028, + null, + null, + null + ], + [ + 1784503029, + null, + null, + null + ], + [ + 1784503030, + null, + null, + null + ], + [ + 1784503031, + null, + null, + null + ], + [ + 1784503032, + null, + null, + null + ], + [ + 1784503033, + null, + null, + null + ], + [ + 1784503034, + null, + null, + null + ], + [ + 1784503035, + null, + null, + null + ], + [ + 1784503036, + null, + null, + null + ], + [ + 1784503037, + null, + null, + null + ], + [ + 1784503038, + null, + null, + null + ], + [ + 1784503039, + null, + null, + null + ], + [ + 1784503040, + null, + null, + null + ], + [ + 1784503041, + null, + null, + null + ], + [ + 1784503042, + null, + null, + null + ], + [ + 1784503043, + null, + null, + null + ], + [ + 1784503044, + null, + null, + null + ], + [ + 1784503046, + null, + null, + null + ], + [ + 1784503047, + null, + null, + null + ], + [ + 1784503048, + null, + null, + null + ], + [ + 1784503049, + null, + null, + null + ], + [ + 1784503050, + null, + null, + null + ], + [ + 1784503051, + null, + null, + null + ], + [ + 1784503052, + null, + null, + null + ], + [ + 1784503053, + null, + null, + null + ], + [ + 1784503054, + null, + null, + null + ], + [ + 1784503055, + null, + null, + null + ], + [ + 1784503056, + null, + null, + null + ], + [ + 1784503057, + null, + null, + null + ], + [ + 1784503058, + null, + null, + null + ], + [ + 1784503059, + null, + null, + null + ], + [ + 1784503060, + null, + null, + null + ], + [ + 1784503061, + null, + null, + null + ], + [ + 1784503062, + null, + null, + null + ], + [ + 1784503063, + null, + null, + null + ], + [ + 1784503064, + null, + null, + null + ], + [ + 1784503065, + null, + null, + null + ], + [ + 1784503066, + null, + null, + null + ], + [ + 1784503067, + null, + null, + null + ], + [ + 1784503068, + null, + null, + null + ], + [ + 1784503069, + null, + null, + null + ], + [ + 1784503070, + null, + null, + null + ], + [ + 1784503071, + null, + null, + null + ], + [ + 1784503072, + null, + null, + null + ], + [ + 1784503073, + null, + null, + null + ], + [ + 1784503074, + null, + null, + null + ], + [ + 1784503075, + null, + null, + null + ], + [ + 1784503076, + null, + null, + null + ], + [ + 1784503077, + null, + null, + null + ], + [ + 1784503078, + null, + null, + null + ], + [ + 1784503079, + null, + null, + null + ], + [ + 1784503080, + null, + null, + null + ], + [ + 1784503081, + null, + null, + null + ], + [ + 1784503082, + null, + null, + null + ], + [ + 1784503083, + null, + null, + null + ], + [ + 1784503084, + null, + null, + null + ], + [ + 1784503085, + null, + null, + null + ], + [ + 1784503086, + null, + null, + null + ], + [ + 1784503087, + null, + null, + null + ], + [ + 1784503088, + null, + null, + null + ], + [ + 1784503089, + null, + null, + null + ], + [ + 1784503090, + null, + null, + null + ], + [ + 1784503091, + null, + null, + null + ], + [ + 1784503092, + null, + null, + null + ], + [ + 1784503093, + null, + null, + null + ], + [ + 1784503094, + null, + null, + null + ], + [ + 1784503095, + null, + null, + null + ], + [ + 1784503096, + null, + null, + null + ], + [ + 1784503097, + null, + null, + null + ], + [ + 1784503098, + null, + null, + null + ], + [ + 1784503099, + null, + null, + null + ], + [ + 1784503100, + null, + null, + null + ], + [ + 1784503101, + null, + null, + null + ], + [ + 1784503102, + null, + null, + null + ], + [ + 1784503103, + null, + null, + null + ], + [ + 1784503104, + null, + null, + null + ], + [ + 1784503105, + null, + null, + null + ], + [ + 1784503106, + null, + null, + null + ], + [ + 1784503108, + null, + null, + null + ], + [ + 1784503109, + null, + null, + null + ], + [ + 1784503110, + null, + null, + null + ], + [ + 1784503111, + null, + null, + null + ], + [ + 1784503112, + null, + null, + null + ], + [ + 1784503113, + null, + null, + null + ], + [ + 1784503114, + null, + null, + null + ], + [ + 1784503115, + null, + null, + null + ], + [ + 1784503116, + null, + null, + null + ], + [ + 1784503117, + null, + null, + null + ], + [ + 1784503118, + null, + null, + null + ], + [ + 1784503119, + null, + null, + null + ], + [ + 1784503120, + null, + null, + null + ], + [ + 1784503121, + null, + null, + null + ], + [ + 1784503122, + null, + null, + null + ], + [ + 1784503123, + null, + null, + null + ], + [ + 1784503124, + null, + null, + null + ], + [ + 1784503125, + null, + null, + null + ], + [ + 1784503126, + null, + null, + null + ], + [ + 1784503127, + null, + null, + null + ], + [ + 1784503128, + null, + null, + null + ], + [ + 1784503129, + null, + null, + null + ], + [ + 1784503130, + null, + null, + null + ], + [ + 1784503131, + null, + null, + null + ], + [ + 1784503132, + null, + null, + null + ], + [ + 1784503133, + null, + null, + null + ], + [ + 1784503134, + null, + null, + null + ], + [ + 1784503135, + null, + null, + null + ], + [ + 1784503136, + null, + null, + null + ], + [ + 1784503137, + null, + null, + null + ], + [ + 1784503138, + null, + null, + null + ], + [ + 1784503139, + null, + null, + null + ], + [ + 1784503140, + null, + null, + null + ], + [ + 1784503141, + null, + null, + null + ], + [ + 1784503142, + null, + null, + null + ], + [ + 1784503143, + null, + null, + null + ], + [ + 1784503144, + null, + null, + null + ], + [ + 1784503145, + null, + null, + null + ], + [ + 1784503146, + null, + null, + null + ], + [ + 1784503147, + null, + null, + null + ], + [ + 1784503148, + null, + null, + null + ], + [ + 1784503149, + null, + null, + null + ], + [ + 1784503150, + null, + null, + null + ], + [ + 1784503151, + null, + null, + null + ], + [ + 1784503152, + null, + null, + null + ], + [ + 1784503153, + null, + null, + null + ], + [ + 1784503154, + null, + null, + null + ], + [ + 1784503155, + null, + null, + null + ], + [ + 1784503156, + null, + null, + null + ], + [ + 1784503157, + null, + null, + null + ], + [ + 1784503158, + null, + null, + null + ], + [ + 1784503159, + null, + null, + null + ], + [ + 1784503160, + null, + null, + null + ], + [ + 1784503161, + null, + null, + null + ], + [ + 1784503162, + null, + null, + null + ], + [ + 1784503163, + null, + null, + null + ], + [ + 1784503164, + null, + null, + null + ], + [ + 1784503165, + null, + null, + null + ], + [ + 1784503166, + null, + null, + null + ], + [ + 1784503167, + null, + null, + null + ], + [ + 1784503168, + null, + null, + null + ], + [ + 1784503169, + null, + null, + null + ], + [ + 1784503171, + null, + null, + null + ], + [ + 1784503172, + null, + null, + null + ], + [ + 1784503173, + null, + null, + null + ], + [ + 1784503174, + null, + null, + null + ], + [ + 1784503175, + null, + null, + null + ], + [ + 1784503176, + null, + null, + null + ], + [ + 1784503177, + null, + null, + null + ], + [ + 1784503178, + null, + null, + null + ], + [ + 1784503179, + null, + null, + null + ], + [ + 1784503180, + null, + null, + null + ], + [ + 1784503181, + null, + null, + null + ], + [ + 1784503182, + null, + null, + null + ], + [ + 1784503183, + null, + null, + null + ], + [ + 1784503184, + null, + null, + null + ], + [ + 1784503185, + null, + null, + null + ], + [ + 1784503186, + null, + null, + null + ], + [ + 1784503187, + null, + null, + null + ], + [ + 1784503188, + null, + null, + null + ], + [ + 1784503189, + null, + null, + null + ], + [ + 1784503190, + null, + null, + null + ], + [ + 1784503191, + null, + null, + null + ], + [ + 1784503192, + null, + null, + null + ], + [ + 1784503193, + null, + null, + null + ], + [ + 1784503194, + null, + null, + null + ], + [ + 1784503195, + null, + null, + null + ], + [ + 1784503196, + null, + null, + null + ], + [ + 1784503197, + null, + null, + null + ], + [ + 1784503198, + null, + null, + null + ], + [ + 1784503199, + null, + null, + null + ], + [ + 1784503200, + null, + null, + null + ], + [ + 1784503201, + null, + null, + null + ], + [ + 1784503202, + null, + null, + null + ], + [ + 1784503203, + null, + null, + null + ], + [ + 1784503204, + null, + null, + null + ], + [ + 1784503205, + null, + null, + null + ], + [ + 1784503206, + null, + null, + null + ], + [ + 1784503207, + null, + null, + null + ], + [ + 1784503208, + null, + null, + null + ], + [ + 1784503209, + null, + null, + null + ], + [ + 1784503210, + null, + null, + null + ], + [ + 1784503211, + null, + null, + null + ], + [ + 1784503212, + null, + null, + null + ], + [ + 1784503213, + null, + null, + null + ], + [ + 1784503214, + null, + null, + null + ], + [ + 1784503215, + null, + null, + null + ], + [ + 1784503216, + null, + null, + null + ], + [ + 1784503217, + null, + null, + null + ], + [ + 1784503218, + null, + null, + null + ], + [ + 1784503219, + null, + null, + null + ], + [ + 1784503220, + null, + null, + null + ], + [ + 1784503221, + null, + null, + null + ], + [ + 1784503222, + null, + null, + null + ], + [ + 1784503223, + null, + null, + null + ], + [ + 1784503224, + null, + null, + null + ], + [ + 1784503225, + null, + null, + null + ], + [ + 1784503226, + null, + null, + null + ], + [ + 1784503227, + null, + null, + null + ], + [ + 1784503229, + null, + null, + null + ], + [ + 1784503230, + null, + null, + null + ], + [ + 1784503231, + null, + null, + null + ], + [ + 1784503232, + null, + null, + null + ], + [ + 1784503233, + null, + null, + null + ], + [ + 1784503234, + null, + null, + null + ], + [ + 1784503235, + null, + null, + null + ], + [ + 1784503236, + null, + null, + null + ], + [ + 1784503237, + null, + null, + null + ], + [ + 1784503238, + null, + null, + null + ], + [ + 1784503239, + null, + null, + null + ], + [ + 1784503240, + null, + null, + null + ], + [ + 1784503241, + null, + null, + null + ], + [ + 1784503242, + null, + null, + null + ], + [ + 1784503243, + null, + null, + null + ], + [ + 1784503244, + null, + null, + null + ], + [ + 1784503245, + null, + null, + null + ], + [ + 1784503246, + null, + null, + null + ], + [ + 1784503247, + null, + null, + null + ], + [ + 1784503248, + null, + null, + null + ], + [ + 1784503249, + null, + null, + null + ], + [ + 1784503250, + null, + null, + null + ], + [ + 1784503251, + null, + null, + null + ], + [ + 1784503252, + null, + null, + null + ], + [ + 1784503253, + null, + null, + null + ], + [ + 1784503254, + null, + null, + null + ], + [ + 1784503255, + null, + null, + null + ], + [ + 1784503256, + null, + null, + null + ], + [ + 1784503257, + null, + null, + null + ], + [ + 1784503258, + null, + null, + null + ], + [ + 1784503259, + null, + null, + null + ], + [ + 1784503260, + null, + null, + null + ], + [ + 1784503261, + null, + null, + null + ], + [ + 1784503262, + null, + null, + null + ], + [ + 1784503263, + null, + null, + null + ], + [ + 1784503264, + null, + null, + null + ], + [ + 1784503265, + null, + null, + null + ], + [ + 1784503266, + null, + null, + null + ], + [ + 1784503267, + null, + null, + null + ], + [ + 1784503268, + null, + null, + null + ], + [ + 1784503269, + null, + null, + null + ], + [ + 1784503270, + null, + null, + null + ], + [ + 1784503271, + null, + null, + null + ], + [ + 1784503272, + null, + null, + null + ], + [ + 1784503273, + null, + null, + null + ], + [ + 1784503274, + null, + null, + null + ], + [ + 1784503275, + null, + null, + null + ], + [ + 1784503276, + null, + null, + null + ], + [ + 1784503277, + null, + null, + null + ], + [ + 1784503278, + null, + null, + null + ], + [ + 1784503279, + null, + null, + null + ], + [ + 1784503280, + null, + null, + null + ], + [ + 1784503281, + null, + null, + null + ], + [ + 1784503282, + null, + null, + null + ], + [ + 1784503283, + null, + null, + null + ], + [ + 1784503284, + null, + null, + null + ], + [ + 1784503285, + null, + null, + null + ], + [ + 1784503286, + null, + null, + null + ], + [ + 1784503287, + null, + null, + null + ], + [ + 1784503288, + null, + null, + null + ], + [ + 1784503289, + null, + null, + null + ], + [ + 1784503290, + null, + null, + null + ], + [ + 1784503292, + null, + null, + null + ], + [ + 1784503293, + null, + null, + null + ], + [ + 1784503294, + null, + null, + null + ], + [ + 1784503295, + null, + null, + null + ], + [ + 1784503296, + null, + null, + null + ], + [ + 1784503297, + null, + null, + null + ], + [ + 1784503298, + null, + null, + null + ], + [ + 1784503299, + null, + null, + null + ], + [ + 1784503300, + null, + null, + null + ], + [ + 1784503301, + null, + null, + null + ], + [ + 1784503302, + null, + null, + null + ], + [ + 1784503303, + null, + null, + null + ], + [ + 1784503304, + null, + null, + null + ], + [ + 1784503305, + null, + null, + null + ], + [ + 1784503306, + null, + null, + null + ], + [ + 1784503307, + null, + null, + null + ], + [ + 1784503308, + null, + null, + null + ], + [ + 1784503309, + null, + null, + null + ], + [ + 1784503310, + null, + null, + null + ], + [ + 1784503311, + null, + null, + null + ], + [ + 1784503312, + null, + null, + null + ], + [ + 1784503313, + null, + null, + null + ], + [ + 1784503314, + null, + null, + null + ], + [ + 1784503315, + null, + null, + null + ], + [ + 1784503316, + null, + null, + null + ], + [ + 1784503317, + null, + null, + null + ], + [ + 1784503318, + null, + null, + null + ], + [ + 1784503319, + null, + null, + null + ], + [ + 1784503320, + null, + null, + null + ], + [ + 1784503321, + null, + null, + null + ], + [ + 1784503322, + null, + null, + null + ], + [ + 1784503323, + null, + null, + null + ], + [ + 1784503324, + null, + null, + null + ], + [ + 1784503325, + null, + null, + null + ], + [ + 1784503326, + null, + null, + null + ], + [ + 1784503327, + null, + null, + null + ], + [ + 1784503328, + null, + null, + null + ], + [ + 1784503329, + null, + null, + null + ], + [ + 1784503330, + null, + null, + null + ], + [ + 1784503331, + null, + null, + null + ], + [ + 1784503332, + null, + null, + null + ], + [ + 1784503333, + null, + null, + null + ], + [ + 1784503334, + null, + null, + null + ], + [ + 1784503335, + null, + null, + null + ], + [ + 1784503336, + null, + null, + null + ], + [ + 1784503337, + null, + null, + null + ], + [ + 1784503338, + null, + null, + null + ], + [ + 1784503339, + null, + null, + null + ], + [ + 1784503340, + null, + null, + null + ], + [ + 1784503341, + null, + null, + null + ], + [ + 1784503342, + null, + null, + null + ], + [ + 1784503343, + null, + null, + null + ], + [ + 1784503344, + null, + null, + null + ], + [ + 1784503345, + null, + null, + null + ], + [ + 1784503346, + null, + null, + null + ], + [ + 1784503347, + null, + null, + null + ], + [ + 1784503349, + null, + null, + null + ], + [ + 1784503350, + null, + null, + null + ], + [ + 1784503351, + null, + null, + null + ], + [ + 1784503352, + null, + null, + null + ], + [ + 1784503353, + null, + null, + null + ], + [ + 1784503354, + null, + null, + null + ], + [ + 1784503355, + null, + null, + null + ], + [ + 1784503356, + null, + null, + null + ], + [ + 1784503357, + null, + null, + null + ], + [ + 1784503358, + null, + null, + null + ], + [ + 1784503359, + null, + null, + null + ], + [ + 1784503360, + null, + null, + null + ], + [ + 1784503361, + null, + null, + null + ], + [ + 1784503362, + null, + null, + null + ], + [ + 1784503363, + null, + null, + null + ], + [ + 1784503364, + null, + null, + null + ], + [ + 1784503365, + null, + null, + null + ], + [ + 1784503366, + null, + null, + null + ], + [ + 1784503367, + null, + null, + null + ], + [ + 1784503368, + null, + null, + null + ], + [ + 1784503369, + null, + null, + null + ], + [ + 1784503370, + null, + null, + null + ], + [ + 1784503371, + null, + null, + null + ], + [ + 1784503372, + null, + null, + null + ], + [ + 1784503373, + null, + null, + null + ], + [ + 1784503374, + null, + null, + null + ], + [ + 1784503375, + null, + null, + null + ], + [ + 1784503376, + null, + null, + null + ], + [ + 1784503377, + null, + null, + null + ], + [ + 1784503378, + null, + null, + null + ], + [ + 1784503379, + null, + null, + null + ], + [ + 1784503380, + null, + null, + null + ], + [ + 1784503381, + null, + null, + null + ], + [ + 1784503382, + null, + null, + null + ], + [ + 1784503383, + null, + null, + null + ], + [ + 1784503384, + null, + null, + null + ], + [ + 1784503385, + null, + null, + null + ], + [ + 1784503386, + null, + null, + null + ], + [ + 1784503387, + null, + null, + null + ], + [ + 1784503388, + null, + null, + null + ], + [ + 1784503389, + null, + null, + null + ], + [ + 1784503390, + null, + null, + null + ], + [ + 1784503391, + null, + null, + null + ], + [ + 1784503392, + null, + null, + null + ], + [ + 1784503393, + null, + null, + null + ], + [ + 1784503394, + null, + null, + null + ], + [ + 1784503395, + null, + null, + null + ], + [ + 1784503396, + null, + null, + null + ], + [ + 1784503397, + null, + null, + null + ], + [ + 1784503398, + null, + null, + null + ], + [ + 1784503399, + null, + null, + null + ], + [ + 1784503400, + null, + null, + null + ], + [ + 1784503401, + null, + null, + null + ], + [ + 1784503402, + null, + null, + null + ], + [ + 1784503403, + null, + null, + null + ], + [ + 1784503404, + null, + null, + null + ], + [ + 1784503405, + null, + null, + null + ], + [ + 1784503406, + null, + null, + null + ], + [ + 1784503407, + null, + null, + null + ], + [ + 1784503408, + null, + null, + null + ], + [ + 1784503409, + null, + null, + null + ], + [ + 1784503410, + null, + null, + null + ], + [ + 1784503411, + null, + null, + null + ], + [ + 1784503413, + null, + null, + null + ], + [ + 1784503414, + null, + null, + null + ], + [ + 1784503415, + null, + null, + null + ], + [ + 1784503416, + null, + null, + null + ], + [ + 1784503417, + null, + null, + null + ], + [ + 1784503418, + null, + null, + null + ], + [ + 1784503419, + null, + null, + null + ], + [ + 1784503420, + null, + null, + null + ], + [ + 1784503421, + null, + null, + null + ], + [ + 1784503422, + null, + null, + null + ], + [ + 1784503423, + null, + null, + null + ], + [ + 1784503424, + null, + null, + null + ], + [ + 1784503425, + null, + null, + null + ], + [ + 1784503426, + null, + null, + null + ], + [ + 1784503427, + null, + null, + null + ], + [ + 1784503428, + null, + null, + null + ], + [ + 1784503429, + null, + null, + null + ], + [ + 1784503430, + null, + null, + null + ], + [ + 1784503431, + null, + null, + null + ], + [ + 1784503432, + null, + null, + null + ], + [ + 1784503433, + null, + null, + null + ], + [ + 1784503434, + null, + null, + null + ], + [ + 1784503435, + null, + null, + null + ], + [ + 1784503436, + null, + null, + null + ], + [ + 1784503437, + null, + null, + null + ], + [ + 1784503438, + null, + null, + null + ], + [ + 1784503439, + null, + null, + null + ], + [ + 1784503440, + null, + null, + null + ], + [ + 1784503441, + null, + null, + null + ], + [ + 1784503442, + null, + null, + null + ], + [ + 1784503443, + null, + null, + null + ], + [ + 1784503444, + null, + null, + null + ], + [ + 1784503445, + null, + null, + null + ], + [ + 1784503446, + null, + null, + null + ], + [ + 1784503447, + null, + null, + null + ], + [ + 1784503448, + null, + null, + null + ], + [ + 1784503449, + null, + null, + null + ], + [ + 1784503450, + null, + null, + null + ], + [ + 1784503451, + null, + null, + null + ], + [ + 1784503452, + null, + null, + null + ], + [ + 1784503453, + null, + null, + null + ], + [ + 1784503454, + null, + null, + null + ], + [ + 1784503455, + null, + null, + null + ], + [ + 1784503456, + null, + null, + null + ], + [ + 1784503457, + null, + null, + null + ], + [ + 1784503458, + null, + null, + null + ], + [ + 1784503459, + null, + null, + null + ], + [ + 1784503460, + null, + null, + null + ], + [ + 1784503461, + null, + null, + null + ], + [ + 1784503462, + null, + null, + null + ], + [ + 1784503463, + null, + null, + null + ], + [ + 1784503464, + null, + null, + null + ], + [ + 1784503465, + null, + null, + null + ], + [ + 1784503466, + null, + null, + null + ], + [ + 1784503467, + null, + null, + null + ], + [ + 1784503468, + null, + null, + null + ], + [ + 1784503469, + null, + null, + null + ], + [ + 1784503470, + null, + null, + null + ], + [ + 1784503471, + null, + null, + null + ], + [ + 1784503472, + null, + null, + null + ], + [ + 1784503473, + null, + null, + null + ], + [ + 1784503475, + null, + null, + null + ], + [ + 1784503476, + null, + null, + null + ], + [ + 1784503477, + null, + null, + null + ], + [ + 1784503478, + null, + null, + null + ], + [ + 1784503479, + null, + null, + null + ], + [ + 1784503480, + null, + null, + null + ], + [ + 1784503481, + null, + null, + null + ], + [ + 1784503482, + null, + null, + null + ], + [ + 1784503483, + null, + null, + null + ], + [ + 1784503484, + null, + null, + null + ], + [ + 1784503485, + null, + null, + null + ], + [ + 1784503486, + null, + null, + null + ], + [ + 1784503487, + null, + null, + null + ], + [ + 1784503488, + null, + null, + null + ], + [ + 1784503489, + null, + null, + null + ], + [ + 1784503490, + null, + null, + null + ], + [ + 1784503491, + null, + null, + null + ], + [ + 1784503492, + null, + null, + null + ], + [ + 1784503493, + null, + null, + null + ], + [ + 1784503494, + null, + null, + null + ], + [ + 1784503495, + null, + null, + null + ], + [ + 1784503496, + null, + null, + null + ], + [ + 1784503497, + null, + null, + null + ], + [ + 1784503498, + null, + null, + null + ], + [ + 1784503499, + null, + null, + null + ], + [ + 1784503500, + null, + null, + null + ], + [ + 1784503501, + null, + null, + null + ], + [ + 1784503502, + null, + null, + null + ], + [ + 1784503503, + null, + null, + null + ], + [ + 1784503504, + null, + null, + null + ], + [ + 1784503505, + null, + null, + null + ], + [ + 1784503506, + null, + null, + null + ], + [ + 1784503507, + null, + null, + null + ], + [ + 1784503508, + null, + null, + null + ], + [ + 1784503509, + null, + null, + null + ], + [ + 1784503510, + null, + null, + null + ], + [ + 1784503511, + null, + null, + null + ], + [ + 1784503512, + null, + null, + null + ], + [ + 1784503513, + null, + null, + null + ], + [ + 1784503514, + null, + null, + null + ], + [ + 1784503515, + null, + null, + null + ], + [ + 1784503516, + null, + null, + null + ], + [ + 1784503517, + null, + null, + null + ], + [ + 1784503518, + null, + null, + null + ], + [ + 1784503519, + null, + null, + null + ], + [ + 1784503520, + null, + null, + null + ], + [ + 1784503521, + null, + null, + null + ], + [ + 1784503522, + null, + null, + null + ], + [ + 1784503523, + null, + null, + null + ], + [ + 1784503524, + null, + null, + null + ], + [ + 1784503525, + null, + null, + null + ], + [ + 1784503526, + null, + null, + null + ], + [ + 1784503527, + null, + null, + null + ], + [ + 1784503528, + null, + null, + null + ], + [ + 1784503529, + null, + null, + null + ], + [ + 1784503530, + null, + null, + null + ], + [ + 1784503531, + null, + null, + null + ], + [ + 1784503532, + null, + null, + null + ], + [ + 1784503533, + null, + null, + null + ], + [ + 1784503534, + null, + null, + null + ], + [ + 1784503535, + null, + null, + null + ], + [ + 1784503537, + null, + null, + null + ], + [ + 1784503538, + null, + null, + null + ], + [ + 1784503539, + null, + null, + null + ], + [ + 1784503540, + null, + null, + null + ], + [ + 1784503541, + null, + null, + null + ], + [ + 1784503542, + null, + null, + null + ], + [ + 1784503543, + null, + null, + null + ], + [ + 1784503544, + null, + null, + null + ], + [ + 1784503545, + null, + null, + null + ], + [ + 1784503546, + null, + null, + null + ], + [ + 1784503547, + null, + null, + null + ], + [ + 1784503548, + null, + null, + null + ], + [ + 1784503549, + null, + null, + null + ] + ], + "temp_c": null, + "arm_clock_hz": null, + "throttling_detected": false + }, + "warnings": [ + "governor is 'unavailable', not 'performance' (need root on Linux, or unsupported on macOS)", + "core pinning unavailable (no taskset/numactl) \u2014 results will be noisier", + "NOT RPi5-baseline-grade: host is not a Raspberry Pi (model='', os=macos); CPU governor is 'unavailable', not 'performance'; benchmark was not pinned to a dedicated core (no taskset); build flags targeted 'apple-m3', not cortex-a76" + ], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1064, + "timed_iters": 5320, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 46995.11, + "samples": 26600, + "median": 44000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 44000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 64000.0, + "mean": 44362.44, + "stddev": 916.34, + "ops_per_sec": 22727.27, + "per_rep_median": [ + 44000.0, + 44000.0, + 44000.0, + 44000.0, + 44000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1156, + "timed_iters": 5778, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43268.82, + "samples": 28890, + "median": 43000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 43000.0, + "q3": 43000.0, + "min": 42000.0, + "max": 84000.0, + "mean": 43270.2, + "stddev": 986.4, + "ops_per_sec": 23255.81, + "per_rep_median": [ + 43000.0, + 43000.0, + 43000.0, + 43000.0, + 43000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 87000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5187, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9638.58, + "samples": 100000, + "median": 10000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 9000.0, + "q3": 10000.0, + "min": 9000.0, + "max": 39000.0, + "mean": 9599.96, + "stddev": 677.96, + "ops_per_sec": 100000.0, + "per_rep_median": [ + 10000.0, + 10000.0, + 10000.0, + 10000.0, + 10000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4649, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10755.8, + "samples": 100000, + "median": 11000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 11000.0, + "q3": 11000.0, + "min": 10000.0, + "max": 53000.0, + "mean": 10791.99, + "stddev": 597.85, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 3988, + "timed_iters": 19938, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12538.71, + "samples": 99690, + "median": 13000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 12000.0, + "q3": 13000.0, + "min": 12000.0, + "max": 187000.0, + "mean": 12638.25, + "stddev": 1601.3, + "ops_per_sec": 76923.08, + "per_rep_median": [ + 13000.0, + 13000.0, + 13000.0, + 13000.0, + 13000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 34000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3027, + "timed_iters": 15136, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16517.34, + "samples": 75680, + "median": 16000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 16000.0, + "q3": 16000.0, + "min": 15000.0, + "max": 2303000.0, + "mean": 16422.29, + "stddev": 9624.21, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2284, + "timed_iters": 11420, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21890.57, + "samples": 57100, + "median": 17000.0, + "mad": 0.0, + "iqr": 3000.0, + "q1": 17000.0, + "q3": 20000.0, + "min": 16000.0, + "max": 9017000.0, + "mean": 21254.48, + "stddev": 66625.74, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 27000.0, + 18000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2532, + "timed_iters": 12661, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19745.48, + "samples": 63305, + "median": 20000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 20000.0, + "q3": 23000.0, + "min": 19000.0, + "max": 487000.0, + "mean": 21661.31, + "stddev": 4680.17, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 20000.0, + 23000.0, + 23000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 53000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1804, + "timed_iters": 9022, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 27710.31, + "samples": 45110, + "median": 24000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 24000.0, + "q3": 24000.0, + "min": 23000.0, + "max": 282000.0, + "mean": 24469.03, + "stddev": 2688.97, + "ops_per_sec": 41666.67, + "per_rep_median": [ + 24000.0, + 24000.0, + 24000.0, + 24000.0, + 24000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1904, + "timed_iters": 9521, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26257.94, + "samples": 47605, + "median": 26000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 26000.0, + "q3": 26000.0, + "min": 25000.0, + "max": 2728000.0, + "mean": 26020.02, + "stddev": 12878.34, + "ops_per_sec": 38461.54, + "per_rep_median": [ + 26000.0, + 26000.0, + 26000.0, + 26000.0, + 26000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1659, + "timed_iters": 8296, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30135.87, + "samples": 41480, + "median": 30000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 30000.0, + "q3": 30000.0, + "min": 29000.0, + "max": 110000.0, + "mean": 30031.44, + "stddev": 922.92, + "ops_per_sec": 33333.33, + "per_rep_median": [ + 30000.0, + 30000.0, + 30000.0, + 30000.0, + 30000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 80000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114040000.0, + "samples": 150, + "median": 178798000.0, + "mad": 77600500.0, + "iqr": 230949500.0, + "q1": 101329000.0, + "q3": 332278500.0, + "min": 100838000.0, + "max": 1256373000.0, + "mean": 260623800.0, + "stddev": 190539333.9, + "ops_per_sec": 5.59, + "per_rep_median": [ + 178699000.0, + 254867000.0, + 178385000.0, + 177675000.0, + 255035000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1911, + "timed_iters": 9553, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26168.54, + "samples": 47765, + "median": 23000.0, + "mad": 1000.0, + "iqr": 5000.0, + "q1": 22000.0, + "q3": 27000.0, + "min": 21000.0, + "max": 84000.0, + "mean": 25806.2, + "stddev": 4903.23, + "ops_per_sec": 43478.26, + "per_rep_median": [ + 24000.0, + 23000.0, + 23000.0, + 23000.0, + 23000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25725666.67, + "samples": 150, + "median": 25733000.0, + "mad": 19000.0, + "iqr": 43750.0, + "q1": 25715000.0, + "q3": 25758750.0, + "min": 25700000.0, + "max": 25861000.0, + "mean": 25737433.33, + "stddev": 27521.17, + "ops_per_sec": 38.86, + "per_rep_median": [ + 25740000.0, + 25709000.0, + 25728000.0, + 25754500.0, + 25721500.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 204554000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 325312000.0, + "samples": 150, + "median": 594358500.0, + "mad": 268143500.0, + "iqr": 771470750.0, + "q1": 342233000.0, + "q3": 1113703750.0, + "min": 325300000.0, + "max": 3783639000.0, + "mean": 927426606.67, + "stddev": 703785328.6, + "ops_per_sec": 1.68, + "per_rep_median": [ + 843654000.0, + 585593500.0, + 588056000.0, + 845231000.0, + 621858000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 927, + "timed_iters": 4636, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 53924.73, + "samples": 23180, + "median": 48000.0, + "mad": 9000.0, + "iqr": 25000.0, + "q1": 40000.0, + "q3": 65000.0, + "min": 38000.0, + "max": 3449000.0, + "mean": 55741.98, + "stddev": 31465.84, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59494000.0, + "samples": 150, + "median": 59356000.0, + "mad": 29500.0, + "iqr": 59750.0, + "q1": 59329750.0, + "q3": 59389500.0, + "min": 59244000.0, + "max": 96201000.0, + "mean": 59604646.67, + "stddev": 3008524.13, + "ops_per_sec": 16.85, + "per_rep_median": [ + 59381500.0, + 59405000.0, + 59360000.0, + 59345500.0, + 59331000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 653762500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 341810000.0, + "samples": 150, + "median": 342819000.0, + "mad": 830000.0, + "iqr": 3645250.0, + "q1": 342272250.0, + "q3": 345917500.0, + "min": 341560000.0, + "max": 413250000.0, + "mean": 345302126.67, + "stddev": 8132511.18, + "ops_per_sec": 2.92, + "per_rep_median": [ + 342466000.0, + 342335000.0, + 342583000.0, + 345695000.0, + 345897500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 887, + "timed_iters": 4434, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56380.25, + "samples": 22170, + "median": 48000.0, + "mad": 9000.0, + "iqr": 25000.0, + "q1": 40000.0, + "q3": 65000.0, + "min": 38000.0, + "max": 1281000.0, + "mean": 55537.35, + "stddev": 22633.09, + "ops_per_sec": 20833.33, + "per_rep_median": [ + 48000.0, + 48000.0, + 48000.0, + 48000.0, + 48000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59511000.0, + "samples": 150, + "median": 59590500.0, + "mad": 160000.0, + "iqr": 587750.0, + "q1": 59469250.0, + "q3": 60057000.0, + "min": 59312000.0, + "max": 66107000.0, + "mean": 59878393.33, + "stddev": 804601.03, + "ops_per_sec": 16.78, + "per_rep_median": [ + 59670500.0, + 59621000.0, + 59555500.0, + 59614000.0, + 59514000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 402457500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 746559000.0, + "samples": 150, + "median": 1413683000.0, + "mad": 676139000.0, + "iqr": 2678474250.0, + "q1": 740521000.0, + "q3": 3418995250.0, + "min": 736523000.0, + "max": 12137662000.0, + "mean": 2403252233.33, + "stddev": 2029565520.43, + "ops_per_sec": 0.71, + "per_rep_median": [ + 1742589000.0, + 2076557000.0, + 1747847000.0, + 1410830000.0, + 1407266500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 362, + "timed_iters": 1809, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 138215.69, + "samples": 9045, + "median": 109000.0, + "mad": 15000.0, + "iqr": 42000.0, + "q1": 95000.0, + "q3": 137000.0, + "min": 93000.0, + "max": 1209000.0, + "mean": 126682.81, + "stddev": 40360.77, + "ops_per_sec": 9174.31, + "per_rep_median": [ + 108000.0, + 108000.0, + 120000.0, + 116000.0, + 120000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114027000.0, + "samples": 150, + "median": 114106500.0, + "mad": 36000.0, + "iqr": 71750.0, + "q1": 114065250.0, + "q3": 114137000.0, + "min": 113924000.0, + "max": 116670000.0, + "mean": 114162186.67, + "stddev": 340787.53, + "ops_per_sec": 8.76, + "per_rep_median": [ + 114106500.0, + 114100500.0, + 114100500.0, + 114108000.0, + 114131000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1527898500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1903046000.0, + "samples": 150, + "median": 1271722000.0, + "mad": 603125000.0, + "iqr": 1805352000.0, + "q1": 669693250.0, + "q3": 2475045250.0, + "min": 667284000.0, + "max": 7889031000.0, + "mean": 1942891420.0, + "stddev": 1620467532.66, + "ops_per_sec": 0.79, + "per_rep_median": [ + 1272542500.0, + 1270183000.0, + 1272607500.0, + 979102500.0, + 1276331500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 291, + "timed_iters": 1453, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 172003.92, + "samples": 7265, + "median": 158000.0, + "mad": 12000.0, + "iqr": 33000.0, + "q1": 147000.0, + "q3": 180000.0, + "min": 145000.0, + "max": 368000.0, + "mean": 167227.25, + "stddev": 25615.72, + "ops_per_sec": 6329.11, + "per_rep_median": [ + 158000.0, + 158000.0, + 158000.0, + 158000.0, + 158000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 110387000.0, + "samples": 150, + "median": 110502000.0, + "mad": 37000.0, + "iqr": 72000.0, + "q1": 110455750.0, + "q3": 110527750.0, + "min": 110327000.0, + "max": 113340000.0, + "mean": 110539913.33, + "stddev": 299969.17, + "ops_per_sec": 9.05, + "per_rep_median": [ + 110502000.0, + 110494000.0, + 110498000.0, + 110509000.0, + 110503000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1382382000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 878036000.0, + "samples": 150, + "median": 1711346000.0, + "mad": 833650500.0, + "iqr": 3241443500.0, + "q1": 879382000.0, + "q3": 4120825500.0, + "min": 875799000.0, + "max": 15442404000.0, + "mean": 3117006933.33, + "stddev": 2747118808.84, + "ops_per_sec": 0.58, + "per_rep_median": [ + 2492674500.0, + 1690255000.0, + 2495624000.0, + 2909617500.0, + 1689956000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 396, + "timed_iters": 1982, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 126125.49, + "samples": 9910, + "median": 93000.0, + "mad": 13000.0, + "iqr": 37000.0, + "q1": 81000.0, + "q3": 118000.0, + "min": 80000.0, + "max": 321000.0, + "mean": 102439.35, + "stddev": 27683.0, + "ops_per_sec": 10752.69, + "per_rep_median": [ + 93000.0, + 93000.0, + 93000.0, + 93000.0, + 93000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 139695000.0, + "samples": 150, + "median": 139674500.0, + "mad": 54000.0, + "iqr": 107250.0, + "q1": 139611500.0, + "q3": 139718750.0, + "min": 139473000.0, + "max": 153015000.0, + "mean": 139854713.33, + "stddev": 1194293.81, + "ops_per_sec": 7.16, + "per_rep_median": [ + 139711500.0, + 139661500.0, + 139682000.0, + 139661500.0, + 139657000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1851113500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": true, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 181, + "timed_iters": 904, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 276409.45, + "samples": 4520, + "median": 276000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 276000.0, + "q3": 277000.0, + "min": 272000.0, + "max": 300000.0, + "mean": 276546.02, + "stddev": 2478.16, + "ops_per_sec": 3623.19, + "per_rep_median": [ + 277000.0, + 276000.0, + 277000.0, + 276000.0, + 276000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 136, + "timed_iters": 679, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 368133.86, + "samples": 3395, + "median": 367000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 367000.0, + "q3": 368000.0, + "min": 365000.0, + "max": 450000.0, + "mean": 367816.79, + "stddev": 3199.88, + "ops_per_sec": 2724.8, + "per_rep_median": [ + 367000.0, + 367000.0, + 367000.0, + 367000.0, + 367000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 143, + "timed_iters": 717, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 348645.67, + "samples": 3585, + "median": 348000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 348000.0, + "q3": 349000.0, + "min": 346000.0, + "max": 389000.0, + "mean": 349283.12, + "stddev": 3559.43, + "ops_per_sec": 2873.56, + "per_rep_median": [ + 348000.0, + 348000.0, + 348000.0, + 348000.0, + 348000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 991000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 92, + "timed_iters": 461, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 542730.16, + "samples": 2305, + "median": 542000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 540000.0, + "q3": 543000.0, + "min": 538000.0, + "max": 573000.0, + "mean": 542131.89, + "stddev": 3271.95, + "ops_per_sec": 1845.02, + "per_rep_median": [ + 542000.0, + 542000.0, + 542000.0, + 542000.0, + 542000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 69, + "timed_iters": 347, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 720206.35, + "samples": 1735, + "median": 719000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 718000.0, + "q3": 720000.0, + "min": 715000.0, + "max": 1526000.0, + "mean": 720756.2, + "stddev": 25522.41, + "ops_per_sec": 1390.82, + "per_rep_median": [ + 719000.0, + 719000.0, + 718000.0, + 719000.0, + 719000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 366, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 683825.4, + "samples": 1830, + "median": 682000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 680000.0, + "q3": 683000.0, + "min": 678000.0, + "max": 711000.0, + "mean": 682668.85, + "stddev": 3731.66, + "ops_per_sec": 1466.28, + "per_rep_median": [ + 682000.0, + 682000.0, + 682000.0, + 682000.0, + 682000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1943000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 52, + "timed_iters": 262, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 954746.03, + "samples": 1310, + "median": 954000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 951000.0, + "q3": 957000.0, + "min": 949000.0, + "max": 2886000.0, + "mean": 962076.34, + "stddev": 82150.52, + "ops_per_sec": 1048.22, + "per_rep_median": [ + 954000.0, + 955000.0, + 952000.0, + 953000.0, + 954000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 40, + "timed_iters": 202, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1239516.13, + "samples": 1010, + "median": 1238000.0, + "mad": 3000.0, + "iqr": 5000.0, + "q1": 1235000.0, + "q3": 1240000.0, + "min": 1233000.0, + "max": 2765000.0, + "mean": 1241683.17, + "stddev": 59469.0, + "ops_per_sec": 807.75, + "per_rep_median": [ + 1237000.0, + 1238000.0, + 1238000.0, + 1238000.0, + 1238000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 42, + "timed_iters": 210, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1189129.03, + "samples": 1050, + "median": 1187000.0, + "mad": 3000.0, + "iqr": 5000.0, + "q1": 1184000.0, + "q3": 1189000.0, + "min": 1182000.0, + "max": 1224000.0, + "mean": 1187817.14, + "stddev": 4972.84, + "ops_per_sec": 842.46, + "per_rep_median": [ + 1186000.0, + 1187000.0, + 1186000.0, + 1187000.0, + 1187000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 3379000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-640-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 160, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1562838.71, + "samples": 800, + "median": 1561000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 1558000.0, + "q3": 1564000.0, + "min": 1554000.0, + "max": 1600000.0, + "mean": 1562468.75, + "stddev": 6747.11, + "ops_per_sec": 640.61, + "per_rep_median": [ + 1560000.0, + 1561000.0, + 1561000.0, + 1560000.0, + 1561000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1882709.68, + "samples": 665, + "median": 1881000.0, + "mad": 3000.0, + "iqr": 8000.0, + "q1": 1878000.0, + "q3": 1886000.0, + "min": 1869000.0, + "max": 4194000.0, + "mean": 1887114.29, + "stddev": 90447.16, + "ops_per_sec": 531.63, + "per_rep_median": [ + 1880000.0, + 1879000.0, + 1880000.0, + 1885000.0, + 1881000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 141, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1774032.26, + "samples": 705, + "median": 1773000.0, + "mad": 2000.0, + "iqr": 6000.0, + "q1": 1771000.0, + "q3": 1777000.0, + "min": 1768000.0, + "max": 1814000.0, + "mean": 1775363.12, + "stddev": 6676.05, + "ops_per_sec": 564.02, + "per_rep_median": [ + 1774000.0, + 1774000.0, + 1772000.0, + 1772000.0, + 1772000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 5215000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-976-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3461733.33, + "samples": 360, + "median": 3454000.0, + "mad": 5000.0, + "iqr": 10000.0, + "q1": 3450000.0, + "q3": 3460000.0, + "min": 3443000.0, + "max": 3502000.0, + "mean": 3456697.22, + "stddev": 9160.29, + "ops_per_sec": 289.52, + "per_rep_median": [ + 3455500.0, + 3453500.0, + 3456000.0, + 3456000.0, + 3452000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 12, + "timed_iters": 62, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4000800.0, + "samples": 310, + "median": 3997500.0, + "mad": 5500.0, + "iqr": 13000.0, + "q1": 3992000.0, + "q3": 4005000.0, + "min": 3985000.0, + "max": 5193000.0, + "mean": 4007535.48, + "stddev": 86025.27, + "ops_per_sec": 250.16, + "per_rep_median": [ + 3995500.0, + 3997500.0, + 3993500.0, + 4000000.0, + 4001500.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 13, + "timed_iters": 63, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3965333.33, + "samples": 315, + "median": 3960000.0, + "mad": 5000.0, + "iqr": 10500.0, + "q1": 3956000.0, + "q3": 3966500.0, + "min": 3946000.0, + "max": 4000000.0, + "mean": 3962428.57, + "stddev": 9554.93, + "ops_per_sec": 252.53, + "per_rep_median": [ + 3960000.0, + 3959000.0, + 3961000.0, + 3960000.0, + 3960000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 11411500.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-1344-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 40, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6263714.29, + "samples": 200, + "median": 6254000.0, + "mad": 8000.0, + "iqr": 17000.0, + "q1": 6247000.0, + "q3": 6264000.0, + "min": 6235000.0, + "max": 6322000.0, + "mean": 6256600.0, + "stddev": 12776.0, + "ops_per_sec": 159.9, + "per_rep_median": [ + 6256000.0, + 6249000.0, + 6250000.0, + 6259000.0, + 6255500.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 34, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7251428.57, + "samples": 170, + "median": 7246000.0, + "mad": 8000.0, + "iqr": 17000.0, + "q1": 7240000.0, + "q3": 7257000.0, + "min": 7227000.0, + "max": 7290000.0, + "mean": 7249958.82, + "stddev": 14091.15, + "ops_per_sec": 138.01, + "per_rep_median": [ + 7243000.0, + 7251000.0, + 7249500.0, + 7243000.0, + 7256000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 35, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7206428.57, + "samples": 175, + "median": 7203000.0, + "mad": 8000.0, + "iqr": 18000.0, + "q1": 7197000.0, + "q3": 7215000.0, + "min": 7180000.0, + "max": 8196000.0, + "mean": 7219205.71, + "stddev": 91995.52, + "ops_per_sec": 138.83, + "per_rep_median": [ + 7201000.0, + 7209000.0, + 7201000.0, + 7203000.0, + 7204000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 20703000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2840, + "timed_iters": 14199, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17607.23, + "samples": 70995, + "median": 17000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 16000.0, + "q3": 17000.0, + "min": 16000.0, + "max": 217000.0, + "mean": 16767.27, + "stddev": 1377.78, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 17000.0, + 17000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1079, + "timed_iters": 5394, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 46347.02, + "samples": 26970, + "median": 46000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 46000.0, + "q3": 47000.0, + "min": 46000.0, + "max": 330000.0, + "mean": 46623.66, + "stddev": 4235.14, + "ops_per_sec": 21739.13, + "per_rep_median": [ + 46000.0, + 46000.0, + 46000.0, + 46000.0, + 46000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 63000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2244, + "timed_iters": 11220, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 22281.88, + "samples": 56100, + "median": 22000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 22000.0, + "q3": 23000.0, + "min": 21000.0, + "max": 444000.0, + "mean": 22316.38, + "stddev": 3194.95, + "ops_per_sec": 45454.55, + "per_rep_median": [ + 22000.0, + 22000.0, + 22000.0, + 22000.0, + 22000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2563, + "timed_iters": 12815, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19508.06, + "samples": 64075, + "median": 20000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 19000.0, + "q3": 20000.0, + "min": 19000.0, + "max": 57000.0, + "mean": 19536.43, + "stddev": 697.2, + "ops_per_sec": 50000.0, + "per_rep_median": [ + 20000.0, + 20000.0, + 19000.0, + 20000.0, + 20000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2096, + "timed_iters": 10478, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23858.82, + "samples": 52390, + "median": 23000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 23000.0, + "q3": 24000.0, + "min": 23000.0, + "max": 44000.0, + "mean": 23355.56, + "stddev": 717.64, + "ops_per_sec": 43478.26, + "per_rep_median": [ + 23000.0, + 23000.0, + 23000.0, + 23000.0, + 23000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 65000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1288, + "timed_iters": 6438, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 38828.93, + "samples": 32190, + "median": 39000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 38000.0, + "q3": 39000.0, + "min": 37000.0, + "max": 78000.0, + "mean": 38758.68, + "stddev": 993.96, + "ops_per_sec": 25641.03, + "per_rep_median": [ + 39000.0, + 39000.0, + 39000.0, + 39000.0, + 39000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1476, + "timed_iters": 7378, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33884.65, + "samples": 36890, + "median": 34000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 34000.0, + "q3": 34000.0, + "min": 33000.0, + "max": 49000.0, + "mean": 33893.09, + "stddev": 780.3, + "ops_per_sec": 29411.76, + "per_rep_median": [ + 34000.0, + 34000.0, + 34000.0, + 34000.0, + 34000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1266, + "timed_iters": 6330, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 39493.65, + "samples": 31650, + "median": 40000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 39000.0, + "q3": 40000.0, + "min": 39000.0, + "max": 79000.0, + "mean": 39606.19, + "stddev": 900.03, + "ops_per_sec": 25000.0, + "per_rep_median": [ + 40000.0, + 40000.0, + 40000.0, + 40000.0, + 40000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 113000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 812, + "timed_iters": 4061, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 61553.82, + "samples": 20305, + "median": 61000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 59000.0, + "max": 112000.0, + "mean": 61451.86, + "stddev": 1272.19, + "ops_per_sec": 16393.44, + "per_rep_median": [ + 61000.0, + 61000.0, + 61000.0, + 61000.0, + 61000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 932, + "timed_iters": 4661, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 53635.39, + "samples": 23305, + "median": 54000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 53000.0, + "q3": 54000.0, + "min": 53000.0, + "max": 79000.0, + "mean": 53760.18, + "stddev": 1016.4, + "ops_per_sec": 18518.52, + "per_rep_median": [ + 54000.0, + 54000.0, + 54000.0, + 54000.0, + 54000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 815, + "timed_iters": 4073, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 61373.78, + "samples": 20365, + "median": 61000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 60000.0, + "max": 81000.0, + "mean": 61390.67, + "stddev": 975.33, + "ops_per_sec": 16393.44, + "per_rep_median": [ + 61000.0, + 61000.0, + 61000.0, + 61000.0, + 61000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 176000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4701, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10635.41, + "samples": 100000, + "median": 11000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 10000.0, + "q3": 11000.0, + "min": 9000.0, + "max": 636000.0, + "mean": 10606.37, + "stddev": 2313.64, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1875, + "timed_iters": 9376, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26662.43, + "samples": 46880, + "median": 27000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 26000.0, + "q3": 27000.0, + "min": 26000.0, + "max": 42000.0, + "mean": 26588.82, + "stddev": 770.55, + "ops_per_sec": 37037.04, + "per_rep_median": [ + 27000.0, + 27000.0, + 27000.0, + 27000.0, + 27000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 38000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "secp256r1", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3769, + "timed_iters": 18846, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13265.69, + "samples": 94230, + "median": 13000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 13000.0, + "q3": 13000.0, + "min": 12000.0, + "max": 35000.0, + "mean": 13156.99, + "stddev": 525.61, + "ops_per_sec": 76923.08, + "per_rep_median": [ + 13000.0, + 13000.0, + 13000.0, + 13000.0, + 13000.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1113, + "timed_iters": 5564, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44934.51, + "samples": 27820, + "median": 45000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 45000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 133000.0, + "mean": 44921.96, + "stddev": 1067.0, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 58000.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3495, + "timed_iters": 17477, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 14304.76, + "samples": 87385, + "median": 14000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 14000.0, + "q3": 14000.0, + "min": 13000.0, + "max": 31000.0, + "mean": 14232.25, + "stddev": 605.22, + "ops_per_sec": 71428.57, + "per_rep_median": [ + 14000.0, + 14000.0, + 14000.0, + 14000.0, + 14000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 3057, + "timed_iters": 15283, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16357.6, + "samples": 76415, + "median": 16000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 16000.0, + "q3": 17000.0, + "min": 15000.0, + "max": 38000.0, + "mean": 16328.16, + "stddev": 663.16, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 3219, + "timed_iters": 16097, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 15530.53, + "samples": 80485, + "median": 16000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 15000.0, + "q3": 16000.0, + "min": 15000.0, + "max": 31000.0, + "mean": 15538.7, + "stddev": 681.58, + "ops_per_sec": 62500.0, + "per_rep_median": [ + 16000.0, + 16000.0, + 16000.0, + 16000.0, + 16000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 46000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2575, + "timed_iters": 12877, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 19413.78, + "samples": 64385, + "median": 19000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 19000.0, + "q3": 20000.0, + "min": 18000.0, + "max": 35000.0, + "mean": 19352.68, + "stddev": 701.76, + "ops_per_sec": 52631.58, + "per_rep_median": [ + 19000.0, + 19000.0, + 19000.0, + 19000.0, + 19000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2179, + "timed_iters": 10896, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 22943.33, + "samples": 54480, + "median": 23000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 23000.0, + "q3": 23000.0, + "min": 22000.0, + "max": 51000.0, + "mean": 22959.34, + "stddev": 625.29, + "ops_per_sec": 43478.26, + "per_rep_median": [ + 23000.0, + 23000.0, + 23000.0, + 23000.0, + 23000.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2197, + "timed_iters": 10986, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 22755.25, + "samples": 54930, + "median": 23000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 23000.0, + "q3": 23000.0, + "min": 22000.0, + "max": 39000.0, + "mean": 22790.13, + "stddev": 692.59, + "ops_per_sec": 43478.26, + "per_rep_median": [ + 23000.0, + 23000.0, + 23000.0, + 23000.0, + 23000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 65000.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1106, + "timed_iters": 5528, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45227.76, + "samples": 27640, + "median": 45000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 45000.0, + "q3": 45000.0, + "min": 44000.0, + "max": 63000.0, + "mean": 44987.52, + "stddev": 901.39, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1104, + "timed_iters": 5522, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45269.79, + "samples": 27610, + "median": 45000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 45000.0, + "q3": 46000.0, + "min": 45000.0, + "max": 66000.0, + "mean": 45325.64, + "stddev": 842.24, + "ops_per_sec": 22222.22, + "per_rep_median": [ + 45000.0, + 45000.0, + 45000.0, + 45000.0, + 45000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 395, + "timed_iters": 1977, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 126454.9, + "samples": 9885, + "median": 126000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 126000.0, + "q3": 126000.0, + "min": 125000.0, + "max": 152000.0, + "mean": 126180.98, + "stddev": 1308.27, + "ops_per_sec": 7936.51, + "per_rep_median": [ + 126000.0, + 126000.0, + 126000.0, + 126000.0, + 126000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 216000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 798, + "timed_iters": 3991, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 62643.84, + "samples": 19955, + "median": 62000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 62000.0, + "q3": 62000.0, + "min": 60000.0, + "max": 99000.0, + "mean": 61999.35, + "stddev": 1219.17, + "ops_per_sec": 16129.03, + "per_rep_median": [ + 62000.0, + 62000.0, + 62000.0, + 62000.0, + 62000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 175, + "timed_iters": 874, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 286062.99, + "samples": 4370, + "median": 217000.0, + "mad": 102000.0, + "iqr": 203000.0, + "q1": 160000.0, + "q3": 363000.0, + "min": 114000.0, + "max": 1617000.0, + "mean": 282846.91, + "stddev": 189936.69, + "ops_per_sec": 4608.29, + "per_rep_median": [ + 216000.0, + 217000.0, + 216000.0, + 217000.0, + 226000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 744, + "timed_iters": 3720, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 67197.65, + "samples": 18600, + "median": 67000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 67000.0, + "q3": 67000.0, + "min": 66000.0, + "max": 485000.0, + "mean": 67277.47, + "stddev": 4163.64, + "ops_per_sec": 14925.37, + "per_rep_median": [ + 67000.0, + 67000.0, + 67000.0, + 67000.0, + 67000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 346000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 408, + "timed_iters": 2039, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 122592.16, + "samples": 10195, + "median": 122000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 121000.0, + "q3": 122000.0, + "min": 119000.0, + "max": 140000.0, + "mean": 121858.36, + "stddev": 1489.4, + "ops_per_sec": 8196.72, + "per_rep_median": [ + 122000.0, + 122000.0, + 122000.0, + 122000.0, + 122000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 120, + "timed_iters": 600, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 416960.63, + "samples": 3000, + "median": 373500.0, + "mad": 159500.0, + "iqr": 361250.0, + "q1": 235000.0, + "q3": 596250.0, + "min": 172000.0, + "max": 2605000.0, + "mean": 457010.33, + "stddev": 311781.85, + "ops_per_sec": 2677.38, + "per_rep_median": [ + 375000.0, + 359000.0, + 374500.0, + 356500.0, + 375000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 456, + "timed_iters": 2282, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 109544.03, + "samples": 11410, + "median": 109000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 109000.0, + "q3": 109000.0, + "min": 108000.0, + "max": 1050000.0, + "mean": 109998.77, + "stddev": 15343.7, + "ops_per_sec": 9174.31, + "per_rep_median": [ + 109000.0, + 109000.0, + 109000.0, + 109000.0, + 109000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 604500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 287, + "timed_iters": 1436, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 174050.98, + "samples": 7180, + "median": 172000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 172000.0, + "q3": 173000.0, + "min": 170000.0, + "max": 623000.0, + "mean": 172813.51, + "stddev": 7850.65, + "ops_per_sec": 5813.95, + "per_rep_median": [ + 173000.0, + 172000.0, + 172000.0, + 172000.0, + 172000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 89, + "timed_iters": 443, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 564079.37, + "samples": 2215, + "median": 475000.0, + "mad": 207000.0, + "iqr": 441000.0, + "q1": 282500.0, + "q3": 723500.0, + "min": 266000.0, + "max": 3621000.0, + "mean": 585974.27, + "stddev": 369967.57, + "ops_per_sec": 2105.26, + "per_rep_median": [ + 478000.0, + 474000.0, + 475000.0, + 476000.0, + 475000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 277, + "timed_iters": 1385, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 180541.18, + "samples": 6925, + "median": 180000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 180000.0, + "q3": 180000.0, + "min": 179000.0, + "max": 207000.0, + "mean": 180365.34, + "stddev": 1670.4, + "ops_per_sec": 5555.56, + "per_rep_median": [ + 180000.0, + 180000.0, + 180000.0, + 180000.0, + 180000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 827000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 39, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6376571.43, + "samples": 195, + "median": 6546000.0, + "mad": 699000.0, + "iqr": 1401500.0, + "q1": 5848500.0, + "q3": 7250000.0, + "min": 5558000.0, + "max": 23462000.0, + "mean": 6847369.23, + "stddev": 1686454.45, + "ops_per_sec": 152.77, + "per_rep_median": [ + 6415000.0, + 6395000.0, + 6542000.0, + 6820000.0, + 6562000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 242, + "timed_iters": 1210, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 206596.08, + "samples": 6050, + "median": 206000.0, + "mad": 2000.0, + "iqr": 5000.0, + "q1": 204000.0, + "q3": 209000.0, + "min": 194000.0, + "max": 231000.0, + "mean": 206286.28, + "stddev": 3858.21, + "ops_per_sec": 4854.37, + "per_rep_median": [ + 206000.0, + 206000.0, + 206000.0, + 206000.0, + 206000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1588, + "timed_iters": 7942, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31478.98, + "samples": 39710, + "median": 31000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 31000.0, + "q3": 32000.0, + "min": 30000.0, + "max": 48000.0, + "mean": 31524.93, + "stddev": 762.46, + "ops_per_sec": 32258.06, + "per_rep_median": [ + 31000.0, + 31000.0, + 31000.0, + 31000.0, + 32000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 6783000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 22061666.67, + "samples": 150, + "median": 20823500.0, + "mad": 1080500.0, + "iqr": 2620500.0, + "q1": 19921750.0, + "q3": 22542250.0, + "min": 19046000.0, + "max": 39466000.0, + "mean": 21926486.67, + "stddev": 3520514.22, + "ops_per_sec": 48.02, + "per_rep_median": [ + 20829000.0, + 20631500.0, + 20865500.0, + 20820500.0, + 21072000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 122, + "timed_iters": 609, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 410700.79, + "samples": 3045, + "median": 410000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 406000.0, + "q3": 414000.0, + "min": 393000.0, + "max": 441000.0, + "mean": 410027.26, + "stddev": 5447.06, + "ops_per_sec": 2439.02, + "per_rep_median": [ + 410000.0, + 410000.0, + 409000.0, + 410000.0, + 410000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 811, + "timed_iters": 4054, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 61669.28, + "samples": 20270, + "median": 61000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 61000.0, + "q3": 62000.0, + "min": 60000.0, + "max": 81000.0, + "mean": 61511.99, + "stddev": 961.35, + "ops_per_sec": 16393.44, + "per_rep_median": [ + 61000.0, + 61000.0, + 61000.0, + 61000.0, + 61000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 21294500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": true, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 47, + "timed_iters": 235, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1064645.16, + "samples": 1175, + "median": 1063000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 1062000.0, + "q3": 1065000.0, + "min": 1060000.0, + "max": 1094000.0, + "mean": 1064431.49, + "stddev": 4224.56, + "ops_per_sec": 940.73, + "per_rep_median": [ + 1063000.0, + 1062000.0, + 1062000.0, + 1062000.0, + 1064000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24921666.67, + "samples": 150, + "median": 24898500.0, + "mad": 13500.0, + "iqr": 26750.0, + "q1": 24885250.0, + "q3": 24912000.0, + "min": 24858000.0, + "max": 25084000.0, + "mean": 24901453.33, + "stddev": 27044.23, + "ops_per_sec": 40.16, + "per_rep_median": [ + 24902500.0, + 24893500.0, + 24893000.0, + 24906000.0, + 24901000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 33, + "timed_iters": 165, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1516483.87, + "samples": 825, + "median": 1515000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 1513000.0, + "q3": 1517000.0, + "min": 1511000.0, + "max": 1647000.0, + "mean": 1517415.76, + "stddev": 13447.69, + "ops_per_sec": 660.07, + "per_rep_median": [ + 1513000.0, + 1515000.0, + 1514000.0, + 1515000.0, + 1515000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 27476500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 68002000.0, + "samples": 150, + "median": 68051000.0, + "mad": 30500.0, + "iqr": 61250.0, + "q1": 68017500.0, + "q3": 68078750.0, + "min": 67947000.0, + "max": 73209000.0, + "mean": 68132806.67, + "stddev": 536905.57, + "ops_per_sec": 14.69, + "per_rep_median": [ + 68029500.0, + 68049500.0, + 68060500.0, + 68052500.0, + 68057000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 519620000.0, + "samples": 150, + "median": 518699000.0, + "mad": 132000.0, + "iqr": 254000.0, + "q1": 518537250.0, + "q3": 518791250.0, + "min": 518336000.0, + "max": 555693000.0, + "mean": 519242633.33, + "stddev": 3280778.61, + "ops_per_sec": 1.93, + "per_rep_median": [ + 518670500.0, + 518700500.0, + 518684000.0, + 518720000.0, + 518697500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 94, + "timed_iters": 468, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 533825.4, + "samples": 2340, + "median": 533000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 533000.0, + "q3": 534000.0, + "min": 532000.0, + "max": 554000.0, + "mean": 534390.6, + "stddev": 2762.74, + "ops_per_sec": 1876.17, + "per_rep_median": [ + 534000.0, + 533000.0, + 533000.0, + 533000.0, + 533000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 587283000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 162, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1546451.61, + "samples": 810, + "median": 1546000.0, + "mad": 3000.0, + "iqr": 5000.0, + "q1": 1544000.0, + "q3": 1549000.0, + "min": 1542000.0, + "max": 2317000.0, + "mean": 1548841.98, + "stddev": 28521.19, + "ops_per_sec": 646.83, + "per_rep_median": [ + 1546000.0, + 1546000.0, + 1547000.0, + 1546000.0, + 1545000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 40748000.0, + "samples": 150, + "median": 40776500.0, + "mad": 46000.0, + "iqr": 127250.0, + "q1": 40743000.0, + "q3": 40870250.0, + "min": 40690000.0, + "max": 68340000.0, + "mean": 41523306.67, + "stddev": 3174490.59, + "ops_per_sec": 24.52, + "per_rep_median": [ + 40796500.0, + 40885000.0, + 40786500.0, + 40743500.0, + 40752000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 22, + "timed_iters": 112, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2238133.33, + "samples": 560, + "median": 2235000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 2232000.0, + "q3": 2238000.0, + "min": 2229000.0, + "max": 2281000.0, + "mean": 2236419.64, + "stddev": 6104.69, + "ops_per_sec": 447.43, + "per_rep_median": [ + 2236000.0, + 2236000.0, + 2235000.0, + 2234000.0, + 2232000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 44557500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 12, + "timed_iters": 61, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 4094066.67, + "samples": 305, + "median": 4089000.0, + "mad": 4000.0, + "iqr": 8000.0, + "q1": 4086000.0, + "q3": 4094000.0, + "min": 4081000.0, + "max": 4148000.0, + "mean": 4091609.84, + "stddev": 8966.78, + "ops_per_sec": 244.56, + "per_rep_median": [ + 4087000.0, + 4091000.0, + 4091000.0, + 4089000.0, + 4089000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 83933000.0, + "samples": 150, + "median": 83877500.0, + "mad": 45500.0, + "iqr": 92750.0, + "q1": 83834250.0, + "q3": 83927000.0, + "min": 83736000.0, + "max": 87143000.0, + "mean": 83907006.67, + "stddev": 278703.82, + "ops_per_sec": 11.92, + "per_rep_median": [ + 83893000.0, + 83845000.0, + 83871500.0, + 83899000.0, + 83902500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 22, + "timed_iters": 112, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2238933.33, + "samples": 560, + "median": 2235000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 2233000.0, + "q3": 2239000.0, + "min": 2230000.0, + "max": 2281000.0, + "mean": 2236916.07, + "stddev": 6717.01, + "ops_per_sec": 447.43, + "per_rep_median": [ + 2235000.0, + 2235000.0, + 2235000.0, + 2235000.0, + 2235000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 90201500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 275, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 910428.57, + "samples": 1375, + "median": 876000.0, + "mad": 4000.0, + "iqr": 7000.0, + "q1": 873000.0, + "q3": 880000.0, + "min": 866000.0, + "max": 902000.0, + "mean": 876406.55, + "stddev": 5579.24, + "ops_per_sec": 1141.55, + "per_rep_median": [ + 880000.0, + 878000.0, + 876000.0, + 874000.0, + 869000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20857000.0, + "samples": 150, + "median": 20443500.0, + "mad": 38000.0, + "iqr": 143500.0, + "q1": 20413250.0, + "q3": 20556750.0, + "min": 20345000.0, + "max": 21318000.0, + "mean": 20520460.0, + "stddev": 195834.36, + "ops_per_sec": 48.92, + "per_rep_median": [ + 20535500.0, + 20462000.0, + 20405000.0, + 20424500.0, + 20742000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 43, + "timed_iters": 215, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1161258.06, + "samples": 1075, + "median": 1161000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 1159000.0, + "q3": 1165000.0, + "min": 1153000.0, + "max": 1192000.0, + "mean": 1162800.93, + "stddev": 5525.58, + "ops_per_sec": 861.33, + "per_rep_median": [ + 1165000.0, + 1161000.0, + 1163000.0, + 1160000.0, + 1160000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 22480500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56181000.0, + "samples": 150, + "median": 55632500.0, + "mad": 156500.0, + "iqr": 803000.0, + "q1": 55535250.0, + "q3": 56338250.0, + "min": 55339000.0, + "max": 62144000.0, + "mean": 56039573.33, + "stddev": 917812.73, + "ops_per_sec": 17.98, + "per_rep_median": [ + 55961500.0, + 55712000.0, + 56374500.0, + 55589500.0, + 55514500.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 423847000.0, + "samples": 150, + "median": 426258000.0, + "mad": 1788000.0, + "iqr": 3523250.0, + "q1": 424283250.0, + "q3": 427806500.0, + "min": 422798000.0, + "max": 650113000.0, + "mean": 428606166.67, + "stddev": 19057991.14, + "ops_per_sec": 2.35, + "per_rep_median": [ + 426448500.0, + 425156500.0, + 426407000.0, + 426086500.0, + 425362500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 125, + "timed_iters": 623, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 401094.49, + "samples": 3115, + "median": 401000.0, + "mad": 1000.0, + "iqr": 3000.0, + "q1": 400000.0, + "q3": 403000.0, + "min": 398000.0, + "max": 438000.0, + "mean": 402548.31, + "stddev": 4352.02, + "ops_per_sec": 2493.77, + "per_rep_median": [ + 401000.0, + 408000.0, + 400000.0, + 401000.0, + 400000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 482291500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 38, + "timed_iters": 190, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1313741.94, + "samples": 950, + "median": 1274000.0, + "mad": 3000.0, + "iqr": 7000.0, + "q1": 1272000.0, + "q3": 1279000.0, + "min": 1267000.0, + "max": 1312000.0, + "mean": 1276537.89, + "stddev": 7095.03, + "ops_per_sec": 784.93, + "per_rep_median": [ + 1272000.0, + 1272000.0, + 1273000.0, + 1285000.0, + 1275000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33814000.0, + "samples": 150, + "median": 33717500.0, + "mad": 41500.0, + "iqr": 86500.0, + "q1": 33662500.0, + "q3": 33749000.0, + "min": 33526000.0, + "max": 34247000.0, + "mean": 33718806.67, + "stddev": 116111.71, + "ops_per_sec": 29.66, + "per_rep_median": [ + 33725000.0, + 33607500.0, + 33704000.0, + 33738000.0, + 33731500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 139, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1802096.77, + "samples": 695, + "median": 1799000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 1797000.0, + "q3": 1803000.0, + "min": 1790000.0, + "max": 2422000.0, + "mean": 1802906.47, + "stddev": 32008.26, + "ops_per_sec": 555.86, + "per_rep_median": [ + 1802000.0, + 1799000.0, + 1799000.0, + 1797000.0, + 1800000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 36790500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3363400.0, + "samples": 370, + "median": 3365000.0, + "mad": 11000.0, + "iqr": 27000.0, + "q1": 3346000.0, + "q3": 3373000.0, + "min": 3324000.0, + "max": 3434000.0, + "mean": 3363167.57, + "stddev": 20715.23, + "ops_per_sec": 297.18, + "per_rep_median": [ + 3352000.0, + 3341000.0, + 3372000.0, + 3378000.0, + 3367000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69418000.0, + "samples": 150, + "median": 69270000.0, + "mad": 350000.0, + "iqr": 694000.0, + "q1": 68923500.0, + "q3": 69617500.0, + "min": 68669000.0, + "max": 85088000.0, + "mean": 69602146.67, + "stddev": 1591740.46, + "ops_per_sec": 14.44, + "per_rep_median": [ + 69357000.0, + 70152500.0, + 69511500.0, + 68913500.0, + 68867000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 137, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1827451.61, + "samples": 685, + "median": 1829000.0, + "mad": 3000.0, + "iqr": 9000.0, + "q1": 1826000.0, + "q3": 1835000.0, + "min": 1820000.0, + "max": 2022000.0, + "mean": 1835493.43, + "stddev": 19081.13, + "ops_per_sec": 546.75, + "per_rep_median": [ + 1828000.0, + 1829000.0, + 1827000.0, + 1828000.0, + 1853000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 74464000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2940, + "timed_iters": 14702, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 17004.89, + "samples": 73510, + "median": 17000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 17000.0, + "q3": 17000.0, + "min": 16000.0, + "max": 1674000.0, + "mean": 17107.01, + "stddev": 6489.14, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 17000.0, + 17000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 3022, + "timed_iters": 15110, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 16545.68, + "samples": 75550, + "median": 17000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 16000.0, + "q3": 17000.0, + "min": 16000.0, + "max": 33000.0, + "mean": 16564.67, + "stddev": 649.82, + "ops_per_sec": 58823.53, + "per_rep_median": [ + 17000.0, + 17000.0, + 17000.0, + 17000.0, + 17000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1090, + "timed_iters": 5452, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 45853.37, + "samples": 27260, + "median": 46000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 46000.0, + "q3": 46000.0, + "min": 45000.0, + "max": 66000.0, + "mean": 45833.49, + "stddev": 893.85, + "ops_per_sec": 21739.13, + "per_rep_median": [ + 46000.0, + 46000.0, + 46000.0, + 46000.0, + 46000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 1201, + "timed_iters": 6005, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 41633.43, + "samples": 30025, + "median": 42000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 41000.0, + "q3": 42000.0, + "min": 41000.0, + "max": 58000.0, + "mean": 41614.29, + "stddev": 810.77, + "ops_per_sec": 23809.52, + "per_rep_median": [ + 42000.0, + 42000.0, + 42000.0, + 42000.0, + 41000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 80000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 408, + "timed_iters": 2040, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 122556.86, + "samples": 10200, + "median": 122000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 122000.0, + "q3": 123000.0, + "min": 121000.0, + "max": 1048000.0, + "mean": 123149.8, + "stddev": 16044.19, + "ops_per_sec": 8196.72, + "per_rep_median": [ + 122000.0, + 122000.0, + 122000.0, + 122000.0, + 122000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 150, + "timed_iters": 751, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 332803.15, + "samples": 3755, + "median": 216000.0, + "mad": 125000.0, + "iqr": 250000.0, + "q1": 152000.0, + "q3": 402000.0, + "min": 90000.0, + "max": 1896000.0, + "mean": 303353.66, + "stddev": 244154.57, + "ops_per_sec": 4629.63, + "per_rep_median": [ + 215000.0, + 216000.0, + 216000.0, + 216000.0, + 216000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 667, + "timed_iters": 3336, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 74943.25, + "samples": 16680, + "median": 75000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 75000.0, + "q3": 75000.0, + "min": 74000.0, + "max": 94000.0, + "mean": 75104.98, + "stddev": 1022.59, + "ops_per_sec": 13333.33, + "per_rep_median": [ + 75000.0, + 75000.0, + 75000.0, + 75000.0, + 75000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 1376, + "timed_iters": 6879, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 36344.09, + "samples": 34395, + "median": 36000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 36000.0, + "q3": 37000.0, + "min": 35000.0, + "max": 376000.0, + "mean": 36486.76, + "stddev": 2534.27, + "ops_per_sec": 27777.78, + "per_rep_median": [ + 36000.0, + 36000.0, + 36000.0, + 36000.0, + 36000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 413000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 235, + "timed_iters": 1175, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 212800.0, + "samples": 5875, + "median": 213000.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 212000.0, + "q3": 214000.0, + "min": 209000.0, + "max": 1492000.0, + "mean": 215359.32, + "stddev": 31792.76, + "ops_per_sec": 4694.84, + "per_rep_median": [ + 212000.0, + 213000.0, + 213000.0, + 213000.0, + 213000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 88, + "timed_iters": 441, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 567158.73, + "samples": 2205, + "median": 395000.0, + "mad": 182000.0, + "iqr": 447000.0, + "q1": 217000.0, + "q3": 664000.0, + "min": 128000.0, + "max": 2813000.0, + "mean": 492819.05, + "stddev": 409201.29, + "ops_per_sec": 2531.65, + "per_rep_median": [ + 396000.0, + 395000.0, + 394000.0, + 396000.0, + 395000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 403, + "timed_iters": 2017, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 123917.65, + "samples": 10085, + "median": 124000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 124000.0, + "q3": 124000.0, + "min": 122000.0, + "max": 528000.0, + "mean": 124760.73, + "stddev": 9393.17, + "ops_per_sec": 8064.52, + "per_rep_median": [ + 124000.0, + 124000.0, + 124000.0, + 124000.0, + 124000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 936, + "timed_iters": 4678, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 53444.77, + "samples": 23390, + "median": 53000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 53000.0, + "q3": 54000.0, + "min": 53000.0, + "max": 67000.0, + "mean": 53485.38, + "stddev": 917.53, + "ops_per_sec": 18867.92, + "per_rep_median": [ + 53000.0, + 53000.0, + 53000.0, + 53000.0, + 53000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 732000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 163, + "timed_iters": 816, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 306511.81, + "samples": 4080, + "median": 305000.0, + "mad": 1000.0, + "iqr": 1000.0, + "q1": 305000.0, + "q3": 306000.0, + "min": 303000.0, + "max": 339000.0, + "mean": 305971.08, + "stddev": 2212.79, + "ops_per_sec": 3278.69, + "per_rep_median": [ + 305000.0, + 305000.0, + 305000.0, + 305000.0, + 306000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 95, + "timed_iters": 477, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 523650.79, + "samples": 2385, + "median": 435000.0, + "mad": 254000.0, + "iqr": 511000.0, + "q1": 182000.0, + "q3": 693000.0, + "min": 179000.0, + "max": 3130000.0, + "mean": 544083.86, + "stddev": 423898.64, + "ops_per_sec": 2298.85, + "per_rep_median": [ + 435000.0, + 433000.0, + 435000.0, + 437000.0, + 435000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 249, + "timed_iters": 1247, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 200443.14, + "samples": 6235, + "median": 199000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 199000.0, + "q3": 200000.0, + "min": 197000.0, + "max": 504000.0, + "mean": 199691.1, + "stddev": 4620.38, + "ops_per_sec": 5025.13, + "per_rep_median": [ + 199000.0, + 199000.0, + 199000.0, + 199000.0, + 200000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 640, + "timed_iters": 3201, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 78109.59, + "samples": 16005, + "median": 78000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 77000.0, + "q3": 78000.0, + "min": 77000.0, + "max": 95000.0, + "mean": 77894.85, + "stddev": 1090.28, + "ops_per_sec": 12820.51, + "per_rep_median": [ + 78000.0, + 78000.0, + 78000.0, + 78000.0, + 78000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 939000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 170, + "timed_iters": 851, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 293811.02, + "samples": 4255, + "median": 293000.0, + "mad": 2000.0, + "iqr": 3000.0, + "q1": 292000.0, + "q3": 295000.0, + "min": 281000.0, + "max": 316000.0, + "mean": 293494.24, + "stddev": 3050.72, + "ops_per_sec": 3412.97, + "per_rep_median": [ + 294000.0, + 293000.0, + 293000.0, + 293000.0, + 293000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 37, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6753428.57, + "samples": 185, + "median": 6778000.0, + "mad": 15000.0, + "iqr": 29000.0, + "q1": 6763000.0, + "q3": 6792000.0, + "min": 6728000.0, + "max": 6829000.0, + "mean": 6776967.57, + "stddev": 19973.87, + "ops_per_sec": 147.54, + "per_rep_median": [ + 6750000.0, + 6787000.0, + 6785000.0, + 6780000.0, + 6787000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 119, + "timed_iters": 593, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 421889.76, + "samples": 2965, + "median": 422000.0, + "mad": 5000.0, + "iqr": 11000.0, + "q1": 416000.0, + "q3": 427000.0, + "min": 397000.0, + "max": 447000.0, + "mean": 421000.0, + "stddev": 7597.1, + "ops_per_sec": 2369.67, + "per_rep_median": [ + 422000.0, + 421000.0, + 422000.0, + 422000.0, + 422000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 119, + "timed_iters": 596, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 419629.92, + "samples": 2980, + "median": 422000.0, + "mad": 5000.0, + "iqr": 11000.0, + "q1": 416000.0, + "q3": 427000.0, + "min": 399000.0, + "max": 449000.0, + "mean": 420983.89, + "stddev": 7607.55, + "ops_per_sec": 2369.67, + "per_rep_median": [ + 422000.0, + 422000.0, + 422000.0, + 421000.0, + 421000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 7493000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 3, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18585000.0, + "samples": 150, + "median": 18576000.0, + "mad": 20000.0, + "iqr": 38000.0, + "q1": 18559000.0, + "q3": 18597000.0, + "min": 18488000.0, + "max": 18656000.0, + "mean": 18576520.0, + "stddev": 30898.13, + "ops_per_sec": 53.83, + "per_rep_median": [ + 18559500.0, + 18583500.0, + 18578000.0, + 18561500.0, + 18586500.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 140507000.0, + "samples": 150, + "median": 140634500.0, + "mad": 85000.0, + "iqr": 168000.0, + "q1": 140537750.0, + "q3": 140705750.0, + "min": 140268000.0, + "max": 148070000.0, + "mean": 140734473.33, + "stddev": 709279.53, + "ops_per_sec": 7.11, + "per_rep_median": [ + 140634500.0, + 140651000.0, + 140624000.0, + 140628000.0, + 140636500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 355, + "timed_iters": 1776, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 140745.1, + "samples": 8880, + "median": 140000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 138000.0, + "q3": 142000.0, + "min": 133000.0, + "max": 160000.0, + "mean": 140243.13, + "stddev": 2855.89, + "ops_per_sec": 7142.86, + "per_rep_median": [ + 140000.0, + 140000.0, + 140000.0, + 140000.0, + 140000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 357, + "timed_iters": 1787, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 139886.27, + "samples": 8935, + "median": 140000.0, + "mad": 2000.0, + "iqr": 4000.0, + "q1": 138000.0, + "q3": 142000.0, + "min": 133000.0, + "max": 161000.0, + "mean": 140330.95, + "stddev": 2894.7, + "ops_per_sec": 7142.86, + "per_rep_median": [ + 140000.0, + 140000.0, + 140000.0, + 141000.0, + 140000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 159350500.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 116, + "timed_iters": 579, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 431874.02, + "samples": 2895, + "median": 432000.0, + "mad": 3000.0, + "iqr": 5500.0, + "q1": 429500.0, + "q3": 435000.0, + "min": 425000.0, + "max": 458000.0, + "mean": 432393.09, + "stddev": 4027.58, + "ops_per_sec": 2314.81, + "per_rep_median": [ + 432000.0, + 432000.0, + 432000.0, + 432000.0, + 431000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 12017000.0, + "samples": 150, + "median": 11964000.0, + "mad": 17000.0, + "iqr": 33000.0, + "q1": 11945000.0, + "q3": 11978000.0, + "min": 11898000.0, + "max": 12044000.0, + "mean": 11964293.33, + "stddev": 25882.68, + "ops_per_sec": 83.58, + "per_rep_median": [ + 11976000.0, + 11964000.0, + 11953000.0, + 11964000.0, + 11967500.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 76, + "timed_iters": 382, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 653730.16, + "samples": 1910, + "median": 656000.0, + "mad": 9000.0, + "iqr": 19000.0, + "q1": 646000.0, + "q3": 665000.0, + "min": 616000.0, + "max": 697000.0, + "mean": 655508.38, + "stddev": 13432.82, + "ops_per_sec": 1524.39, + "per_rep_median": [ + 658000.0, + 657000.0, + 657000.0, + 654000.0, + 655000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 77, + "timed_iters": 383, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 652904.76, + "samples": 1915, + "median": 658000.0, + "mad": 9000.0, + "iqr": 17000.0, + "q1": 649000.0, + "q3": 666000.0, + "min": 620000.0, + "max": 695000.0, + "mean": 657271.02, + "stddev": 12546.35, + "ops_per_sec": 1519.76, + "per_rep_median": [ + 657000.0, + 657000.0, + 657000.0, + 657000.0, + 659000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 13052000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 43, + "timed_iters": 216, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1157677.42, + "samples": 1080, + "median": 1156000.0, + "mad": 3000.0, + "iqr": 6000.0, + "q1": 1153000.0, + "q3": 1159000.0, + "min": 1147000.0, + "max": 1190000.0, + "mean": 1156858.33, + "stddev": 5198.14, + "ops_per_sec": 865.05, + "per_rep_median": [ + 1156500.0, + 1156000.0, + 1156000.0, + 1156000.0, + 1154000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24841666.67, + "samples": 150, + "median": 24799000.0, + "mad": 22500.0, + "iqr": 44000.0, + "q1": 24775000.0, + "q3": 24819000.0, + "min": 24732000.0, + "max": 27482000.0, + "mean": 24826700.0, + "stddev": 259275.29, + "ops_per_sec": 40.32, + "per_rep_median": [ + 24817000.0, + 24804000.0, + 24783500.0, + 24777000.0, + 24800000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 365, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 684047.62, + "samples": 1825, + "median": 683000.0, + "mad": 7000.0, + "iqr": 13000.0, + "q1": 676000.0, + "q3": 689000.0, + "min": 654000.0, + "max": 3363000.0, + "mean": 690552.33, + "stddev": 100563.55, + "ops_per_sec": 1464.13, + "per_rep_median": [ + 682000.0, + 683000.0, + 683000.0, + 683000.0, + 684000.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 366, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 683968.25, + "samples": 1830, + "median": 681000.0, + "mad": 6000.0, + "iqr": 13000.0, + "q1": 674000.0, + "q3": 687000.0, + "min": 648000.0, + "max": 720000.0, + "mean": 681113.66, + "stddev": 9629.05, + "ops_per_sec": 1468.43, + "per_rep_median": [ + 681000.0, + 681000.0, + 680500.0, + 680000.0, + 681000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 26638000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4647, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10760.68, + "samples": 100000, + "median": 11000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 10000.0, + "q3": 11000.0, + "min": 9000.0, + "max": 38000.0, + "mean": 10724.57, + "stddev": 597.5, + "ops_per_sec": 90909.09, + "per_rep_median": [ + 11000.0, + 11000.0, + 11000.0, + 11000.0, + 11000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5739, + "timed_iters": 20000, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8712.09, + "samples": 100000, + "median": 9000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 8000.0, + "q3": 9000.0, + "min": 8000.0, + "max": 28000.0, + "mean": 8749.49, + "stddev": 548.34, + "ops_per_sec": 111111.11, + "per_rep_median": [ + 9000.0, + 9000.0, + 9000.0, + 9000.0, + 9000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1292, + "timed_iters": 6459, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 38705.77, + "samples": 32295, + "median": 39000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 38000.0, + "q3": 39000.0, + "min": 38000.0, + "max": 56000.0, + "mean": 38618.58, + "stddev": 871.53, + "ops_per_sec": 25641.03, + "per_rep_median": [ + 39000.0, + 39000.0, + 39000.0, + 39000.0, + 39000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 59000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1668, + "timed_iters": 8338, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 29982.4, + "samples": 41690, + "median": 30000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 29000.0, + "q3": 30000.0, + "min": 27000.0, + "max": 51000.0, + "mean": 29759.92, + "stddev": 769.32, + "ops_per_sec": 33333.33, + "per_rep_median": [ + 30000.0, + 30000.0, + 30000.0, + 30000.0, + 30000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 628, + "timed_iters": 3139, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 79632.09, + "samples": 15695, + "median": 66000.0, + "mad": 26000.0, + "iqr": 52000.0, + "q1": 50000.0, + "q3": 102000.0, + "min": 38000.0, + "max": 2000000.0, + "mean": 83811.28, + "stddev": 56422.14, + "ops_per_sec": 15151.52, + "per_rep_median": [ + 68000.0, + 66000.0, + 66000.0, + 66000.0, + 65000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1987, + "timed_iters": 9937, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25158.77, + "samples": 49685, + "median": 25000.0, + "mad": 0.0, + "iqr": 0.0, + "q1": 25000.0, + "q3": 25000.0, + "min": 24000.0, + "max": 49000.0, + "mean": 25141.43, + "stddev": 602.93, + "ops_per_sec": 40000.0, + "per_rep_median": [ + 25000.0, + 25000.0, + 25000.0, + 25000.0, + 25000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 121000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1007, + "timed_iters": 5036, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 49639.3, + "samples": 25180, + "median": 50000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 49000.0, + "q3": 50000.0, + "min": 48000.0, + "max": 334000.0, + "mean": 49917.43, + "stddev": 4871.2, + "ops_per_sec": 20000.0, + "per_rep_median": [ + 50000.0, + 50000.0, + 50000.0, + 50000.0, + 50000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 374, + "timed_iters": 1870, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 133698.04, + "samples": 9350, + "median": 104000.0, + "mad": 35000.0, + "iqr": 80000.0, + "q1": 74000.0, + "q3": 154000.0, + "min": 59000.0, + "max": 795000.0, + "mean": 124972.83, + "stddev": 72357.42, + "ops_per_sec": 9615.38, + "per_rep_median": [ + 104000.0, + 105000.0, + 103000.0, + 105000.0, + 104000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 1170, + "timed_iters": 5852, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 42720.43, + "samples": 29260, + "median": 43000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 42000.0, + "q3": 43000.0, + "min": 42000.0, + "max": 105000.0, + "mean": 42817.84, + "stddev": 1130.91, + "ops_per_sec": 23255.81, + "per_rep_median": [ + 43000.0, + 43000.0, + 43000.0, + 43000.0, + 43000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 197000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 627, + "timed_iters": 3137, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 79688.85, + "samples": 15685, + "median": 79000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 79000.0, + "q3": 80000.0, + "min": 75000.0, + "max": 240000.0, + "mean": 79652.73, + "stddev": 2392.38, + "ops_per_sec": 12658.23, + "per_rep_median": [ + 79000.0, + 79000.0, + 79000.0, + 79000.0, + 79000.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 307, + "timed_iters": 1537, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 162670.59, + "samples": 7685, + "median": 141000.0, + "mad": 45000.0, + "iqr": 91000.0, + "q1": 101000.0, + "q3": 192000.0, + "min": 94000.0, + "max": 2068000.0, + "mean": 163484.71, + "stddev": 82890.5, + "ops_per_sec": 7092.2, + "per_rep_median": [ + 140000.0, + 140000.0, + 141000.0, + 139000.0, + 141000.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 709, + "timed_iters": 3543, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 70553.82, + "samples": 17715, + "median": 70000.0, + "mad": 0.0, + "iqr": 1000.0, + "q1": 70000.0, + "q3": 71000.0, + "min": 69000.0, + "max": 109000.0, + "mean": 70440.3, + "stddev": 1121.89, + "ops_per_sec": 14285.71, + "per_rep_median": [ + 70000.0, + 70000.0, + 70000.0, + 70000.0, + 70000.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 290000.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 700000.0, + "p95": 711050.0, + "min": 695000.0, + "max": 730000.0, + "mean": 701635.0, + "stddev": 4339.4 + }, + "handshakes_per_sec": 1428.6, + "bytes_on_wire": { + "client_to_server": 297, + "server_to_client": 1212, + "total": 1509 + }, + "client_hello_bytes": 217, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 471000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 45000.0, + "subtotal_ns": 45000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 126000.0, + "subtotal_ns": 252000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 862000.0, + "p95": 875000.0, + "min": 856000.0, + "max": 916000.0, + "mean": 863449.0, + "stddev": 5542.8 + }, + "handshakes_per_sec": 1160.1, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 2300, + "total": 3773 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 524000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 45000.0, + "subtotal_ns": 45000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 126000.0, + "subtotal_ns": 252000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 852000.0, + "p95": 865000.0, + "min": 845000.0, + "max": 897000.0, + "mean": 853286.0, + "stddev": 6259.2 + }, + "handshakes_per_sec": 1173.7, + "bytes_on_wire": { + "client_to_server": 1506, + "server_to_client": 2333, + "total": 3839 + }, + "client_hello_bytes": 1426, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 45000.0, + "subtotal_ns": 45000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 126000.0, + "subtotal_ns": 252000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 624000.0, + "p95": 635000.0, + "min": 619000.0, + "max": 656000.0, + "mean": 625332.0, + "stddev": 4839.5 + }, + "handshakes_per_sec": 1602.6, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 1948, + "total": 3005 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 331000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 45000.0, + "subtotal_ns": 45000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 126000.0, + "subtotal_ns": 252000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 674000.0, + "p95": 687000.0, + "min": 669000.0, + "max": 700000.0, + "mean": 675599.0, + "stddev": 4754.5 + }, + "handshakes_per_sec": 1483.7, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 2268, + "total": 3709 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 350000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 45000.0, + "subtotal_ns": 45000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 126000.0, + "subtotal_ns": 252000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 734000.0, + "p95": 745050.0, + "min": 728000.0, + "max": 767000.0, + "mean": 735365.0, + "stddev": 5025.8 + }, + "handshakes_per_sec": 1362.4, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 2748, + "total": 4573 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 377000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 45000.0, + "subtotal_ns": 45000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 126000.0, + "subtotal_ns": 252000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1155000.0, + "p95": 1949000.0, + "min": 969000.0, + "max": 3710000.0, + "mean": 1293940.0, + "stddev": 359159.3 + }, + "handshakes_per_sec": 865.8, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 8318, + "total": 9791 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 578000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1538000.0, + "p95": 2890150.0, + "min": 1165000.0, + "max": 5132000.0, + "mean": 1704022.0, + "stddev": 597968.6 + }, + "handshakes_per_sec": 650.2, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 10736, + "total": 12209 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 818500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1832000.0, + "p95": 3254000.0, + "min": 1473000.0, + "max": 6066000.0, + "mean": 2008946.0, + "stddev": 617607.2 + }, + "handshakes_per_sec": 545.9, + "bytes_on_wire": { + "client_to_server": 1473, + "server_to_client": 14012, + "total": 15485 + }, + "client_hello_bytes": 1393, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1062000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 929000.0, + "p95": 1702000.0, + "min": 730000.0, + "max": 5747000.0, + "mean": 1056465.0, + "stddev": 368604.1 + }, + "handshakes_per_sec": 1076.4, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 7966, + "total": 9023 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 385000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1300000.0, + "p95": 2538050.0, + "min": 928000.0, + "max": 4037000.0, + "mean": 1442774.0, + "stddev": 541900.7 + }, + "handshakes_per_sec": 769.2, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 10384, + "total": 11441 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 625500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1598000.0, + "p95": 2869100.0, + "min": 1237000.0, + "max": 5306000.0, + "mean": 1784045.0, + "stddev": 597516.2 + }, + "handshakes_per_sec": 625.8, + "bytes_on_wire": { + "client_to_server": 1057, + "server_to_client": 13660, + "total": 14717 + }, + "client_hello_bytes": 977, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 869000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 963500.0, + "p95": 1792550.0, + "min": 780000.0, + "max": 3517000.0, + "mean": 1097422.0, + "stddev": 346411.1 + }, + "handshakes_per_sec": 1037.9, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 8286, + "total": 9727 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 404000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1347000.0, + "p95": 2582000.0, + "min": 978000.0, + "max": 4903000.0, + "mean": 1477988.0, + "stddev": 547663.4 + }, + "handshakes_per_sec": 742.4, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 10704, + "total": 12145 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 644500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1645000.0, + "p95": 3062100.0, + "min": 1285000.0, + "max": 5720000.0, + "mean": 1830883.0, + "stddev": 604470.0 + }, + "handshakes_per_sec": 607.9, + "bytes_on_wire": { + "client_to_server": 1441, + "server_to_client": 13980, + "total": 15421 + }, + "client_hello_bytes": 1361, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 888000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1026000.0, + "p95": 1841150.0, + "min": 842000.0, + "max": 3498000.0, + "mean": 1155578.0, + "stddev": 347373.9 + }, + "handshakes_per_sec": 974.7, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 8766, + "total": 10591 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 431000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1417000.0, + "p95": 2779000.0, + "min": 1042000.0, + "max": 5851000.0, + "mean": 1594925.0, + "stddev": 619110.3 + }, + "handshakes_per_sec": 705.7, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 11184, + "total": 13009 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 671500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1705000.0, + "p95": 2964050.0, + "min": 1346000.0, + "max": 6325000.0, + "mean": 1859099.0, + "stddev": 608015.4 + }, + "handshakes_per_sec": 586.5, + "bytes_on_wire": { + "client_to_server": 1825, + "server_to_client": 14460, + "total": 16285 + }, + "client_hello_bytes": 1745, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 915000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1172500.0, + "p95": 1955000.0, + "min": 980000.0, + "max": 3270000.0, + "mean": 1301462.0, + "stddev": 336318.4 + }, + "handshakes_per_sec": 852.9, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 8316, + "total": 9865 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 578000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1548000.0, + "p95": 2794100.0, + "min": 1176000.0, + "max": 4766000.0, + "mean": 1687803.0, + "stddev": 574189.2 + }, + "handshakes_per_sec": 646.0, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 10734, + "total": 12283 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 818500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1845000.0, + "p95": 3095050.0, + "min": 1486000.0, + "max": 7336000.0, + "mean": 2015174.0, + "stddev": 609867.6 + }, + "handshakes_per_sec": 542.0, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 14010, + "total": 15559 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1062000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1679000.0, + "p95": 1695000.0, + "min": 1661000.0, + "max": 1892000.0, + "mean": 1680806.0, + "stddev": 10855.5 + }, + "handshakes_per_sec": 595.6, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 4365, + "total": 5914 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 495000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 206000.0, + "subtotal_ns": 206000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31000.0, + "subtotal_ns": 62000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 25109500.0, + "p95": 25706050.0, + "min": 24398000.0, + "max": 34528000.0, + "mean": 25174696.0, + "stddev": 499625.8 + }, + "handshakes_per_sec": 39.8, + "bytes_on_wire": { + "client_to_server": 1549, + "server_to_client": 36417, + "total": 37966 + }, + "client_hello_bytes": 1469, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 22992500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 44000.0, + "subtotal_ns": 88000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 20443500.0, + "subtotal_ns": 20443500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 1161000.0, + "subtotal_ns": 2322000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1164000.0, + "p95": 2027150.0, + "min": 971000.0, + "max": 3256000.0, + "mean": 1289007.0, + "stddev": 348314.5 + }, + "handshakes_per_sec": 859.1, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 8349, + "total": 9931 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1541000.0, + "p95": 2808250.0, + "min": 1170000.0, + "max": 5098000.0, + "mean": 1683775.0, + "stddev": 553992.0 + }, + "handshakes_per_sec": 648.9, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 10767, + "total": 12349 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1837000.0, + "p95": 3079050.0, + "min": 1478000.0, + "max": 5424000.0, + "mean": 1991807.0, + "stddev": 576081.4 + }, + "handshakes_per_sec": 544.4, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 14043, + "total": 15625 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1667000.0, + "p95": 1682000.0, + "min": 1653000.0, + "max": 1714000.0, + "mean": 1669042.0, + "stddev": 7630.0 + }, + "handshakes_per_sec": 599.9, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 4396, + "total": 5978 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 206000.0, + "subtotal_ns": 206000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31000.0, + "subtotal_ns": 62000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24923000.0, + "p95": 25430000.0, + "min": 24253000.0, + "max": 27939000.0, + "mean": 24963486.0, + "stddev": 360805.2 + }, + "handshakes_per_sec": 40.1, + "bytes_on_wire": { + "client_to_server": 1582, + "server_to_client": 36450, + "total": 38032 + }, + "client_hello_bytes": 1502, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 20443500.0, + "subtotal_ns": 20443500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 1161000.0, + "subtotal_ns": 2322000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 924000.0, + "p95": 1643550.0, + "min": 745000.0, + "max": 3206000.0, + "mean": 1029776.0, + "stddev": 330459.6 + }, + "handshakes_per_sec": 1082.3, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 7964, + "total": 9097 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 385000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1314000.0, + "p95": 2564250.0, + "min": 943000.0, + "max": 5012000.0, + "mean": 1466099.0, + "stddev": 581826.3 + }, + "handshakes_per_sec": 761.0, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 10382, + "total": 11515 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 625500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1608000.0, + "p95": 3025100.0, + "min": 1248000.0, + "max": 5499000.0, + "mean": 1803413.0, + "stddev": 628965.3 + }, + "handshakes_per_sec": 621.9, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 13658, + "total": 14791 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 869000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1436000.0, + "p95": 1451000.0, + "min": 1421000.0, + "max": 1608000.0, + "mean": 1437680.0, + "stddev": 11361.1 + }, + "handshakes_per_sec": 696.4, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 4016, + "total": 5149 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 302000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 206000.0, + "subtotal_ns": 206000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31000.0, + "subtotal_ns": 62000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24634000.0, + "p95": 25177250.0, + "min": 24072000.0, + "max": 78107000.0, + "mean": 24743382.0, + "stddev": 1792214.3 + }, + "handshakes_per_sec": 40.6, + "bytes_on_wire": { + "client_to_server": 1133, + "server_to_client": 36065, + "total": 37198 + }, + "client_hello_bytes": 1053, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 22799500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 10000.0, + "subtotal_ns": 10000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 11000.0, + "subtotal_ns": 11000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 13000.0, + "subtotal_ns": 13000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 20443500.0, + "subtotal_ns": 20443500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 1161000.0, + "subtotal_ns": 2322000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 976000.0, + "p95": 1690400.0, + "min": 793000.0, + "max": 3842000.0, + "mean": 1086542.0, + "stddev": 322760.7 + }, + "handshakes_per_sec": 1024.6, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 8284, + "total": 9801 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 404000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1359000.0, + "p95": 2475600.0, + "min": 990000.0, + "max": 4670000.0, + "mean": 1470229.0, + "stddev": 523264.0 + }, + "handshakes_per_sec": 735.8, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 10702, + "total": 12219 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 644500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1654000.0, + "p95": 2936000.0, + "min": 1296000.0, + "max": 5543000.0, + "mean": 1807310.0, + "stddev": 572134.2 + }, + "handshakes_per_sec": 604.6, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 13978, + "total": 15495 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 888000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1484000.0, + "p95": 1499000.0, + "min": 1472000.0, + "max": 1519000.0, + "mean": 1485462.0, + "stddev": 7073.2 + }, + "handshakes_per_sec": 673.9, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 4333, + "total": 5850 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 321000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 206000.0, + "subtotal_ns": 206000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31000.0, + "subtotal_ns": 62000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24717000.0, + "p95": 25238400.0, + "min": 24114000.0, + "max": 28024000.0, + "mean": 24736136.0, + "stddev": 343573.8 + }, + "handshakes_per_sec": 40.5, + "bytes_on_wire": { + "client_to_server": 1517, + "server_to_client": 36385, + "total": 37902 + }, + "client_hello_bytes": 1437, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 22818500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 17000.0, + "subtotal_ns": 17000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 20000.0, + "subtotal_ns": 20000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 20443500.0, + "subtotal_ns": 20443500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 1161000.0, + "subtotal_ns": 2322000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1044000.0, + "p95": 1826150.0, + "min": 855000.0, + "max": 3500000.0, + "mean": 1170378.0, + "stddev": 334859.8 + }, + "handshakes_per_sec": 957.9, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 8764, + "total": 10665 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 431000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 217000.0, + "subtotal_ns": 217000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 67000.0, + "subtotal_ns": 134000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1423000.0, + "p95": 2660050.0, + "min": 1052000.0, + "max": 4633000.0, + "mean": 1564442.0, + "stddev": 565431.1 + }, + "handshakes_per_sec": 702.7, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 11182, + "total": 13083 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 671500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 373500.0, + "subtotal_ns": 373500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 109000.0, + "subtotal_ns": 218000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1722000.0, + "p95": 3141000.0, + "min": 1362000.0, + "max": 5448000.0, + "mean": 1884498.0, + "stddev": 592270.6 + }, + "handshakes_per_sec": 580.7, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 14458, + "total": 16359 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 915000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 475000.0, + "subtotal_ns": 475000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 180000.0, + "subtotal_ns": 360000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1544000.0, + "p95": 1559000.0, + "min": 1530000.0, + "max": 1590000.0, + "mean": 1544990.0, + "stddev": 7399.4 + }, + "handshakes_per_sec": 647.7, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 4814, + "total": 6715 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 348000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 206000.0, + "subtotal_ns": 206000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 31000.0, + "subtotal_ns": 62000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 24799000.0, + "p95": 25211150.0, + "min": 24100000.0, + "max": 34140000.0, + "mean": 24816878.0, + "stddev": 424920.8 + }, + "handshakes_per_sec": 40.3, + "bytes_on_wire": { + "client_to_server": 1901, + "server_to_client": 36865, + "total": 38766 + }, + "client_hello_bytes": 1821, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 22845500.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 24000.0, + "subtotal_ns": 24000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 26000.0, + "subtotal_ns": 26000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 30000.0, + "subtotal_ns": 30000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 20443500.0, + "subtotal_ns": 20443500.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 1161000.0, + "subtotal_ns": 2322000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 257000.0, + "p95": 263000.0, + "min": 255000.0, + "max": 275000.0, + "mean": 257357.0, + "stddev": 2349.3 + }, + "handshakes_per_sec": 3891.1, + "bytes_on_wire": { + "client_to_server": 312, + "server_to_client": 824, + "total": 1136 + }, + "client_hello_bytes": 232, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 163000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 11000.0, + "subtotal_ns": 22000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 27000.0, + "subtotal_ns": 54000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 39000.0, + "subtotal_ns": 78000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 314000.0, + "p95": 319000.0, + "min": 312000.0, + "max": 335000.0, + "mean": 314269.0, + "stddev": 2173.8 + }, + "handshakes_per_sec": 3184.7, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 1912, + "total": 3408 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 209000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 11000.0, + "subtotal_ns": 22000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 27000.0, + "subtotal_ns": 54000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 39000.0, + "subtotal_ns": 78000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 358000.0, + "p95": 366000.0, + "min": 356000.0, + "max": 430000.0, + "mean": 359359.0, + "stddev": 4106.0 + }, + "handshakes_per_sec": 2793.3, + "bytes_on_wire": { + "client_to_server": 1529, + "server_to_client": 1945, + "total": 3474 + }, + "client_hello_bytes": 1449, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 249000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 13000.0, + "subtotal_ns": 26000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 45000.0, + "subtotal_ns": 90000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 39000.0, + "subtotal_ns": 78000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 237000.0, + "p95": 239000.0, + "min": 235000.0, + "max": 264000.0, + "mean": 237409.0, + "stddev": 1791.3 + }, + "handshakes_per_sec": 4219.4, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 1880, + "total": 3344 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 133000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 39000.0, + "subtotal_ns": 78000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 258000.0, + "p95": 264000.0, + "min": 256000.0, + "max": 294000.0, + "mean": 259092.0, + "stddev": 2686.8 + }, + "handshakes_per_sec": 3876.0, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 2360, + "total": 4208 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 152000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 19000.0, + "subtotal_ns": 19000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 9000.0, + "subtotal_ns": 9000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 39000.0, + "subtotal_ns": 78000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 369000.0, + "p95": 489000.0, + "min": 337000.0, + "max": 636000.0, + "mean": 384450.0, + "stddev": 48581.4 + }, + "handshakes_per_sec": 2710.0, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 7930, + "total": 9426 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 238000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 11000.0, + "subtotal_ns": 22000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 27000.0, + "subtotal_ns": 54000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 66000.0, + "subtotal_ns": 66000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 25000.0, + "subtotal_ns": 50000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 445000.0, + "p95": 601050.0, + "min": 400000.0, + "max": 1062000.0, + "mean": 463897.0, + "stddev": 71549.4 + }, + "handshakes_per_sec": 2247.2, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 10348, + "total": 11844 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 312000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 11000.0, + "subtotal_ns": 22000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 27000.0, + "subtotal_ns": 54000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 552000.0, + "p95": 730000.0, + "min": 503000.0, + "max": 1107000.0, + "mean": 573947.0, + "stddev": 77943.0 + }, + "handshakes_per_sec": 1811.6, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 13624, + "total": 15120 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 403000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 11000.0, + "subtotal_ns": 22000.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 27000.0, + "subtotal_ns": 54000.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 141000.0, + "subtotal_ns": 141000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 70000.0, + "subtotal_ns": 140000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 286000.0, + "p95": 397050.0, + "min": 259000.0, + "max": 621000.0, + "mean": 302235.0, + "stddev": 50247.9 + }, + "handshakes_per_sec": 3496.5, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 7898, + "total": 9362 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 162000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 66000.0, + "subtotal_ns": 66000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 25000.0, + "subtotal_ns": 50000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 371000.0, + "p95": 532050.0, + "min": 324000.0, + "max": 812000.0, + "mean": 391007.0, + "stddev": 71815.9 + }, + "handshakes_per_sec": 2695.4, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 10316, + "total": 11780 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 236000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 475000.0, + "p95": 666050.0, + "min": 426000.0, + "max": 1012000.0, + "mean": 499969.0, + "stddev": 82626.8 + }, + "handshakes_per_sec": 2105.3, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 13592, + "total": 15056 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 327000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 14000.0, + "subtotal_ns": 14000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 16000.0, + "subtotal_ns": 16000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 141000.0, + "subtotal_ns": 141000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 70000.0, + "subtotal_ns": 140000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 310000.0, + "p95": 429050.0, + "min": 281000.0, + "max": 641000.0, + "mean": 326276.0, + "stddev": 49025.8 + }, + "handshakes_per_sec": 3225.8, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 8378, + "total": 10226 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 181000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 19000.0, + "subtotal_ns": 19000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 66000.0, + "subtotal_ns": 66000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 25000.0, + "subtotal_ns": 50000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 383500.0, + "p95": 560000.0, + "min": 344000.0, + "max": 842000.0, + "mean": 407482.0, + "stddev": 69083.1 + }, + "handshakes_per_sec": 2607.6, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 10796, + "total": 12644 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 255000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 19000.0, + "subtotal_ns": 19000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 104000.0, + "subtotal_ns": 104000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 43000.0, + "subtotal_ns": 86000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 492000.0, + "p95": 665100.0, + "min": 446000.0, + "max": 1323000.0, + "mean": 513992.0, + "stddev": 79837.0 + }, + "handshakes_per_sec": 2032.5, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 14072, + "total": 15920 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 346000.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 19000.0, + "subtotal_ns": 19000.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23000.0, + "subtotal_ns": 23000.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 141000.0, + "subtotal_ns": 141000.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 70000.0, + "subtotal_ns": 140000.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260608T223040Z.json b/tools/benchmarks/pqc/results/rasberrypi5-20260608T223040Z.json new file mode 100644 index 0000000..486cf86 --- /dev/null +++ b/tools/benchmarks/pqc/results/rasberrypi5-20260608T223040Z.json @@ -0,0 +1,5152 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-06-08T22:39:28Z", + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "host": { + "hostname": "rasberrypi5", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.12.47+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454684672 + }, + "cpu_features": { + "source": "/proc/cpuinfo", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-06-08T22:30:40Z", + "timestamp_end_utc": "2026-06-08T22:39:28Z", + "duration_s": 528, + "governor_requested": "performance", + "governor_before": "performance", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.12.47+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1780957840, + 2400027136, + 56.5, + "0x0" + ], + [ + 1780957840, + 2400023808, + 56.0, + "0x0" + ], + [ + 1780957841, + 2400027136, + 57.1, + "0x0" + ], + [ + 1780957842, + 2400027136, + 57.1, + "0x0" + ], + [ + 1780957843, + 2400027136, + 57.1, + "0x0" + ], + [ + 1780957844, + 2400033792, + 58.2, + "0x0" + ], + [ + 1780957845, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780957846, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957847, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957848, + 2400023808, + 58.2, + "0x0" + ], + [ + 1780957849, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780957850, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957851, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957852, + 2400037120, + 58.2, + "0x0" + ], + [ + 1780957853, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957854, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780957855, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780957856, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957857, + 2400017408, + 58.2, + "0x0" + ], + [ + 1780957858, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780957859, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957860, + 2400017408, + 58.2, + "0x0" + ], + [ + 1780957861, + 2400027136, + 57.6, + "0x0" + ], + [ + 1780957862, + 2400037120, + 58.7, + "0x0" + ], + [ + 1780957863, + 2400033792, + 58.7, + "0x0" + ], + [ + 1780957864, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957865, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957866, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780957867, + 2400023808, + 58.2, + "0x0" + ], + [ + 1780957868, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957869, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957870, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957871, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957872, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780957873, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780957875, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957876, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780957877, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780957878, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957879, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957880, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957881, + 2400030464, + 58.2, + "0x0" + ], + [ + 1780957882, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780957883, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957884, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957885, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780957886, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780957887, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780957888, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780957889, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957890, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957891, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957892, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780957893, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957894, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957895, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780957896, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780957897, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780957898, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957899, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957900, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780957901, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957902, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957903, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957904, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957905, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780957906, + 2400030464, + 60.4, + "0x0" + ], + [ + 1780957907, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957908, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780957909, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957910, + 2400027136, + 60.4, + "0x0" + ], + [ + 1780957911, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957912, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957913, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957914, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957915, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957916, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957917, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957918, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957919, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957920, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780957921, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957922, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780957923, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780957924, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957925, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957926, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780957927, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957928, + 2400027136, + 60.4, + "0x0" + ], + [ + 1780957930, + 2400030464, + 60.4, + "0x0" + ], + [ + 1780957931, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780957932, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957933, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957934, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780957935, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957936, + 2400033792, + 60.4, + "0x0" + ], + [ + 1780957937, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957938, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957939, + 2400017408, + 60.4, + "0x0" + ], + [ + 1780957940, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780957941, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780957942, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957943, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780957944, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957945, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957946, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957947, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957948, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957949, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957950, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957951, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957952, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957953, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957954, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957955, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957956, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780957957, + 2400027136, + 60.9, + "0x0" + ], + [ + 1780957958, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957959, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780957960, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780957961, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957962, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780957963, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957964, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780957965, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957966, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780957967, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780957968, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957969, + 2400030464, + 60.4, + "0x0" + ], + [ + 1780957970, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957971, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957972, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780957973, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780957974, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780957975, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780957976, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780957977, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957978, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780957979, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957980, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780957981, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780957982, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780957984, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780957985, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780957986, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957987, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957988, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957989, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957990, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957991, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957992, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957993, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780957994, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780957995, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780957996, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780957997, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780957998, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780957999, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958000, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958001, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958002, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958003, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958004, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958005, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958006, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958007, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958008, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958009, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958010, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958011, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958012, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958013, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958014, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958015, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958016, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958017, + 2400020480, + 58.2, + "0x0" + ], + [ + 1780958018, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958019, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958020, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958021, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958022, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958023, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958024, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958025, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958026, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958027, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958028, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958029, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958030, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958031, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958032, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958033, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958034, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958035, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780958036, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958037, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958039, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958040, + 2400037120, + 58.7, + "0x0" + ], + [ + 1780958041, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780958042, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958043, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958044, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958045, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958046, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958047, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958048, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958049, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958050, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958051, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958052, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958053, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958054, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958055, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958056, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958057, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958058, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958059, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958060, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958061, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958062, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958063, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780958064, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958065, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958066, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958067, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958068, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958069, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958070, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958071, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958072, + 2400037120, + 58.7, + "0x0" + ], + [ + 1780958073, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958074, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780958075, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780958076, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958077, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958078, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780958079, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958080, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780958081, + 2400037120, + 58.7, + "0x0" + ], + [ + 1780958082, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958083, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780958084, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958085, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780958086, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958088, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958089, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958090, + 2400037120, + 60.4, + "0x0" + ], + [ + 1780958091, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958092, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958093, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958094, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958095, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958096, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958097, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958098, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958099, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958100, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958101, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958102, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958103, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958104, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958105, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958106, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958107, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958108, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958109, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780958110, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958111, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958112, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958113, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780958114, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958115, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958116, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958117, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958118, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958119, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958120, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958121, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780958122, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958123, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958124, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780958125, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958126, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958127, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958128, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958129, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958130, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958131, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958132, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958133, + 2400037120, + 58.7, + "0x0" + ], + [ + 1780958134, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958135, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958136, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958137, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958138, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958139, + 2400017408, + 58.7, + "0x0" + ], + [ + 1780958141, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958142, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958143, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958144, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958145, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958146, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958147, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780958148, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958149, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958150, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958151, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958152, + 2400017408, + 60.4, + "0x0" + ], + [ + 1780958153, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958154, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958155, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958156, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958157, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958158, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958159, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958160, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958161, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958162, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958163, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958164, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958165, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958166, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958167, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958168, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958169, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958170, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958171, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958172, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958173, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958174, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958175, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958176, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958177, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958178, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958179, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958180, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958181, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958182, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958183, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958184, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958185, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958186, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958187, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958188, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780958190, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958191, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958192, + 2400027136, + 60.4, + "0x0" + ], + [ + 1780958193, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958194, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958195, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958196, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958197, + 2400033792, + 59.3, + "0x0" + ], + [ + 1780958198, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780958199, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958200, + 2400037120, + 58.7, + "0x0" + ], + [ + 1780958201, + 2400033792, + 58.7, + "0x0" + ], + [ + 1780958202, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780958203, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780958204, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958205, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958206, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958207, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780958208, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958209, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958210, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958211, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958212, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958213, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958214, + 2400027136, + 60.4, + "0x0" + ], + [ + 1780958215, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958216, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958217, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958218, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958219, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958220, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780958221, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958222, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958223, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958224, + 2400030464, + 60.4, + "0x0" + ], + [ + 1780958225, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958226, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958227, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958228, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958229, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958230, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958231, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958232, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958233, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958234, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958235, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958236, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958237, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958238, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958239, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958240, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958241, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780958242, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958244, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958245, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958246, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958247, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958248, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958249, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958250, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958251, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958252, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958253, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958254, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958255, + 2400030464, + 58.2, + "0x0" + ], + [ + 1780958256, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958257, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958258, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958259, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958260, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780958261, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958262, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958263, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958264, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958265, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958266, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958267, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958268, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958269, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958270, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958271, + 2400020480, + 58.2, + "0x0" + ], + [ + 1780958272, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958273, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958274, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958275, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958276, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958277, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958278, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958279, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958280, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958281, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958282, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958283, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958284, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958285, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958286, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958287, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958288, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958289, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958290, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958291, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958292, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958293, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958294, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958295, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958296, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958298, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958299, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958300, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958301, + 2400033792, + 58.7, + "0x0" + ], + [ + 1780958302, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958303, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958304, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958305, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958306, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958307, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958308, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958309, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958310, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780958311, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958312, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958313, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958314, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958315, + 2400033792, + 58.7, + "0x0" + ], + [ + 1780958316, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958317, + 2400020480, + 58.7, + "0x0" + ], + [ + 1780958318, + 2400017408, + 58.7, + "0x0" + ], + [ + 1780958319, + 2400017408, + 59.3, + "0x0" + ], + [ + 1780958320, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958321, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958322, + 2400033792, + 58.2, + "0x0" + ], + [ + 1780958323, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958324, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958325, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958326, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958327, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958328, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958329, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958330, + 2400030464, + 58.7, + "0x0" + ], + [ + 1780958331, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958332, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958333, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958334, + 2400017408, + 59.8, + "0x0" + ], + [ + 1780958335, + 2400023808, + 60.4, + "0x0" + ], + [ + 1780958336, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958337, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958338, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958339, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958340, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958341, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958342, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958343, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958344, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958345, + 2400020480, + 59.3, + "0x0" + ], + [ + 1780958346, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958347, + 2400020480, + 59.8, + "0x0" + ], + [ + 1780958348, + 2400023808, + 58.7, + "0x0" + ], + [ + 1780958349, + 2400027136, + 58.7, + "0x0" + ], + [ + 1780958351, + 2400033792, + 58.7, + "0x0" + ], + [ + 1780958352, + 2400033792, + 59.8, + "0x0" + ], + [ + 1780958353, + 2400030464, + 59.3, + "0x0" + ], + [ + 1780958354, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958355, + 2400020480, + 60.4, + "0x0" + ], + [ + 1780958356, + 2400027136, + 59.8, + "0x0" + ], + [ + 1780958357, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958358, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780958359, + 2400030464, + 60.4, + "0x0" + ], + [ + 1780958360, + 2400027136, + 58.2, + "0x0" + ], + [ + 1780958361, + 2400023808, + 59.3, + "0x0" + ], + [ + 1780958362, + 2400037120, + 59.3, + "0x0" + ], + [ + 1780958363, + 2400033792, + 58.7, + "0x0" + ], + [ + 1780958364, + 2400027136, + 59.3, + "0x0" + ], + [ + 1780958365, + 2400023808, + 59.8, + "0x0" + ], + [ + 1780958366, + 2400037120, + 59.8, + "0x0" + ], + [ + 1780958367, + 2400030464, + 59.8, + "0x0" + ], + [ + 1780958368, + 2400030464, + 59.3, + "0x0" + ] + ], + "temp_c": { + "min": 56.0, + "max": 60.9, + "mean": 59.41, + "samples": 520 + }, + "arm_clock_hz": { + "min": 2400017408, + "max": 2400037120, + "mean": 2400026167.138, + "samples": 520, + "spread_frac": 0.0 + }, + "throttling_detected": false + }, + "warnings": [], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 871, + "timed_iters": 4355, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57402.55, + "samples": 21775, + "median": 57184.0, + "mad": 55.0, + "iqr": 112.0, + "q1": 57129.0, + "q3": 57241.0, + "min": 56999.0, + "max": 196072.0, + "mean": 57436.01, + "stddev": 1706.55, + "ops_per_sec": 17487.41, + "per_rep_median": [ + 57148.0, + 57166.0, + 57167.0, + 57185.0, + 57222.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 301, + "timed_iters": 1507, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 165934.23, + "samples": 7535, + "median": 165591.0, + "mad": 92.0, + "iqr": 204.0, + "q1": 165517.0, + "q3": 165721.0, + "min": 164813.0, + "max": 428349.0, + "mean": 165929.15, + "stddev": 3666.74, + "ops_per_sec": 6038.98, + "per_rep_median": [ + 165573.0, + 165573.0, + 165591.0, + 165609.0, + 165609.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2721, + "timed_iters": 13606, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18373.8, + "samples": 68030, + "median": 18315.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 18278.0, + "q3": 18352.0, + "min": 18167.0, + "max": 315961.0, + "mean": 18415.78, + "stddev": 1316.56, + "ops_per_sec": 54600.05, + "per_rep_median": [ + 18296.0, + 18352.0, + 18333.0, + 18314.0, + 18259.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2424, + "timed_iters": 12122, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20623.41, + "samples": 60610, + "median": 20574.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 20556.0, + "q3": 20593.0, + "min": 20499.0, + "max": 142277.0, + "mean": 20690.25, + "stddev": 1133.35, + "ops_per_sec": 48605.04, + "per_rep_median": [ + 20574.0, + 20592.0, + 20574.0, + 20574.0, + 20574.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2083, + "timed_iters": 10417, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23998.81, + "samples": 52085, + "median": 23962.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 23944.0, + "q3": 23981.0, + "min": 23870.0, + "max": 56111.0, + "mean": 23994.53, + "stddev": 501.17, + "ops_per_sec": 41732.74, + "per_rep_median": [ + 23963.0, + 23945.0, + 23962.0, + 23962.0, + 23945.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1660, + "timed_iters": 8300, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30121.61, + "samples": 41500, + "median": 29851.0, + "mad": 36.0, + "iqr": 73.0, + "q1": 29815.0, + "q3": 29888.0, + "min": 29703.0, + "max": 64259.0, + "mean": 30041.73, + "stddev": 821.12, + "ops_per_sec": 33499.72, + "per_rep_median": [ + 29852.0, + 29851.0, + 29852.0, + 29852.0, + 29851.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1554, + "timed_iters": 7771, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32168.87, + "samples": 38855, + "median": 31944.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 31926.0, + "q3": 31963.0, + "min": 31833.0, + "max": 106814.0, + "mean": 32023.25, + "stddev": 785.69, + "ops_per_sec": 31304.78, + "per_rep_median": [ + 31945.0, + 31944.0, + 31944.0, + 31944.0, + 31944.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1338, + "timed_iters": 6689, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37373.39, + "samples": 33445, + "median": 37370.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 37351.0, + "q3": 37389.0, + "min": 37277.0, + "max": 2918423.0, + "mean": 37491.29, + "stddev": 15761.42, + "ops_per_sec": 26759.43, + "per_rep_median": [ + 37370.0, + 37370.0, + 37370.0, + 37370.0, + 37370.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1125, + "timed_iters": 5625, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44447.92, + "samples": 28125, + "median": 44074.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 44037.0, + "q3": 44129.0, + "min": 43907.0, + "max": 70444.0, + "mean": 44383.62, + "stddev": 877.6, + "ops_per_sec": 22689.11, + "per_rep_median": [ + 44074.0, + 44074.0, + 44092.0, + 44074.0, + 44074.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1046, + "timed_iters": 5231, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47792.83, + "samples": 26155, + "median": 47740.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 47721.0, + "q3": 47759.0, + "min": 47629.0, + "max": 134110.0, + "mean": 47818.21, + "stddev": 908.98, + "ops_per_sec": 20946.8, + "per_rep_median": [ + 47759.0, + 47741.0, + 47740.0, + 47740.0, + 47721.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 903, + "timed_iters": 4516, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55362.9, + "samples": 22580, + "median": 55370.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 55351.0, + "q3": 55389.0, + "min": 55241.0, + "max": 91333.0, + "mean": 55407.19, + "stddev": 450.16, + "ops_per_sec": 18060.32, + "per_rep_median": [ + 55370.0, + 55370.0, + 55370.0, + 55370.0, + 55370.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 857, + "timed_iters": 4287, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58314.29, + "samples": 21435, + "median": 58074.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 58055.0, + "q3": 58093.0, + "min": 57962.0, + "max": 93870.0, + "mean": 58151.74, + "stddev": 679.41, + "ops_per_sec": 17219.41, + "per_rep_median": [ + 58074.0, + 58073.0, + 58073.0, + 58074.0, + 58073.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 868, + "timed_iters": 4338, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57635.21, + "samples": 21690, + "median": 57666.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 57647.0, + "q3": 57685.0, + "min": 57555.0, + "max": 90259.0, + "mean": 57738.89, + "stddev": 692.8, + "ops_per_sec": 17341.24, + "per_rep_median": [ + 57666.0, + 57648.0, + 57666.0, + 57666.0, + 57667.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 346, + "timed_iters": 1730, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 144512.95, + "samples": 8650, + "median": 143981.0, + "mad": 56.0, + "iqr": 130.0, + "q1": 143943.0, + "q3": 144073.0, + "min": 143721.0, + "max": 173240.0, + "mean": 144118.54, + "stddev": 849.1, + "ops_per_sec": 6945.36, + "per_rep_median": [ + 144092.0, + 143980.0, + 143981.0, + 143980.0, + 143906.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 465, + "timed_iters": 2325, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107536.86, + "samples": 11625, + "median": 107166.0, + "mad": 593.0, + "iqr": 1185.0, + "q1": 106592.0, + "q3": 107777.0, + "min": 104444.0, + "max": 144758.0, + "mean": 107244.09, + "stddev": 1318.81, + "ops_per_sec": 9331.32, + "per_rep_median": [ + 107240.0, + 107202.0, + 106906.0, + 107259.0, + 107092.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 88, + "timed_iters": 439, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 569404.97, + "samples": 2195, + "median": 398793.0, + "mad": 181183.0, + "iqr": 363331.0, + "q1": 296997.5, + "q3": 660328.5, + "min": 215684.0, + "max": 2839609.0, + "mean": 518101.27, + "stddev": 333546.57, + "ops_per_sec": 2507.57, + "per_rep_median": [ + 417386.0, + 459348.0, + 399590.0, + 378867.0, + 397404.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 420, + "timed_iters": 2100, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 119069.13, + "samples": 10500, + "median": 119110.0, + "mad": 129.0, + "iqr": 315.0, + "q1": 119017.0, + "q3": 119332.0, + "min": 118666.0, + "max": 149832.0, + "mean": 119368.65, + "stddev": 770.88, + "ops_per_sec": 8395.6, + "per_rep_median": [ + 119129.0, + 119036.0, + 120018.0, + 119128.0, + 119092.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 259, + "timed_iters": 1296, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 192881.86, + "samples": 6480, + "median": 191998.0, + "mad": 999.0, + "iqr": 2130.0, + "q1": 191313.0, + "q3": 193443.0, + "min": 189721.0, + "max": 228165.0, + "mean": 192429.63, + "stddev": 1666.78, + "ops_per_sec": 5208.39, + "per_rep_median": [ + 193387.0, + 191980.0, + 191406.0, + 192267.0, + 191980.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 69, + "timed_iters": 346, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 722786.51, + "samples": 1730, + "median": 676421.0, + "mad": 250590.5, + "iqr": 655467.75, + "q1": 434732.75, + "q3": 1090200.5, + "min": 320794.0, + "max": 5171739.0, + "mean": 851260.86, + "stddev": 581666.26, + "ops_per_sec": 1478.37, + "per_rep_median": [ + 675782.0, + 677430.0, + 677476.5, + 703874.5, + 675523.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 264, + "timed_iters": 1320, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 189381.31, + "samples": 6600, + "median": 191073.0, + "mad": 629.0, + "iqr": 2037.0, + "q1": 189277.0, + "q3": 191314.0, + "min": 188591.0, + "max": 529941.0, + "mean": 190752.26, + "stddev": 5690.1, + "ops_per_sec": 5233.6, + "per_rep_median": [ + 191128.0, + 191073.0, + 189573.0, + 190999.0, + 191166.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 173, + "timed_iters": 863, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 289692.51, + "samples": 4315, + "median": 288997.0, + "mad": 1314.0, + "iqr": 3287.0, + "q1": 288007.0, + "q3": 291294.0, + "min": 284776.0, + "max": 331349.0, + "mean": 289660.3, + "stddev": 2477.31, + "ops_per_sec": 3460.24, + "per_rep_median": [ + 289035.0, + 288664.0, + 289183.0, + 288812.0, + 289424.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 50, + "timed_iters": 251, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 995001.48, + "samples": 1255, + "median": 835827.0, + "mad": 345664.0, + "iqr": 692384.0, + "q1": 493996.5, + "q3": 1186380.5, + "min": 484737.0, + "max": 4519448.0, + "mean": 1000901.27, + "stddev": 603216.41, + "ops_per_sec": 1196.42, + "per_rep_median": [ + 834123.0, + 686513.0, + 873363.0, + 835438.0, + 839604.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 163, + "timed_iters": 817, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 305879.61, + "samples": 4085, + "median": 305683.0, + "mad": 334.0, + "iqr": 1982.0, + "q1": 305442.0, + "q3": 307424.0, + "min": 304942.0, + "max": 447256.0, + "mean": 306728.88, + "stddev": 3211.56, + "ops_per_sec": 3271.36, + "per_rep_median": [ + 305479.0, + 305423.0, + 306442.0, + 305794.0, + 305887.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10806598.33, + "samples": 150, + "median": 8684444.5, + "mad": 901798.5, + "iqr": 1802995.25, + "q1": 8030306.0, + "q3": 9833301.25, + "min": 7266149.0, + "max": 17971773.0, + "mean": 9372829.44, + "stddev": 2192639.48, + "ops_per_sec": 115.15, + "per_rep_median": [ + 8418298.5, + 9315050.5, + 8546075.5, + 8424159.0, + 9178709.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 172, + "timed_iters": 860, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 290587.65, + "samples": 4300, + "median": 290220.0, + "mad": 2185.0, + "iqr": 4134.5, + "q1": 288720.0, + "q3": 292854.5, + "min": 281109.0, + "max": 329387.0, + "mean": 290633.45, + "stddev": 3621.07, + "ops_per_sec": 3445.66, + "per_rep_median": [ + 290294.0, + 290276.0, + 290183.0, + 290165.0, + 290183.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 981, + "timed_iters": 4903, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 50984.19, + "samples": 24515, + "median": 50851.0, + "mad": 74.0, + "iqr": 148.0, + "q1": 50777.0, + "q3": 50925.0, + "min": 50518.0, + "max": 79869.0, + "mean": 50885.03, + "stddev": 432.33, + "ops_per_sec": 19665.3, + "per_rep_median": [ + 50963.0, + 50889.0, + 50778.0, + 50833.0, + 50740.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 29647765.33, + "samples": 150, + "median": 26081341.5, + "mad": 2350722.0, + "iqr": 6023380.0, + "q1": 24474543.25, + "q3": 30497923.25, + "min": 22857125.0, + "max": 83012210.0, + "mean": 29887741.99, + "stddev": 9509453.95, + "ops_per_sec": 38.34, + "per_rep_median": [ + 26095619.0, + 26100989.5, + 27223555.5, + 25517086.5, + 26250830.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 85, + "timed_iters": 423, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 590871.21, + "samples": 2115, + "median": 591440.0, + "mad": 3056.0, + "iqr": 5908.0, + "q1": 588273.0, + "q3": 594181.0, + "min": 575848.0, + "max": 644940.0, + "mean": 591412.93, + "stddev": 4989.2, + "ops_per_sec": 1690.79, + "per_rep_median": [ + 591403.0, + 591199.0, + 591477.0, + 591495.0, + 591606.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 498, + "timed_iters": 2491, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100356.14, + "samples": 12455, + "median": 99796.0, + "mad": 93.0, + "iqr": 204.0, + "q1": 99703.0, + "q3": 99907.0, + "min": 99351.0, + "max": 133092.0, + "mean": 99893.38, + "stddev": 692.04, + "ops_per_sec": 10020.44, + "per_rep_median": [ + 100036.0, + 99851.0, + 99685.0, + 99814.0, + 99703.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 33, + "timed_iters": 163, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1534244.71, + "samples": 815, + "median": 1531637.0, + "mad": 427.0, + "iqr": 2055.0, + "q1": 1531396.0, + "q3": 1533451.0, + "min": 1529359.0, + "max": 1606969.0, + "mean": 1532921.67, + "stddev": 3783.89, + "ops_per_sec": 652.9, + "per_rep_median": [ + 1533433.0, + 1531433.0, + 1531415.0, + 1531451.0, + 1531470.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 35923989.0, + "samples": 150, + "median": 35791563.5, + "mad": 53073.0, + "iqr": 171179.75, + "q1": 35663258.5, + "q3": 35834438.25, + "min": 35569268.0, + "max": 35920266.0, + "mean": 35761623.86, + "stddev": 96307.08, + "ops_per_sec": 27.94, + "per_rep_median": [ + 35857424.0, + 35829516.5, + 35792581.5, + 35714369.0, + 35617008.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 25, + "timed_iters": 125, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2007947.93, + "samples": 625, + "median": 2008448.0, + "mad": 1667.0, + "iqr": 2000.0, + "q1": 2006689.0, + "q3": 2008689.0, + "min": 2006615.0, + "max": 2081039.0, + "mean": 2008371.75, + "stddev": 4827.43, + "ops_per_sec": 497.9, + "per_rep_median": [ + 2008484.0, + 2008466.0, + 2006707.0, + 2008447.0, + 2008577.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 99546079.0, + "samples": 150, + "median": 97953152.5, + "mad": 118648.0, + "iqr": 850748.0, + "q1": 97842562.75, + "q3": 98693310.75, + "min": 97478666.0, + "max": 100965710.0, + "mean": 98179435.83, + "stddev": 513169.01, + "ops_per_sec": 10.21, + "per_rep_median": [ + 98910074.0, + 97949116.5, + 97949598.0, + 97955456.0, + 97837586.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 746375126.0, + "samples": 150, + "median": 744477847.5, + "mad": 960013.0, + "iqr": 2358797.25, + "q1": 744069155.0, + "q3": 746427952.25, + "min": 742006494.0, + "max": 851757420.0, + "mean": 758585492.81, + "stddev": 30960311.81, + "ops_per_sec": 1.34, + "per_rep_median": [ + 744452006.5, + 744446775.0, + 744212086.0, + 744522029.5, + 802883596.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 67, + "timed_iters": 336, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 743900.78, + "samples": 1680, + "median": 744438.0, + "mad": 925.0, + "iqr": 1000.0, + "q1": 743494.0, + "q3": 744494.0, + "min": 742586.0, + "max": 787049.0, + "mean": 744242.68, + "stddev": 1980.75, + "ops_per_sec": 1343.3, + "per_rep_median": [ + 742624.0, + 743531.0, + 743512.0, + 744494.0, + 744457.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 21, + "timed_iters": 105, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2388946.13, + "samples": 525, + "median": 2295537.0, + "mad": 1667.0, + "iqr": 2185.0, + "q1": 2293685.0, + "q3": 2295870.0, + "min": 2291111.0, + "max": 2352295.0, + "mean": 2295493.81, + "stddev": 4916.04, + "ops_per_sec": 435.63, + "per_rep_median": [ + 2293833.0, + 2295556.0, + 2295555.0, + 2295593.0, + 2295574.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 61818368.0, + "samples": 150, + "median": 61790386.0, + "mad": 31583.0, + "iqr": 64244.75, + "q1": 61763122.0, + "q3": 61827366.75, + "min": 61684738.0, + "max": 64712104.0, + "mean": 61811052.51, + "stddev": 242816.92, + "ops_per_sec": 16.18, + "per_rep_median": [ + 61781248.0, + 61783905.0, + 61822237.5, + 61790802.5, + 61747469.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3325879.07, + "samples": 375, + "median": 3339047.0, + "mad": 1167.0, + "iqr": 2981.5, + "q1": 3336380.5, + "q3": 3339362.0, + "min": 3302713.0, + "max": 3406787.0, + "mean": 3338650.74, + "stddev": 6022.6, + "ops_per_sec": 299.49, + "per_rep_median": [ + 3335750.0, + 3339121.0, + 3336214.0, + 3339213.0, + 3339158.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 40, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6327665.29, + "samples": 200, + "median": 6315494.5, + "mad": 2157.0, + "iqr": 7397.25, + "q1": 6313611.25, + "q3": 6321008.5, + "min": 6306560.0, + "max": 6392152.0, + "mean": 6316911.33, + "stddev": 8270.6, + "ops_per_sec": 158.34, + "per_rep_median": [ + 6322874.0, + 6315754.0, + 6315310.0, + 6315346.5, + 6308430.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 132323346.0, + "samples": 150, + "median": 127052863.5, + "mad": 102035.5, + "iqr": 5188286.0, + "q1": 126988244.5, + "q3": 132176530.5, + "min": 126909235.0, + "max": 132465696.0, + "mean": 128452981.21, + "stddev": 2341248.91, + "ops_per_sec": 7.87, + "per_rep_median": [ + 132346169.0, + 127234986.0, + 127010764.5, + 126998828.0, + 127003733.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3367705.53, + "samples": 370, + "median": 3367417.0, + "mad": 241.0, + "iqr": 501.0, + "q1": 3367250.0, + "q3": 3367751.0, + "min": 3365250.0, + "max": 3435028.0, + "mean": 3368405.21, + "stddev": 6580.08, + "ops_per_sec": 296.96, + "per_rep_median": [ + 3367426.0, + 3367500.0, + 3367361.0, + 3367380.0, + 3367741.0 + ] + } + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1323878.0, + "p95": 1337293.4, + "min": 1317804.0, + "max": 1765208.0, + "mean": 1330643.5, + "stddev": 36841.3 + }, + "handshakes_per_sec": 755.4, + "bytes_on_wire": { + "client_to_server": 382, + "server_to_client": 1189, + "total": 1571 + }, + "client_hello_bytes": 302, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2672487.0, + "p95": 4545972.8, + "min": 2241833.0, + "max": 8314542.0, + "mean": 2949657.0, + "stddev": 804789.5 + }, + "handshakes_per_sec": 374.2, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 8294, + "total": 9852 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3639571.5, + "p95": 6853448.9, + "min": 2750737.0, + "max": 12102030.0, + "mean": 4086835.8, + "stddev": 1427280.2 + }, + "handshakes_per_sec": 274.8, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 10712, + "total": 12270 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4221872.5, + "p95": 7573517.7, + "min": 3375028.0, + "max": 14351548.0, + "mean": 4694776.0, + "stddev": 1463440.4 + }, + "handshakes_per_sec": 236.9, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 13988, + "total": 15546 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3223843.5, + "p95": 3246957.4, + "min": 3200417.0, + "max": 4261057.0, + "mean": 3233943.1, + "stddev": 76205.0 + }, + "handshakes_per_sec": 310.2, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 4338, + "total": 5896 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44119787.5, + "p95": 44530745.4, + "min": 43663839.0, + "max": 46978016.0, + "mean": 44150097.8, + "stddev": 213142.9 + }, + "handshakes_per_sec": 22.7, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 36394, + "total": 37952 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2708792.0, + "p95": 4788983.9, + "min": 2275870.0, + "max": 8127413.0, + "mean": 3020474.2, + "stddev": 838306.1 + }, + "handshakes_per_sec": 369.2, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 8327, + "total": 9918 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3632831.0, + "p95": 6843373.5, + "min": 2745884.0, + "max": 12676597.0, + "mean": 3979341.0, + "stddev": 1357544.1 + }, + "handshakes_per_sec": 275.3, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 10745, + "total": 12336 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4271222.5, + "p95": 7708526.2, + "min": 3422008.0, + "max": 20144700.0, + "mean": 4708469.1, + "stddev": 1514041.6 + }, + "handshakes_per_sec": 234.1, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 14021, + "total": 15612 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3399480.5, + "p95": 3455642.6, + "min": 3370009.0, + "max": 4742126.0, + "mean": 3415657.4, + "stddev": 93815.3 + }, + "handshakes_per_sec": 294.2, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 4368, + "total": 5959 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44087756.0, + "p95": 44521847.3, + "min": 43588723.0, + "max": 46984119.0, + "mean": 44135869.3, + "stddev": 233498.6 + }, + "handshakes_per_sec": 22.7, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 36427, + "total": 38018 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2093657.5, + "p95": 3973789.9, + "min": 1666485.0, + "max": 7516195.0, + "mean": 2388548.1, + "stddev": 843440.7 + }, + "handshakes_per_sec": 477.6, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 7942, + "total": 9084 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2732856.0, + "p95": 5936394.0, + "min": 2125000.0, + "max": 12948166.0, + "mean": 3306902.8, + "stddev": 1332775.7 + }, + "handshakes_per_sec": 365.9, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 10360, + "total": 11502 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3645727.5, + "p95": 6993853.6, + "min": 2797920.0, + "max": 13266515.0, + "mean": 4107261.1, + "stddev": 1460068.5 + }, + "handshakes_per_sec": 274.3, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 13636, + "total": 14778 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2587209.0, + "p95": 2609818.0, + "min": 2564015.0, + "max": 3502618.0, + "mean": 2594518.2, + "stddev": 60072.9 + }, + "handshakes_per_sec": 386.5, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 3983, + "total": 5125 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43175152.5, + "p95": 43541765.5, + "min": 42766924.0, + "max": 45910121.0, + "mean": 43201320.8, + "stddev": 208587.8 + }, + "handshakes_per_sec": 23.2, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 36042, + "total": 37184 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2214554.5, + "p95": 4104033.0, + "min": 1785503.0, + "max": 8052522.0, + "mean": 2514419.8, + "stddev": 811474.9 + }, + "handshakes_per_sec": 451.6, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 8262, + "total": 9788 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3089621.0, + "p95": 6105273.6, + "min": 2213666.0, + "max": 11283735.0, + "mean": 3424459.9, + "stddev": 1401566.6 + }, + "handshakes_per_sec": 323.7, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 10680, + "total": 12206 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3746911.5, + "p95": 7495687.1, + "min": 2897364.0, + "max": 12087968.0, + "mean": 4205102.8, + "stddev": 1431567.1 + }, + "handshakes_per_sec": 266.9, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 13956, + "total": 15482 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2862030.5, + "p95": 2888959.3, + "min": 2838123.0, + "max": 3870947.0, + "mean": 2872400.4, + "stddev": 75475.8 + }, + "handshakes_per_sec": 349.4, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 4311, + "total": 5837 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43543931.5, + "p95": 43904535.2, + "min": 43135342.0, + "max": 47014939.0, + "mean": 43573936.8, + "stddev": 217177.5 + }, + "handshakes_per_sec": 23.0, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 36362, + "total": 37888 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2311099.5, + "p95": 4122667.9, + "min": 1880613.0, + "max": 7948652.0, + "mean": 2595214.7, + "stddev": 780246.5 + }, + "handshakes_per_sec": 432.7, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 8742, + "total": 10652 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3220268.0, + "p95": 6441426.0, + "min": 2331091.0, + "max": 11099642.0, + "mean": 3598763.7, + "stddev": 1345439.6 + }, + "handshakes_per_sec": 310.5, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 11160, + "total": 13070 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3860558.5, + "p95": 6800849.1, + "min": 3013121.0, + "max": 16372558.0, + "mean": 4238980.8, + "stddev": 1473295.5 + }, + "handshakes_per_sec": 259.0, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 14436, + "total": 16346 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2797984.0, + "p95": 2840939.4, + "min": 2771531.0, + "max": 3791726.0, + "mean": 2810929.6, + "stddev": 80478.6 + }, + "handshakes_per_sec": 357.4, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 4789, + "total": 6699 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 45815730.5, + "p95": 46257081.1, + "min": 45176744.0, + "max": 48877583.0, + "mean": 45833447.7, + "stddev": 243266.4 + }, + "handshakes_per_sec": 21.8, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 36842, + "total": 38752 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260614T205226Z.json b/tools/benchmarks/pqc/results/rasberrypi5-20260614T205226Z.json new file mode 100644 index 0000000..510b889 --- /dev/null +++ b/tools/benchmarks/pqc/results/rasberrypi5-20260614T205226Z.json @@ -0,0 +1,8179 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-06-14T21:09:20Z", + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "host": { + "hostname": "rasberrypi5", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.18.33+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454029312 + }, + "cpu_features": { + "source": "/proc/cpuinfo", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-06-14T20:52:26Z", + "timestamp_end_utc": "2026-06-14T21:09:20Z", + "duration_s": 1014, + "governor_requested": "performance", + "governor_before": "ondemand", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.12.47+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1781470346, + 2400033792, + 50.5, + "0x0" + ], + [ + 1781470346, + 2400027136, + 50.5, + "0x0" + ], + [ + 1781470347, + 2400023808, + 51.0, + "0x0" + ], + [ + 1781470348, + 2400030464, + 50.5, + "0x0" + ], + [ + 1781470349, + 2400017408, + 50.5, + "0x0" + ], + [ + 1781470350, + 2400037120, + 52.1, + "0x0" + ], + [ + 1781470351, + 2400030464, + 52.7, + "0x0" + ], + [ + 1781470352, + 2400023808, + 52.1, + "0x0" + ], + [ + 1781470353, + 2400030464, + 52.1, + "0x0" + ], + [ + 1781470354, + 2400030464, + 52.7, + "0x0" + ], + [ + 1781470355, + 2400027136, + 51.6, + "0x0" + ], + [ + 1781470356, + 2400020480, + 52.7, + "0x0" + ], + [ + 1781470357, + 2400020480, + 52.7, + "0x0" + ], + [ + 1781470358, + 2400027136, + 52.7, + "0x0" + ], + [ + 1781470359, + 2400027136, + 52.1, + "0x0" + ], + [ + 1781470360, + 2400033792, + 52.7, + "0x0" + ], + [ + 1781470361, + 2400023808, + 52.7, + "0x0" + ], + [ + 1781470362, + 2400030464, + 52.7, + "0x0" + ], + [ + 1781470363, + 2400030464, + 52.7, + "0x0" + ], + [ + 1781470364, + 2400033792, + 52.7, + "0x0" + ], + [ + 1781470365, + 2400023808, + 53.2, + "0x0" + ], + [ + 1781470366, + 2400020480, + 54.3, + "0x0" + ], + [ + 1781470367, + 2400020480, + 52.7, + "0x0" + ], + [ + 1781470368, + 2400027136, + 52.7, + "0x0" + ], + [ + 1781470369, + 2400020480, + 54.3, + "0x0" + ], + [ + 1781470370, + 2400020480, + 53.8, + "0x0" + ], + [ + 1781470371, + 2400020480, + 54.3, + "0x0" + ], + [ + 1781470372, + 2400037120, + 53.8, + "0x0" + ], + [ + 1781470373, + 2400020480, + 53.2, + "0x0" + ], + [ + 1781470374, + 2400023808, + 54.3, + "0x0" + ], + [ + 1781470375, + 2400017408, + 53.8, + "0x0" + ], + [ + 1781470376, + 2400023808, + 53.8, + "0x0" + ], + [ + 1781470377, + 2400027136, + 54.3, + "0x0" + ], + [ + 1781470378, + 2400023808, + 54.3, + "0x0" + ], + [ + 1781470379, + 2400027136, + 54.9, + "0x0" + ], + [ + 1781470380, + 2400023808, + 54.3, + "0x0" + ], + [ + 1781470381, + 2400030464, + 54.3, + "0x0" + ], + [ + 1781470382, + 2400017408, + 55.4, + "0x0" + ], + [ + 1781470383, + 2400030464, + 54.9, + "0x0" + ], + [ + 1781470384, + 2400023808, + 54.3, + "0x0" + ], + [ + 1781470385, + 2400020480, + 54.9, + "0x0" + ], + [ + 1781470386, + 2400023808, + 54.9, + "0x0" + ], + [ + 1781470387, + 2400020480, + 54.9, + "0x0" + ], + [ + 1781470388, + 2400023808, + 55.4, + "0x0" + ], + [ + 1781470389, + 2400033792, + 54.9, + "0x0" + ], + [ + 1781470390, + 2400030464, + 54.9, + "0x0" + ], + [ + 1781470391, + 2400030464, + 54.3, + "0x0" + ], + [ + 1781470392, + 2400027136, + 53.2, + "0x0" + ], + [ + 1781470394, + 2400023808, + 53.8, + "0x0" + ], + [ + 1781470395, + 2400023808, + 53.2, + "0x0" + ], + [ + 1781470396, + 2400020480, + 53.2, + "0x0" + ], + [ + 1781470397, + 2400020480, + 54.3, + "0x0" + ], + [ + 1781470398, + 2400020480, + 54.9, + "0x0" + ], + [ + 1781470399, + 2400020480, + 54.3, + "0x0" + ], + [ + 1781470400, + 2400023808, + 56.0, + "0x0" + ], + [ + 1781470401, + 2400030464, + 55.4, + "0x0" + ], + [ + 1781470402, + 2400033792, + 56.5, + "0x0" + ], + [ + 1781470403, + 2400027136, + 56.5, + "0x0" + ], + [ + 1781470404, + 2400017408, + 56.5, + "0x0" + ], + [ + 1781470405, + 2400017408, + 56.0, + "0x0" + ], + [ + 1781470406, + 2400030464, + 54.3, + "0x0" + ], + [ + 1781470407, + 2400027136, + 55.4, + "0x0" + ], + [ + 1781470408, + 2400033792, + 56.0, + "0x0" + ], + [ + 1781470409, + 2400033792, + 56.5, + "0x0" + ], + [ + 1781470410, + 2400017408, + 56.5, + "0x0" + ], + [ + 1781470411, + 2400023808, + 55.4, + "0x0" + ], + [ + 1781470412, + 2400030464, + 56.5, + "0x0" + ], + [ + 1781470413, + 2400027136, + 56.0, + "0x0" + ], + [ + 1781470414, + 2400037120, + 57.1, + "0x0" + ], + [ + 1781470415, + 2400020480, + 56.5, + "0x0" + ], + [ + 1781470416, + 2400033792, + 56.0, + "0x0" + ], + [ + 1781470417, + 2400023808, + 56.5, + "0x0" + ], + [ + 1781470418, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470419, + 2400020480, + 56.0, + "0x0" + ], + [ + 1781470420, + 2400030464, + 57.1, + "0x0" + ], + [ + 1781470421, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470422, + 2400030464, + 57.1, + "0x0" + ], + [ + 1781470423, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470424, + 2400020480, + 57.1, + "0x0" + ], + [ + 1781470425, + 2400037120, + 56.5, + "0x0" + ], + [ + 1781470426, + 2400023808, + 58.2, + "0x0" + ], + [ + 1781470427, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470428, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470429, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470430, + 2400027136, + 56.5, + "0x0" + ], + [ + 1781470431, + 2400027136, + 56.0, + "0x0" + ], + [ + 1781470432, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470433, + 2400027136, + 57.1, + "0x0" + ], + [ + 1781470434, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470435, + 2400037120, + 57.6, + "0x0" + ], + [ + 1781470436, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470437, + 2400030464, + 58.2, + "0x0" + ], + [ + 1781470438, + 2400027136, + 57.1, + "0x0" + ], + [ + 1781470440, + 2400030464, + 58.2, + "0x0" + ], + [ + 1781470441, + 2400030464, + 57.1, + "0x0" + ], + [ + 1781470442, + 2400030464, + 59.3, + "0x0" + ], + [ + 1781470443, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470444, + 2400037120, + 57.6, + "0x0" + ], + [ + 1781470445, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470446, + 2400023808, + 58.2, + "0x0" + ], + [ + 1781470447, + 2400020480, + 57.6, + "0x0" + ], + [ + 1781470448, + 2400023808, + 57.6, + "0x0" + ], + [ + 1781470449, + 2400037120, + 57.1, + "0x0" + ], + [ + 1781470450, + 2400023808, + 57.6, + "0x0" + ], + [ + 1781470451, + 2400020480, + 57.1, + "0x0" + ], + [ + 1781470452, + 2400030464, + 58.2, + "0x0" + ], + [ + 1781470453, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470454, + 2400033792, + 58.2, + "0x0" + ], + [ + 1781470455, + 2400037120, + 58.7, + "0x0" + ], + [ + 1781470456, + 2400023808, + 57.6, + "0x0" + ], + [ + 1781470457, + 2400027136, + 58.2, + "0x0" + ], + [ + 1781470458, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470459, + 2400023808, + 58.2, + "0x0" + ], + [ + 1781470460, + 2400023808, + 58.2, + "0x0" + ], + [ + 1781470461, + 2400027136, + 57.6, + "0x0" + ], + [ + 1781470462, + 2400027136, + 58.7, + "0x0" + ], + [ + 1781470463, + 2400030464, + 58.7, + "0x0" + ], + [ + 1781470464, + 2400030464, + 59.3, + "0x0" + ], + [ + 1781470465, + 2400023808, + 57.6, + "0x0" + ], + [ + 1781470466, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470467, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470468, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781470469, + 2400020480, + 59.3, + "0x0" + ], + [ + 1781470470, + 2400030464, + 58.7, + "0x0" + ], + [ + 1781470471, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781470472, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470473, + 2400033792, + 58.7, + "0x0" + ], + [ + 1781470474, + 2400033792, + 57.6, + "0x0" + ], + [ + 1781470475, + 2400023808, + 56.5, + "0x0" + ], + [ + 1781470476, + 2400037120, + 57.1, + "0x0" + ], + [ + 1781470477, + 2400023808, + 56.5, + "0x0" + ], + [ + 1781470478, + 2400027136, + 56.0, + "0x0" + ], + [ + 1781470479, + 2400030464, + 56.0, + "0x0" + ], + [ + 1781470480, + 2400020480, + 56.0, + "0x0" + ], + [ + 1781470481, + 2400023808, + 56.0, + "0x0" + ], + [ + 1781470482, + 2400027136, + 56.0, + "0x0" + ], + [ + 1781470483, + 2400030464, + 57.1, + "0x0" + ], + [ + 1781470484, + 2400033792, + 58.2, + "0x0" + ], + [ + 1781470485, + 2400037120, + 57.6, + "0x0" + ], + [ + 1781470486, + 2400023808, + 57.6, + "0x0" + ], + [ + 1781470487, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470488, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470489, + 2400027136, + 58.7, + "0x0" + ], + [ + 1781470491, + 2400030464, + 58.2, + "0x0" + ], + [ + 1781470492, + 2400017408, + 58.2, + "0x0" + ], + [ + 1781470493, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470494, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470495, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470496, + 2400027136, + 57.6, + "0x0" + ], + [ + 1781470497, + 2400033792, + 58.7, + "0x0" + ], + [ + 1781470498, + 2400030464, + 58.2, + "0x0" + ], + [ + 1781470499, + 2400017408, + 58.2, + "0x0" + ], + [ + 1781470500, + 2400033792, + 58.2, + "0x0" + ], + [ + 1781470501, + 2400033792, + 58.2, + "0x0" + ], + [ + 1781470502, + 2400033792, + 59.3, + "0x0" + ], + [ + 1781470503, + 2400030464, + 58.7, + "0x0" + ], + [ + 1781470504, + 2400020480, + 59.3, + "0x0" + ], + [ + 1781470505, + 2400027136, + 58.2, + "0x0" + ], + [ + 1781470506, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470507, + 2400033792, + 58.7, + "0x0" + ], + [ + 1781470508, + 2400023808, + 58.2, + "0x0" + ], + [ + 1781470509, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470510, + 2400020480, + 57.6, + "0x0" + ], + [ + 1781470511, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781470512, + 2400030464, + 58.2, + "0x0" + ], + [ + 1781470513, + 2400027136, + 58.7, + "0x0" + ], + [ + 1781470514, + 2400030464, + 58.7, + "0x0" + ], + [ + 1781470515, + 2400027136, + 58.7, + "0x0" + ], + [ + 1781470516, + 2400027136, + 59.3, + "0x0" + ], + [ + 1781470517, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470518, + 2400030464, + 59.3, + "0x0" + ], + [ + 1781470519, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470520, + 2400017408, + 58.2, + "0x0" + ], + [ + 1781470521, + 2400027136, + 58.7, + "0x0" + ], + [ + 1781470522, + 2400030464, + 57.1, + "0x0" + ], + [ + 1781470523, + 2400027136, + 57.1, + "0x0" + ], + [ + 1781470524, + 2400027136, + 57.1, + "0x0" + ], + [ + 1781470525, + 2400030464, + 57.1, + "0x0" + ], + [ + 1781470526, + 2400027136, + 57.1, + "0x0" + ], + [ + 1781470527, + 2400017408, + 56.0, + "0x0" + ], + [ + 1781470528, + 2400023808, + 56.5, + "0x0" + ], + [ + 1781470529, + 2400023808, + 57.1, + "0x0" + ], + [ + 1781470530, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470531, + 2400017408, + 57.6, + "0x0" + ], + [ + 1781470532, + 2400037120, + 58.7, + "0x0" + ], + [ + 1781470533, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781470534, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781470535, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781470536, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781470538, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781470539, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781470540, + 2400020480, + 59.3, + "0x0" + ], + [ + 1781470541, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470542, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781470543, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781470544, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470545, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781470546, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781470547, + 2400033792, + 59.8, + "0x0" + ], + [ + 1781470548, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781470549, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470550, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470551, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470552, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470553, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781470554, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781470555, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781470556, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470557, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470558, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781470559, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470560, + 2400033792, + 60.9, + "0x0" + ], + [ + 1781470561, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470562, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470563, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470564, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470565, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470566, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470567, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470568, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470569, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470570, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470571, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470572, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470573, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781470574, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470575, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470576, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470577, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470578, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470579, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470580, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470581, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470582, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470583, + 2400017408, + 60.9, + "0x0" + ], + [ + 1781470584, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470586, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470587, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470588, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470589, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470590, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470591, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470592, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470593, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781470594, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470595, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781470596, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470597, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781470598, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781470599, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470600, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470601, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470602, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470603, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470604, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470605, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470606, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470607, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470608, + 2400017408, + 62.0, + "0x0" + ], + [ + 1781470609, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781470610, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470611, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470612, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470613, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470614, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470615, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470616, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470617, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781470618, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470619, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470620, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781470621, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470622, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470623, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781470624, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470625, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470626, + 2400017408, + 60.9, + "0x0" + ], + [ + 1781470627, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470628, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470629, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470630, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470631, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470632, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470633, + 2400017408, + 62.0, + "0x0" + ], + [ + 1781470634, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470636, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470637, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470638, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470639, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470640, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470641, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470642, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470643, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470644, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470645, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470646, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470647, + 2400033792, + 62.6, + "0x0" + ], + [ + 1781470648, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470649, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470650, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470651, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470652, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470653, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470654, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470655, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470656, + 2400037120, + 62.6, + "0x0" + ], + [ + 1781470657, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470658, + 2400017408, + 60.9, + "0x0" + ], + [ + 1781470659, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470660, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470661, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470662, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470663, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470664, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470665, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470666, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470667, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470668, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470669, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470670, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470671, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470672, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470673, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470674, + 2400033792, + 60.9, + "0x0" + ], + [ + 1781470675, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470676, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470677, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781470678, + 2400017408, + 62.0, + "0x0" + ], + [ + 1781470679, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470680, + 2400033792, + 62.6, + "0x0" + ], + [ + 1781470681, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470682, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470683, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470685, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470686, + 2400037120, + 61.5, + "0x0" + ], + [ + 1781470687, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470688, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470689, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470690, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470691, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470692, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470693, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470694, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470695, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470696, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470697, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470698, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470699, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470700, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781470701, + 2400027136, + 58.7, + "0x0" + ], + [ + 1781470702, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781470703, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781470704, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470705, + 2400037120, + 58.7, + "0x0" + ], + [ + 1781470706, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470707, + 2400033792, + 58.7, + "0x0" + ], + [ + 1781470708, + 2400030464, + 58.7, + "0x0" + ], + [ + 1781470709, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470710, + 2400020480, + 58.7, + "0x0" + ], + [ + 1781470711, + 2400027136, + 58.2, + "0x0" + ], + [ + 1781470712, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470713, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470714, + 2400020480, + 58.2, + "0x0" + ], + [ + 1781470715, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470716, + 2400030464, + 57.6, + "0x0" + ], + [ + 1781470717, + 2400023808, + 58.7, + "0x0" + ], + [ + 1781470718, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781470719, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470720, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470721, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470722, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781470723, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470724, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470725, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470726, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470727, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470728, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470729, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470730, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470731, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470732, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781470733, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470734, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470736, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470737, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470738, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470739, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781470740, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470741, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470742, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470743, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470744, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470745, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470746, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470747, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781470748, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470749, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470750, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470751, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470752, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470753, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470754, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470755, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470756, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470757, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470758, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470759, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470760, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470761, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470762, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470763, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470764, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470765, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470766, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470767, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470768, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470769, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470770, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470771, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470772, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470773, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470774, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470775, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470776, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470777, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470778, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470779, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470780, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470781, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470782, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470783, + 2400017408, + 62.0, + "0x0" + ], + [ + 1781470785, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781470786, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470787, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470788, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470789, + 2400017408, + 60.9, + "0x0" + ], + [ + 1781470790, + 2400017408, + 62.6, + "0x0" + ], + [ + 1781470791, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470792, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470793, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470794, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470795, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470796, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470797, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470798, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470799, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470800, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470801, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470802, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470803, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470804, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781470805, + 2400017408, + 62.0, + "0x0" + ], + [ + 1781470806, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470807, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470808, + 2400017408, + 62.6, + "0x0" + ], + [ + 1781470809, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470810, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470811, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470812, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470813, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470814, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470815, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470816, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470817, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470818, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470819, + 2400033792, + 62.6, + "0x0" + ], + [ + 1781470820, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470821, + 2400017408, + 62.0, + "0x0" + ], + [ + 1781470822, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470823, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470824, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470825, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781470826, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470827, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470828, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470830, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470831, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470832, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470833, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470834, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470835, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470836, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470837, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470838, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470839, + 2400037120, + 62.6, + "0x0" + ], + [ + 1781470840, + 2400037120, + 62.6, + "0x0" + ], + [ + 1781470841, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470842, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470843, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470844, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470845, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470846, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470847, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470848, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781470849, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470850, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470851, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470852, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470853, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470854, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781470855, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470856, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470857, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470858, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470859, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470860, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470861, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470862, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470863, + 2400033792, + 62.6, + "0x0" + ], + [ + 1781470864, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470865, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470866, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470867, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470868, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470869, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470870, + 2400030464, + 63.1, + "0x0" + ], + [ + 1781470871, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781470872, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470873, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470875, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470876, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470877, + 2400037120, + 62.0, + "0x0" + ], + [ + 1781470878, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470879, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470880, + 2400017408, + 63.1, + "0x0" + ], + [ + 1781470881, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470882, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781470883, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470884, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781470885, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470886, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470887, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470888, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470889, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470890, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470891, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781470892, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470893, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781470894, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470895, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781470896, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781470897, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781470898, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781470899, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781470900, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781470901, + 2400020480, + 59.3, + "0x0" + ], + [ + 1781470902, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781470903, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781470904, + 2400030464, + 59.3, + "0x0" + ], + [ + 1781470905, + 2400027136, + 59.3, + "0x0" + ], + [ + 1781470906, + 2400033792, + 58.7, + "0x0" + ], + [ + 1781470907, + 2400030464, + 58.7, + "0x0" + ], + [ + 1781470908, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781470909, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781470910, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781470911, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781470912, + 2400030464, + 63.1, + "0x0" + ], + [ + 1781470913, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470914, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781470915, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781470916, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470917, + 2400027136, + 62.0, + "0x0" + ], + [ + 1781470918, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470919, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470921, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781470922, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470923, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470924, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470925, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470926, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470927, + 2400030464, + 63.1, + "0x0" + ], + [ + 1781470928, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470929, + 2400017408, + 62.6, + "0x0" + ], + [ + 1781470930, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470931, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470932, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470933, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470934, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781470935, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781470936, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470937, + 2400037120, + 63.7, + "0x0" + ], + [ + 1781470938, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470939, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470940, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470941, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470942, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781470943, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781470944, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781470945, + 2400020480, + 62.0, + "0x0" + ], + [ + 1781470946, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470947, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470948, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470949, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470950, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470951, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781470952, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781470953, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781470954, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781470955, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781470956, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781470957, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781470958, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470959, + 2400033792, + 63.1, + "0x0" + ], + [ + 1781470960, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781470961, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470962, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781470963, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781470964, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470965, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781470966, + 2400033792, + 64.2, + "0x0" + ], + [ + 1781470967, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781470969, + 2400033792, + 63.1, + "0x0" + ], + [ + 1781470970, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781470971, + 2400023808, + 62.6, + "0x0" + ], + [ + 1781470972, + 2400033792, + 63.7, + "0x0" + ], + [ + 1781470973, + 2400020480, + 62.6, + "0x0" + ], + [ + 1781470974, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470975, + 2400033792, + 63.7, + "0x0" + ], + [ + 1781470976, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781470977, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781470978, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470979, + 2400033792, + 64.2, + "0x0" + ], + [ + 1781470980, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470981, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781470982, + 2400027136, + 62.6, + "0x0" + ], + [ + 1781470983, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781470984, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470985, + 2400023808, + 63.1, + "0x0" + ], + [ + 1781470986, + 2400027136, + 65.3, + "0x0" + ], + [ + 1781470987, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781470988, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470989, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470990, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781470991, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470992, + 2400037120, + 64.2, + "0x0" + ], + [ + 1781470993, + 2400030464, + 62.6, + "0x0" + ], + [ + 1781470994, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781470995, + 2400020480, + 64.8, + "0x0" + ], + [ + 1781470996, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781470997, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781470998, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781470999, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781471000, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781471001, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471002, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781471003, + 2400017408, + 64.2, + "0x0" + ], + [ + 1781471004, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781471005, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471006, + 2400037120, + 64.8, + "0x0" + ], + [ + 1781471007, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781471008, + 2400033792, + 63.1, + "0x0" + ], + [ + 1781471009, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781471010, + 2400023808, + 65.3, + "0x0" + ], + [ + 1781471012, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471013, + 2400017408, + 64.8, + "0x0" + ], + [ + 1781471014, + 2400037120, + 63.1, + "0x0" + ], + [ + 1781471015, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781471016, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471017, + 2400017408, + 63.7, + "0x0" + ], + [ + 1781471018, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781471019, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471020, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781471021, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781471022, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471023, + 2400037120, + 63.1, + "0x0" + ], + [ + 1781471024, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781471025, + 2400030464, + 64.8, + "0x0" + ], + [ + 1781471026, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781471027, + 2400027136, + 65.3, + "0x0" + ], + [ + 1781471028, + 2400030464, + 64.8, + "0x0" + ], + [ + 1781471029, + 2400030464, + 64.8, + "0x0" + ], + [ + 1781471030, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471031, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471032, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471033, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471034, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471035, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781471036, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781471037, + 2400033792, + 64.2, + "0x0" + ], + [ + 1781471038, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471039, + 2400033792, + 63.7, + "0x0" + ], + [ + 1781471040, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471041, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471042, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471043, + 2400030464, + 63.7, + "0x0" + ], + [ + 1781471044, + 2400027136, + 64.8, + "0x0" + ], + [ + 1781471045, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471046, + 2400033792, + 63.7, + "0x0" + ], + [ + 1781471047, + 2400027136, + 63.7, + "0x0" + ], + [ + 1781471048, + 2400020480, + 64.2, + "0x0" + ], + [ + 1781471049, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781471050, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471051, + 2400030464, + 64.8, + "0x0" + ], + [ + 1781471052, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471053, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781471054, + 2400033792, + 64.8, + "0x0" + ], + [ + 1781471056, + 2400033792, + 64.8, + "0x0" + ], + [ + 1781471057, + 2400020480, + 64.8, + "0x0" + ], + [ + 1781471058, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781471059, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471060, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471061, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471062, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471063, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471064, + 2400020480, + 63.1, + "0x0" + ], + [ + 1781471065, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781471066, + 2400037120, + 64.8, + "0x0" + ], + [ + 1781471067, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471068, + 2400027136, + 65.3, + "0x0" + ], + [ + 1781471069, + 2400027136, + 64.8, + "0x0" + ], + [ + 1781471070, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471071, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471072, + 2400017408, + 64.8, + "0x0" + ], + [ + 1781471073, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471074, + 2400027136, + 65.3, + "0x0" + ], + [ + 1781471075, + 2400037120, + 64.8, + "0x0" + ], + [ + 1781471076, + 2400027136, + 64.8, + "0x0" + ], + [ + 1781471077, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471078, + 2400030464, + 64.8, + "0x0" + ], + [ + 1781471079, + 2400020480, + 64.8, + "0x0" + ], + [ + 1781471080, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781471081, + 2400017408, + 63.7, + "0x0" + ], + [ + 1781471082, + 2400033792, + 64.8, + "0x0" + ], + [ + 1781471083, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781471084, + 2400020480, + 63.7, + "0x0" + ], + [ + 1781471085, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471086, + 2400020480, + 65.3, + "0x0" + ], + [ + 1781471087, + 2400030464, + 64.2, + "0x0" + ], + [ + 1781471088, + 2400027136, + 64.8, + "0x0" + ], + [ + 1781471089, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471090, + 2400017408, + 64.2, + "0x0" + ], + [ + 1781471091, + 2400017408, + 64.8, + "0x0" + ], + [ + 1781471092, + 2400033792, + 65.3, + "0x0" + ], + [ + 1781471093, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471094, + 2400027136, + 65.3, + "0x0" + ], + [ + 1781471095, + 2400020480, + 64.8, + "0x0" + ], + [ + 1781471096, + 2400020480, + 64.8, + "0x0" + ], + [ + 1781471097, + 2400017408, + 65.3, + "0x0" + ], + [ + 1781471098, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471099, + 2400030464, + 64.8, + "0x0" + ], + [ + 1781471100, + 2400020480, + 64.8, + "0x0" + ], + [ + 1781471101, + 2400027136, + 63.1, + "0x0" + ], + [ + 1781471103, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471104, + 2400017408, + 64.8, + "0x0" + ], + [ + 1781471105, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471106, + 2400023808, + 64.8, + "0x0" + ], + [ + 1781471107, + 2400030464, + 65.9, + "0x0" + ], + [ + 1781471108, + 2400030464, + 65.3, + "0x0" + ], + [ + 1781471109, + 2400027136, + 64.2, + "0x0" + ], + [ + 1781471110, + 2400033792, + 64.8, + "0x0" + ], + [ + 1781471111, + 2400020480, + 65.3, + "0x0" + ], + [ + 1781471112, + 2400023808, + 64.2, + "0x0" + ], + [ + 1781471113, + 2400023808, + 65.3, + "0x0" + ], + [ + 1781471114, + 2400017408, + 64.2, + "0x0" + ], + [ + 1781471115, + 2400023808, + 63.7, + "0x0" + ], + [ + 1781471116, + 2400023808, + 62.0, + "0x0" + ], + [ + 1781471117, + 2400033792, + 62.0, + "0x0" + ], + [ + 1781471118, + 2400030464, + 62.0, + "0x0" + ], + [ + 1781471119, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781471120, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471121, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471122, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471123, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471124, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471125, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471126, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471127, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471128, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471129, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471130, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471131, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471132, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781471133, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471134, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471135, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781471136, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471137, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471138, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471139, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471140, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471141, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781471142, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471143, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781471144, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471145, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471146, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781471147, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471148, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781471149, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471150, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471151, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471152, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471153, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471154, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471156, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471157, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471158, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471159, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471160, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471161, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471162, + 2400017408, + 61.5, + "0x0" + ], + [ + 1781471163, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471164, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471165, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471166, + 2400027136, + 61.5, + "0x0" + ], + [ + 1781471167, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471168, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471169, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781471170, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471171, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471172, + 2400033792, + 60.9, + "0x0" + ], + [ + 1781471173, + 2400020480, + 61.5, + "0x0" + ], + [ + 1781471174, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471175, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471176, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471177, + 2400037120, + 59.8, + "0x0" + ], + [ + 1781471178, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471179, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471180, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471181, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471182, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781471183, + 2400037120, + 59.8, + "0x0" + ], + [ + 1781471184, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471185, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471186, + 2400033792, + 60.9, + "0x0" + ], + [ + 1781471187, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471188, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471189, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471190, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471191, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471192, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471193, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471194, + 2400033792, + 61.5, + "0x0" + ], + [ + 1781471195, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781471196, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471197, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471198, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471199, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471200, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471201, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471202, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471203, + 2400017408, + 60.9, + "0x0" + ], + [ + 1781471204, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781471205, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471206, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471207, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471208, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781471210, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471211, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471212, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471213, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471214, + 2400030464, + 61.5, + "0x0" + ], + [ + 1781471215, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471216, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471217, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471218, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781471219, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471220, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471221, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781471222, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471223, + 2400033792, + 59.8, + "0x0" + ], + [ + 1781471224, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471225, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471226, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471227, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471228, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471229, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471230, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471231, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471232, + 2400020480, + 60.9, + "0x0" + ], + [ + 1781471233, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471234, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471235, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471236, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471237, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471238, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471239, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471240, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471241, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781471242, + 2400030464, + 60.9, + "0x0" + ], + [ + 1781471243, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471244, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471245, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471246, + 2400023808, + 61.5, + "0x0" + ], + [ + 1781471247, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471248, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471249, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471250, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471251, + 2400033792, + 59.8, + "0x0" + ], + [ + 1781471252, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471253, + 2400033792, + 60.9, + "0x0" + ], + [ + 1781471254, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471255, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781471256, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471257, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781471258, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471259, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471260, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471261, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471262, + 2400033792, + 60.9, + "0x0" + ], + [ + 1781471263, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471265, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471266, + 2400037120, + 59.8, + "0x0" + ], + [ + 1781471267, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471268, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471269, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471270, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471271, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471272, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471273, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471274, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471275, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471276, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471277, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471278, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471279, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471280, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471281, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781471282, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471283, + 2400037120, + 60.9, + "0x0" + ], + [ + 1781471284, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471285, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471286, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471287, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471288, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471289, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471290, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471291, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471292, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471293, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471294, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781471295, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471296, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781471297, + 2400030464, + 59.3, + "0x0" + ], + [ + 1781471298, + 2400023808, + 60.9, + "0x0" + ], + [ + 1781471299, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471300, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471301, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471302, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471303, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471304, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471305, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471306, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471307, + 2400027136, + 60.9, + "0x0" + ], + [ + 1781471308, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471309, + 2400030464, + 59.8, + "0x0" + ], + [ + 1781471310, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471311, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471312, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471313, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471314, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471315, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471316, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471317, + 2400023808, + 60.4, + "0x0" + ], + [ + 1781471319, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471320, + 2400017408, + 60.9, + "0x0" + ], + [ + 1781471321, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471322, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781471323, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471324, + 2400017408, + 60.4, + "0x0" + ], + [ + 1781471325, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471326, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471327, + 2400027136, + 60.4, + "0x0" + ], + [ + 1781471328, + 2400033792, + 59.3, + "0x0" + ], + [ + 1781471329, + 2400037120, + 59.8, + "0x0" + ], + [ + 1781471330, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471331, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471332, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471333, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471334, + 2400037120, + 60.4, + "0x0" + ], + [ + 1781471335, + 2400027136, + 59.3, + "0x0" + ], + [ + 1781471336, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471337, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781471338, + 2400020480, + 60.4, + "0x0" + ], + [ + 1781471339, + 2400017408, + 59.8, + "0x0" + ], + [ + 1781471340, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471341, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471342, + 2400033792, + 59.8, + "0x0" + ], + [ + 1781471343, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471344, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471345, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471346, + 2400033792, + 59.8, + "0x0" + ], + [ + 1781471347, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471348, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471349, + 2400030464, + 60.4, + "0x0" + ], + [ + 1781471350, + 2400033792, + 59.3, + "0x0" + ], + [ + 1781471351, + 2400033792, + 60.4, + "0x0" + ], + [ + 1781471352, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471353, + 2400030464, + 59.3, + "0x0" + ], + [ + 1781471354, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471355, + 2400023808, + 59.3, + "0x0" + ], + [ + 1781471356, + 2400027136, + 59.8, + "0x0" + ], + [ + 1781471357, + 2400020480, + 59.8, + "0x0" + ], + [ + 1781471358, + 2400023808, + 59.8, + "0x0" + ], + [ + 1781471359, + 2400027136, + 60.4, + "0x0" + ] + ], + "temp_c": { + "min": 50.5, + "max": 65.9, + "mean": 60.731, + "samples": 995 + }, + "arm_clock_hz": { + "min": 2400017408, + "max": 2400037120, + "mean": 2400026135.413, + "samples": 995, + "spread_frac": 0.0 + }, + "throttling_detected": false + }, + "warnings": [], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 875, + "timed_iters": 4376, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57126.46, + "samples": 21880, + "median": 56870.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 56833.0, + "q3": 56925.0, + "min": 56721.0, + "max": 80388.0, + "mean": 56970.65, + "stddev": 667.44, + "ops_per_sec": 17583.96, + "per_rep_median": [ + 56851.0, + 56870.0, + 56870.0, + 56888.0, + 56870.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 302, + "timed_iters": 1511, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 165440.83, + "samples": 7555, + "median": 165443.0, + "mad": 111.0, + "iqr": 222.0, + "q1": 165368.0, + "q3": 165590.0, + "min": 164665.0, + "max": 196701.0, + "mean": 165578.37, + "stddev": 982.48, + "ops_per_sec": 6044.38, + "per_rep_median": [ + 165442.0, + 165498.0, + 165553.0, + 165220.0, + 165442.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2719, + "timed_iters": 13597, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18386.6, + "samples": 67985, + "median": 18315.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 18296.0, + "q3": 18333.0, + "min": 18222.0, + "max": 43185.0, + "mean": 18405.77, + "stddev": 490.98, + "ops_per_sec": 54600.05, + "per_rep_median": [ + 18333.0, + 18333.0, + 18315.0, + 18315.0, + 18314.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2427, + "timed_iters": 12137, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20598.4, + "samples": 60685, + "median": 20629.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 20611.0, + "q3": 20648.0, + "min": 20537.0, + "max": 64147.0, + "mean": 20688.15, + "stddev": 635.79, + "ops_per_sec": 48475.45, + "per_rep_median": [ + 20611.0, + 20611.0, + 20629.0, + 20630.0, + 20629.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2085, + "timed_iters": 10424, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23982.54, + "samples": 52120, + "median": 23963.0, + "mad": 18.0, + "iqr": 36.0, + "q1": 23945.0, + "q3": 23981.0, + "min": 23889.0, + "max": 63925.0, + "mean": 24001.16, + "stddev": 497.88, + "ops_per_sec": 41731.0, + "per_rep_median": [ + 23963.0, + 23963.0, + 23963.0, + 23963.0, + 23963.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1669, + "timed_iters": 8343, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 29964.53, + "samples": 41715, + "median": 29795.0, + "mad": 36.0, + "iqr": 56.0, + "q1": 29759.0, + "q3": 29815.0, + "min": 29666.0, + "max": 58500.0, + "mean": 29989.71, + "stddev": 827.43, + "ops_per_sec": 33562.68, + "per_rep_median": [ + 29778.0, + 29777.0, + 29795.0, + 29796.0, + 29796.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1565, + "timed_iters": 7827, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31942.33, + "samples": 39135, + "median": 31944.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 31925.0, + "q3": 31962.0, + "min": 31833.0, + "max": 69592.0, + "mean": 31999.28, + "stddev": 576.28, + "ops_per_sec": 31304.78, + "per_rep_median": [ + 31944.0, + 31944.0, + 31944.0, + 31944.0, + 31926.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1339, + "timed_iters": 6694, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37346.41, + "samples": 33470, + "median": 37351.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 37315.0, + "q3": 37370.0, + "min": 37240.0, + "max": 64499.0, + "mean": 37391.58, + "stddev": 522.88, + "ops_per_sec": 26773.04, + "per_rep_median": [ + 37351.0, + 37333.0, + 37351.0, + 37333.0, + 37351.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1127, + "timed_iters": 5637, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44346.39, + "samples": 28185, + "median": 44018.0, + "mad": 37.0, + "iqr": 93.0, + "q1": 43981.0, + "q3": 44074.0, + "min": 43833.0, + "max": 90054.0, + "mean": 44402.14, + "stddev": 1294.75, + "ops_per_sec": 22717.98, + "per_rep_median": [ + 44018.0, + 44018.0, + 44018.0, + 44018.0, + 44037.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1050, + "timed_iters": 5251, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47606.96, + "samples": 26255, + "median": 47611.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 47592.0, + "q3": 47629.0, + "min": 47517.0, + "max": 84166.0, + "mean": 47697.05, + "stddev": 712.11, + "ops_per_sec": 21003.55, + "per_rep_median": [ + 47611.0, + 47610.0, + 47611.0, + 47610.0, + 47611.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 904, + "timed_iters": 4519, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55316.27, + "samples": 22595, + "median": 55314.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 55296.0, + "q3": 55351.0, + "min": 55203.0, + "max": 78350.0, + "mean": 55363.14, + "stddev": 479.59, + "ops_per_sec": 18078.61, + "per_rep_median": [ + 55314.0, + 55314.0, + 55314.0, + 55314.0, + 55314.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 184799722.0, + "samples": 150, + "median": 149112976.0, + "mad": 70636582.5, + "iqr": 141487624.5, + "q1": 78525787.25, + "q3": 220013411.75, + "min": 78357900.0, + "max": 679905278.0, + "mean": 174635063.73, + "stddev": 117567150.04, + "ops_per_sec": 6.71, + "per_rep_median": [ + 131782362.5, + 131601379.0, + 131526392.0, + 114206664.0, + 149228415.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 708, + "timed_iters": 3540, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 70628.3, + "samples": 17700, + "median": 66036.0, + "mad": 407.0, + "iqr": 5666.0, + "q1": 65851.0, + "q3": 71517.0, + "min": 65425.0, + "max": 137906.0, + "mean": 70331.27, + "stddev": 6685.97, + "ops_per_sec": 15143.26, + "per_rep_median": [ + 66036.0, + 66073.0, + 65981.0, + 66017.0, + 66073.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25699294.67, + "samples": 150, + "median": 25693857.5, + "mad": 2537.0, + "iqr": 6027.25, + "q1": 25691950.0, + "q3": 25697977.25, + "min": 25687580.0, + "max": 25769300.0, + "mean": 25698017.39, + "stddev": 13510.33, + "ops_per_sec": 38.92, + "per_rep_median": [ + 25694569.5, + 25693755.0, + 25693764.5, + 25693857.5, + 25693996.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 343740577.0, + "samples": 150, + "median": 346631837.5, + "mad": 115003756.5, + "iqr": 446655318.25, + "q1": 232486435.75, + "q3": 679141754.0, + "min": 231337249.0, + "max": 1801854820.0, + "mean": 498135911.15, + "stddev": 302820295.74, + "ops_per_sec": 2.88, + "per_rep_median": [ + 401890289.0, + 455421459.5, + 344289965.0, + 344779682.5, + 400545115.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 360, + "timed_iters": 1800, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 138910.4, + "samples": 9000, + "median": 130795.0, + "mad": 11185.0, + "iqr": 32277.0, + "q1": 119795.0, + "q3": 152072.0, + "min": 118536.0, + "max": 299663.0, + "mean": 139135.4, + "stddev": 24113.26, + "ops_per_sec": 7645.55, + "per_rep_median": [ + 130748.5, + 130813.0, + 130776.0, + 130813.0, + 130868.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58723309.0, + "samples": 150, + "median": 58763634.0, + "mad": 203174.0, + "iqr": 427615.25, + "q1": 58574298.25, + "q3": 59001913.5, + "min": 58078595.0, + "max": 59425210.0, + "mean": 58786065.94, + "stddev": 299760.84, + "ops_per_sec": 17.02, + "per_rep_median": [ + 58790845.5, + 58631755.0, + 58721625.5, + 58977270.5, + 58761162.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 230131490.0, + "samples": 150, + "median": 229154659.5, + "mad": 307020.5, + "iqr": 616331.25, + "q1": 228858362.25, + "q3": 229474693.5, + "min": 228654001.0, + "max": 244947605.0, + "mean": 229510776.72, + "stddev": 1891163.33, + "ops_per_sec": 4.36, + "per_rep_median": [ + 229271533.5, + 228987395.0, + 229290416.5, + 229082029.0, + 229082016.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 370, + "timed_iters": 1849, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 135177.15, + "samples": 9245, + "median": 127332.0, + "mad": 11184.0, + "iqr": 27814.0, + "q1": 116332.0, + "q3": 144146.0, + "min": 115536.0, + "max": 318089.0, + "mean": 135480.92, + "stddev": 23920.83, + "ops_per_sec": 7853.49, + "per_rep_median": [ + 127276.0, + 127462.0, + 127184.0, + 127424.0, + 127424.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58274492.0, + "samples": 150, + "median": 58739164.5, + "mad": 37990.0, + "iqr": 463754.75, + "q1": 58283632.0, + "q3": 58747386.75, + "min": 58187605.0, + "max": 58844913.0, + "mean": 58568069.93, + "stddev": 225369.32, + "ops_per_sec": 17.02, + "per_rep_median": [ + 58739904.0, + 58739673.0, + 58741349.0, + 58679748.5, + 58738748.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 416143975.0, + "samples": 150, + "median": 711190730.5, + "mad": 296136368.0, + "iqr": 886394939.5, + "q1": 416204161.25, + "q3": 1302599100.75, + "min": 414477284.0, + "max": 5463328278.0, + "mean": 1056475619.66, + "stddev": 829748214.84, + "ops_per_sec": 1.41, + "per_rep_median": [ + 1007338666.0, + 710416257.0, + 563196862.5, + 1005909453.0, + 710220756.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 201, + "timed_iters": 1006, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 248422.46, + "samples": 5030, + "median": 228553.0, + "mad": 20722.0, + "iqr": 53142.0, + "q1": 208239.0, + "q3": 261381.0, + "min": 207220.0, + "max": 753824.0, + "mean": 248855.0, + "stddev": 49650.17, + "ops_per_sec": 4375.35, + "per_rep_median": [ + 228479.0, + 241488.0, + 241571.0, + 225608.0, + 225478.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 113041688.0, + "samples": 150, + "median": 112704702.5, + "mad": 315376.0, + "iqr": 640015.25, + "q1": 112314342.25, + "q3": 112954357.5, + "min": 111234618.0, + "max": 114119847.0, + "mean": 112711409.43, + "stddev": 680846.39, + "ops_per_sec": 8.87, + "per_rep_median": [ + 112690432.5, + 112683832.0, + 112592954.5, + 112907350.0, + 112775186.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1017883882.0, + "samples": 150, + "median": 718878549.0, + "mad": 300086960.5, + "iqr": 898033413.0, + "q1": 419296782.5, + "q3": 1317330195.5, + "min": 418016991.0, + "max": 9996117902.0, + "mean": 1115106634.63, + "stddev": 1070492841.27, + "ops_per_sec": 1.39, + "per_rep_median": [ + 718460702.5, + 867044344.5, + 717382229.5, + 719337804.5, + 1016624536.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 137, + "timed_iters": 686, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 364394.87, + "samples": 3430, + "median": 356718.0, + "mad": 15129.0, + "iqr": 44537.0, + "q1": 341755.0, + "q3": 386292.0, + "min": 340700.0, + "max": 612345.0, + "mean": 368555.53, + "stddev": 33395.22, + "ops_per_sec": 2803.33, + "per_rep_median": [ + 356699.5, + 356709.0, + 356848.0, + 356626.0, + 356755.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 109137929.0, + "samples": 150, + "median": 109087043.5, + "mad": 486661.0, + "iqr": 768568.75, + "q1": 108443731.75, + "q3": 109212300.5, + "min": 107736576.0, + "max": 111139279.0, + "mean": 108975328.29, + "stddev": 763265.56, + "ops_per_sec": 9.17, + "per_rep_median": [ + 109456592.5, + 109086829.0, + 107919685.0, + 109078182.0, + 109091988.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 778548574.0, + "samples": 150, + "median": 812506665.5, + "mad": 364407597.0, + "iqr": 1313964562.25, + "q1": 450708394.0, + "q3": 1764672956.25, + "min": 447597482.0, + "max": 4748630326.0, + "mean": 1298286193.1, + "stddev": 962721664.61, + "ops_per_sec": 1.23, + "per_rep_median": [ + 1269105419.0, + 960400720.0, + 777487344.0, + 795566393.0, + 1106084060.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 180, + "timed_iters": 900, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 277763.83, + "samples": 4500, + "median": 260923.0, + "mad": 16361.0, + "iqr": 48019.0, + "q1": 244793.0, + "q3": 292812.0, + "min": 243479.0, + "max": 503921.0, + "mean": 273006.01, + "stddev": 34090.39, + "ops_per_sec": 3832.55, + "per_rep_median": [ + 260951.0, + 260969.5, + 260868.0, + 260923.0, + 260904.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 136785685.0, + "samples": 150, + "median": 136620105.0, + "mad": 222685.0, + "iqr": 483889.25, + "q1": 136351178.5, + "q3": 136835067.75, + "min": 135986974.0, + "max": 137074183.0, + "mean": 136581223.89, + "stddev": 288424.16, + "ops_per_sec": 7.32, + "per_rep_median": [ + 136553059.5, + 136744002.0, + 136450173.0, + 136721513.0, + 136659931.0 + ] + } + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 64, + "timed_iters": 318, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 787198.71, + "samples": 1590, + "median": 786260.0, + "mad": 379.0, + "iqr": 790.75, + "q1": 785811.25, + "q3": 786602.0, + "min": 785084.0, + "max": 842472.0, + "mean": 786664.46, + "stddev": 2433.84, + "ops_per_sec": 1271.84, + "per_rep_median": [ + 786149.0, + 785991.5, + 786288.0, + 786306.5, + 786306.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 54, + "timed_iters": 271, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 923926.83, + "samples": 1355, + "median": 923231.0, + "mad": 222.0, + "iqr": 1657.0, + "q1": 923064.0, + "q3": 924721.0, + "min": 922638.0, + "max": 997452.0, + "mean": 924041.99, + "stddev": 3228.79, + "ops_per_sec": 1083.15, + "per_rep_median": [ + 923250.0, + 923231.0, + 923212.0, + 923194.0, + 923268.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 277, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 902183.67, + "samples": 1385, + "median": 901157.0, + "mad": 185.0, + "iqr": 611.0, + "q1": 901009.0, + "q3": 901620.0, + "min": 900287.0, + "max": 974267.0, + "mean": 901860.34, + "stddev": 3269.77, + "ops_per_sec": 1109.68, + "per_rep_median": [ + 901194.0, + 901194.0, + 901213.0, + 901046.0, + 901157.0 + ] + } + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 30, + "timed_iters": 148, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1692756.52, + "samples": 740, + "median": 1690936.0, + "mad": 2083.0, + "iqr": 4194.25, + "q1": 1689143.5, + "q3": 1693337.75, + "min": 1687593.0, + "max": 1761999.0, + "mean": 1692038.49, + "stddev": 5448.85, + "ops_per_sec": 591.39, + "per_rep_median": [ + 1690630.0, + 1691037.5, + 1690861.5, + 1690880.0, + 1691491.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 26, + "timed_iters": 129, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1931951.06, + "samples": 645, + "median": 1931424.0, + "mad": 982.0, + "iqr": 2019.0, + "q1": 1930701.0, + "q3": 1932720.0, + "min": 1927998.0, + "max": 1994201.0, + "mean": 1932259.0, + "stddev": 5194.06, + "ops_per_sec": 517.75, + "per_rep_median": [ + 1931164.0, + 1931590.0, + 1931627.0, + 1931257.0, + 1931350.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1882102.16, + "samples": 665, + "median": 1881924.0, + "mad": 796.0, + "iqr": 1573.0, + "q1": 1881110.0, + "q3": 1882683.0, + "min": 1878276.0, + "max": 1967479.0, + "mean": 1882595.1, + "stddev": 5908.18, + "ops_per_sec": 531.37, + "per_rep_median": [ + 1881998.0, + 1881905.0, + 1881961.0, + 1881831.0, + 1881924.0 + ] + } + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 81, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3071921.13, + "samples": 405, + "median": 3070115.0, + "mad": 944.0, + "iqr": 1962.0, + "q1": 3068745.0, + "q3": 3070707.0, + "min": 3063208.0, + "max": 3148058.0, + "mean": 3070747.35, + "stddev": 7790.92, + "ops_per_sec": 325.72, + "per_rep_median": [ + 3070115.0, + 3070245.0, + 3070226.0, + 3069930.0, + 3070041.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3473300.87, + "samples": 360, + "median": 3471713.0, + "mad": 1305.0, + "iqr": 3184.0, + "q1": 3470629.75, + "q3": 3473813.75, + "min": 3467055.0, + "max": 6205285.0, + "mean": 3482167.84, + "stddev": 144513.38, + "ops_per_sec": 288.04, + "per_rep_median": [ + 3472083.5, + 3471388.5, + 3471870.0, + 3472045.5, + 3471185.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3414692.87, + "samples": 365, + "median": 3409075.0, + "mad": 1203.0, + "iqr": 2464.0, + "q1": 3408111.0, + "q3": 3410575.0, + "min": 3405407.0, + "max": 3463444.0, + "mean": 3410153.92, + "stddev": 5227.01, + "ops_per_sec": 293.33, + "per_rep_median": [ + 3409000.0, + 3409204.0, + 3409278.0, + 3408500.0, + 3409555.0 + ] + } + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 853, + "timed_iters": 4266, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58598.71, + "samples": 21330, + "median": 58481.0, + "mad": 36.0, + "iqr": 56.0, + "q1": 58462.0, + "q3": 58518.0, + "min": 58369.0, + "max": 89073.0, + "mean": 58577.84, + "stddev": 670.45, + "ops_per_sec": 17099.57, + "per_rep_median": [ + 58499.0, + 58499.0, + 58481.0, + 58481.0, + 58480.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 864, + "timed_iters": 4322, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57849.76, + "samples": 21610, + "median": 57851.0, + "mad": 19.0, + "iqr": 56.0, + "q1": 57832.0, + "q3": 57888.0, + "min": 57740.0, + "max": 97333.0, + "mean": 57920.38, + "stddev": 656.68, + "ops_per_sec": 17285.79, + "per_rep_median": [ + 57851.0, + 57851.0, + 57851.0, + 57852.0, + 57852.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 348, + "timed_iters": 1742, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 143543.33, + "samples": 8710, + "median": 143240.0, + "mad": 56.0, + "iqr": 129.0, + "q1": 143184.0, + "q3": 143313.0, + "min": 142943.0, + "max": 193850.0, + "mean": 143390.46, + "stddev": 1016.01, + "ops_per_sec": 6981.29, + "per_rep_median": [ + 143313.0, + 143240.0, + 143240.0, + 143220.0, + 143221.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 464, + "timed_iters": 2321, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107715.12, + "samples": 11605, + "median": 107369.0, + "mad": 612.0, + "iqr": 1223.0, + "q1": 106776.0, + "q3": 107999.0, + "min": 104499.0, + "max": 129221.0, + "mean": 107446.26, + "stddev": 1178.92, + "ops_per_sec": 9313.68, + "per_rep_median": [ + 107462.0, + 107443.0, + 107332.0, + 107332.0, + 107332.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 91, + "timed_iters": 453, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 551837.95, + "samples": 2265, + "median": 399385.0, + "mad": 181758.0, + "iqr": 364070.0, + "q1": 297145.0, + "q3": 661215.0, + "min": 215887.0, + "max": 2974394.0, + "mean": 518639.89, + "stddev": 343767.21, + "ops_per_sec": 2503.85, + "per_rep_median": [ + 400088.0, + 399385.0, + 417995.0, + 397977.0, + 399348.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 416, + "timed_iters": 2080, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 120197.33, + "samples": 10400, + "median": 120054.0, + "mad": 185.0, + "iqr": 1019.0, + "q1": 119147.0, + "q3": 120166.0, + "min": 118721.0, + "max": 153702.0, + "mean": 119857.12, + "stddev": 947.25, + "ops_per_sec": 8329.59, + "per_rep_median": [ + 119184.0, + 120165.0, + 120110.0, + 120109.0, + 119091.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 261, + "timed_iters": 1304, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 191708.32, + "samples": 6520, + "median": 191350.0, + "mad": 445.0, + "iqr": 982.0, + "q1": 190979.0, + "q3": 191961.0, + "min": 189405.0, + "max": 215923.0, + "mean": 191719.0, + "stddev": 1370.95, + "ops_per_sec": 5226.03, + "per_rep_median": [ + 191350.0, + 191368.0, + 191350.0, + 191369.0, + 191322.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 63, + "timed_iters": 317, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 787940.97, + "samples": 1585, + "median": 646327.0, + "mad": 302274.0, + "iqr": 601938.0, + "q1": 429366.0, + "q3": 1031304.0, + "min": 320201.0, + "max": 4198714.0, + "mean": 807147.09, + "stddev": 534312.87, + "ops_per_sec": 1547.2, + "per_rep_median": [ + 596382.0, + 674382.0, + 643937.0, + 595512.0, + 704492.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 263, + "timed_iters": 1315, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 190102.09, + "samples": 6575, + "median": 188998.0, + "mad": 148.0, + "iqr": 1408.0, + "q1": 188868.0, + "q3": 190276.0, + "min": 188498.0, + "max": 213961.0, + "mean": 189524.87, + "stddev": 1269.12, + "ops_per_sec": 5291.06, + "per_rep_median": [ + 189017.0, + 188961.0, + 188998.0, + 188961.0, + 188998.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 173, + "timed_iters": 864, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 289495.87, + "samples": 4320, + "median": 288367.0, + "mad": 1148.0, + "iqr": 2703.0, + "q1": 287423.0, + "q3": 290126.0, + "min": 283997.0, + "max": 323312.0, + "mean": 288965.5, + "stddev": 2378.11, + "ops_per_sec": 3467.8, + "per_rep_median": [ + 288515.0, + 290469.5, + 288432.0, + 288089.5, + 287737.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 52, + "timed_iters": 262, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 954760.44, + "samples": 1310, + "median": 836620.5, + "mad": 346653.0, + "iqr": 728844.25, + "q1": 492337.25, + "q3": 1221181.5, + "min": 484902.0, + "max": 4599617.0, + "mean": 986190.95, + "stddev": 554189.02, + "ops_per_sec": 1195.29, + "per_rep_median": [ + 834472.5, + 835018.5, + 835047.0, + 839093.0, + 835639.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 163, + "timed_iters": 817, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 305954.27, + "samples": 4085, + "median": 308830.0, + "mad": 555.0, + "iqr": 3945.0, + "q1": 305126.0, + "q3": 309071.0, + "min": 304608.0, + "max": 339256.0, + "mean": 307626.0, + "stddev": 2379.4, + "ops_per_sec": 3238.03, + "per_rep_median": [ + 305182.0, + 309070.0, + 305071.0, + 308941.0, + 308941.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 6, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 8956138.86, + "samples": 150, + "median": 8912589.5, + "mad": 1152228.0, + "iqr": 2525819.75, + "q1": 7789703.0, + "q3": 10315522.75, + "min": 7268829.0, + "max": 25963925.0, + "mean": 9644898.91, + "stddev": 2732805.86, + "ops_per_sec": 112.2, + "per_rep_median": [ + 8822498.0, + 9188558.5, + 9108855.5, + 8550019.0, + 8807923.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 172, + "timed_iters": 860, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 290816.8, + "samples": 4300, + "median": 290145.0, + "mad": 2222.0, + "iqr": 4166.0, + "q1": 288627.0, + "q3": 292793.0, + "min": 278497.0, + "max": 332385.0, + "mean": 290528.89, + "stddev": 3629.12, + "ops_per_sec": 3446.55, + "per_rep_median": [ + 290080.0, + 290247.0, + 290145.0, + 290311.5, + 290025.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 980, + "timed_iters": 4902, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 51001.75, + "samples": 24510, + "median": 50721.0, + "mad": 74.0, + "iqr": 166.0, + "q1": 50648.0, + "q3": 50814.0, + "min": 50426.0, + "max": 74684.0, + "mean": 50769.9, + "stddev": 443.89, + "ops_per_sec": 19715.7, + "per_rep_median": [ + 50907.0, + 50759.0, + 50685.0, + 50703.0, + 50610.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25134242.0, + "samples": 150, + "median": 26162820.0, + "mad": 2447445.0, + "iqr": 5291142.5, + "q1": 24441927.25, + "q3": 29733069.75, + "min": 22854329.0, + "max": 60264888.0, + "mean": 28376629.86, + "stddev": 6496045.52, + "ops_per_sec": 38.22, + "per_rep_median": [ + 25594576.5, + 26162820.0, + 26599195.5, + 26959423.0, + 25638067.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 84, + "timed_iters": 422, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 591832.56, + "samples": 2110, + "median": 592049.0, + "mad": 2981.0, + "iqr": 5731.75, + "q1": 588979.5, + "q3": 594711.25, + "min": 579346.0, + "max": 663067.0, + "mean": 592201.69, + "stddev": 5622.16, + "ops_per_sec": 1689.05, + "per_rep_median": [ + 591280.5, + 592540.5, + 591855.0, + 592012.5, + 592114.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 497, + "timed_iters": 2487, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100540.67, + "samples": 12435, + "median": 99832.0, + "mad": 148.0, + "iqr": 315.0, + "q1": 99721.0, + "q3": 100036.0, + "min": 99332.0, + "max": 121851.0, + "mean": 99945.44, + "stddev": 557.67, + "ops_per_sec": 10016.83, + "per_rep_median": [ + 100240.0, + 99980.0, + 99777.0, + 99759.0, + 99684.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 158, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1587221.29, + "samples": 790, + "median": 1564038.5, + "mad": 2509.0, + "iqr": 9568.75, + "q1": 1556428.0, + "q3": 1565996.75, + "min": 1552409.0, + "max": 1603520.0, + "mean": 1562276.88, + "stddev": 5883.26, + "ops_per_sec": 639.37, + "per_rep_median": [ + 1568446.0, + 1565919.0, + 1563909.0, + 1556131.5, + 1554761.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 36391646.0, + "samples": 150, + "median": 36453691.5, + "mad": 28471.0, + "iqr": 59434.25, + "q1": 36426558.25, + "q3": 36485992.5, + "min": 36350999.0, + "max": 36784531.0, + "mean": 36461312.55, + "stddev": 52297.55, + "ops_per_sec": 27.43, + "per_rep_median": [ + 36463089.5, + 36469144.5, + 36448034.5, + 36432886.5, + 36449960.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 22, + "timed_iters": 110, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2265883.07, + "samples": 550, + "median": 2265550.0, + "mad": 1463.0, + "iqr": 2087.5, + "q1": 2263828.0, + "q3": 2265915.5, + "min": 2261031.0, + "max": 2336012.0, + "mean": 2265715.09, + "stddev": 4161.48, + "ops_per_sec": 441.39, + "per_rep_median": [ + 2265799.5, + 2265513.0, + 2265568.0, + 2265485.0, + 2265605.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 98453406.0, + "samples": 150, + "median": 96994931.0, + "mad": 159887.5, + "iqr": 342645.5, + "q1": 96850618.0, + "q3": 97193263.5, + "min": 96713962.0, + "max": 98395110.0, + "mean": 97092560.29, + "stddev": 304231.44, + "ops_per_sec": 10.31, + "per_rep_median": [ + 96988986.5, + 96853034.0, + 96845858.5, + 97181115.0, + 97301669.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 739033205.0, + "samples": 150, + "median": 734144968.5, + "mad": 793163.5, + "iqr": 1800285.25, + "q1": 733392690.5, + "q3": 735192975.75, + "min": 732311905.0, + "max": 741597234.0, + "mean": 734477709.83, + "stddev": 1540377.88, + "ops_per_sec": 1.36, + "per_rep_median": [ + 736319083.5, + 734048061.5, + 734358934.0, + 733633515.0, + 733373168.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 69, + "timed_iters": 343, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 728316.49, + "samples": 1715, + "median": 728196.0, + "mad": 445.0, + "iqr": 694.5, + "q1": 727733.0, + "q3": 728427.5, + "min": 727270.0, + "max": 741696.0, + "mean": 728350.46, + "stddev": 1228.14, + "ops_per_sec": 1373.26, + "per_rep_median": [ + 727289.0, + 728215.0, + 728196.0, + 727770.0, + 727770.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 21, + "timed_iters": 103, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2424624.87, + "samples": 515, + "median": 2393901.0, + "mad": 1907.0, + "iqr": 5203.0, + "q1": 2392049.0, + "q3": 2397252.0, + "min": 2380623.0, + "max": 2478789.0, + "mean": 2397171.37, + "stddev": 10910.59, + "ops_per_sec": 417.73, + "per_rep_median": [ + 2414178.0, + 2394993.0, + 2392604.0, + 2393753.0, + 2384438.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 64077209.0, + "samples": 150, + "median": 63996885.5, + "mad": 60165.5, + "iqr": 125624.25, + "q1": 63926751.75, + "q3": 64052376.0, + "min": 63787546.0, + "max": 66627256.0, + "mean": 64004437.88, + "stddev": 233834.54, + "ops_per_sec": 15.63, + "per_rep_median": [ + 64062727.0, + 64040496.5, + 63988987.5, + 63961617.5, + 63859748.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3337842.27, + "samples": 375, + "median": 3336038.0, + "mad": 1205.0, + "iqr": 2362.0, + "q1": 3335112.5, + "q3": 3337474.5, + "min": 3304465.0, + "max": 3406353.0, + "mean": 3336742.73, + "stddev": 7359.62, + "ops_per_sec": 299.76, + "per_rep_median": [ + 3335780.0, + 3335817.0, + 3335465.0, + 3336706.0, + 3341909.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 38, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6598853.29, + "samples": 190, + "median": 6308952.0, + "mad": 3703.5, + "iqr": 17264.25, + "q1": 6307159.75, + "q3": 6324424.0, + "min": 6300230.0, + "max": 6587597.0, + "mean": 6363294.25, + "stddev": 101946.36, + "ops_per_sec": 158.5, + "per_rep_median": [ + 6548662.0, + 6315822.5, + 6308396.0, + 6302794.0, + 6308664.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 132457225.0, + "samples": 150, + "median": 132500995.0, + "mad": 99628.5, + "iqr": 3232622.0, + "q1": 132412240.75, + "q3": 135644862.75, + "min": 132353598.0, + "max": 136459016.0, + "mean": 133524201.99, + "stddev": 1583567.21, + "ops_per_sec": 7.55, + "per_rep_median": [ + 132495623.0, + 135643089.5, + 132422791.0, + 132453022.5, + 132615873.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 70, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3559006.8, + "samples": 350, + "median": 3557573.5, + "mad": 1582.5, + "iqr": 3741.0, + "q1": 3554629.0, + "q3": 3558370.0, + "min": 3548592.0, + "max": 3579592.0, + "mean": 3556238.47, + "stddev": 3777.9, + "ops_per_sec": 281.09, + "per_rep_median": [ + 3558471.5, + 3558315.0, + 3557962.0, + 3551406.5, + 3554786.5 + ] + } + } + } + ], + "tls": null +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260625T202356Z.json b/tools/benchmarks/pqc/results/rasberrypi5-20260625T202356Z.json new file mode 100644 index 0000000..d6beada --- /dev/null +++ b/tools/benchmarks/pqc/results/rasberrypi5-20260625T202356Z.json @@ -0,0 +1,10825 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-06-25T20:46:28Z", + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "host": { + "hostname": "rasberrypi5", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.18.33+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454029312 + }, + "cpu_features": { + "source": "/proc/cpuinfo", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-06-25T20:23:57Z", + "timestamp_end_utc": "2026-06-25T20:46:28Z", + "duration_s": 1351, + "governor_requested": "performance", + "governor_before": "ondemand", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.12.47+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1782419036, + 2400020480, + 49.9, + "0x0" + ], + [ + 1782419036, + 2400033792, + 49.9, + "0x0" + ], + [ + 1782419037, + 2400027136, + 50.5, + "0x0" + ], + [ + 1782419038, + 2400023808, + 51.6, + "0x0" + ], + [ + 1782419040, + 2400027136, + 51.0, + "0x0" + ], + [ + 1782419041, + 2400020480, + 52.1, + "0x0" + ], + [ + 1782419042, + 2400033792, + 52.1, + "0x0" + ], + [ + 1782419043, + 2400027136, + 52.7, + "0x0" + ], + [ + 1782419044, + 2400030464, + 53.2, + "0x0" + ], + [ + 1782419045, + 2400030464, + 52.7, + "0x0" + ], + [ + 1782419046, + 2400023808, + 52.7, + "0x0" + ], + [ + 1782419047, + 2400030464, + 52.7, + "0x0" + ], + [ + 1782419048, + 2400037120, + 52.7, + "0x0" + ], + [ + 1782419049, + 2400023808, + 53.2, + "0x0" + ], + [ + 1782419050, + 2400027136, + 53.2, + "0x0" + ], + [ + 1782419051, + 2400030464, + 52.1, + "0x0" + ], + [ + 1782419052, + 2400023808, + 53.2, + "0x0" + ], + [ + 1782419053, + 2400037120, + 53.2, + "0x0" + ], + [ + 1782419054, + 2400023808, + 52.7, + "0x0" + ], + [ + 1782419055, + 2400027136, + 53.2, + "0x0" + ], + [ + 1782419056, + 2400020480, + 54.3, + "0x0" + ], + [ + 1782419057, + 2400020480, + 53.2, + "0x0" + ], + [ + 1782419058, + 2400027136, + 53.2, + "0x0" + ], + [ + 1782419059, + 2400030464, + 54.9, + "0x0" + ], + [ + 1782419060, + 2400023808, + 54.9, + "0x0" + ], + [ + 1782419061, + 2400020480, + 54.9, + "0x0" + ], + [ + 1782419062, + 2400023808, + 54.3, + "0x0" + ], + [ + 1782419063, + 2400030464, + 53.8, + "0x0" + ], + [ + 1782419064, + 2400030464, + 54.3, + "0x0" + ], + [ + 1782419065, + 2400020480, + 54.3, + "0x0" + ], + [ + 1782419066, + 2400027136, + 54.3, + "0x0" + ], + [ + 1782419067, + 2400037120, + 54.3, + "0x0" + ], + [ + 1782419068, + 2400020480, + 55.4, + "0x0" + ], + [ + 1782419069, + 2400037120, + 54.9, + "0x0" + ], + [ + 1782419070, + 2400020480, + 54.9, + "0x0" + ], + [ + 1782419071, + 2400030464, + 54.3, + "0x0" + ], + [ + 1782419072, + 2400033792, + 54.9, + "0x0" + ], + [ + 1782419073, + 2400033792, + 54.3, + "0x0" + ], + [ + 1782419074, + 2400030464, + 55.4, + "0x0" + ], + [ + 1782419075, + 2400037120, + 54.9, + "0x0" + ], + [ + 1782419076, + 2400017408, + 54.9, + "0x0" + ], + [ + 1782419077, + 2400037120, + 54.3, + "0x0" + ], + [ + 1782419078, + 2400030464, + 54.9, + "0x0" + ], + [ + 1782419079, + 2400027136, + 54.9, + "0x0" + ], + [ + 1782419080, + 2400020480, + 54.9, + "0x0" + ], + [ + 1782419081, + 2400020480, + 54.3, + "0x0" + ], + [ + 1782419083, + 2400030464, + 54.3, + "0x0" + ], + [ + 1782419084, + 2400027136, + 53.8, + "0x0" + ], + [ + 1782419085, + 2400030464, + 54.3, + "0x0" + ], + [ + 1782419086, + 2400030464, + 53.8, + "0x0" + ], + [ + 1782419087, + 2400023808, + 54.3, + "0x0" + ], + [ + 1782419088, + 2400027136, + 55.4, + "0x0" + ], + [ + 1782419089, + 2400030464, + 55.4, + "0x0" + ], + [ + 1782419090, + 2400023808, + 55.4, + "0x0" + ], + [ + 1782419091, + 2400020480, + 56.0, + "0x0" + ], + [ + 1782419092, + 2400023808, + 56.0, + "0x0" + ], + [ + 1782419093, + 2400023808, + 56.5, + "0x0" + ], + [ + 1782419094, + 2400027136, + 56.5, + "0x0" + ], + [ + 1782419095, + 2400033792, + 56.5, + "0x0" + ], + [ + 1782419096, + 2400027136, + 56.0, + "0x0" + ], + [ + 1782419097, + 2400023808, + 57.1, + "0x0" + ], + [ + 1782419098, + 2400027136, + 56.5, + "0x0" + ], + [ + 1782419099, + 2400033792, + 55.4, + "0x0" + ], + [ + 1782419100, + 2400023808, + 57.1, + "0x0" + ], + [ + 1782419101, + 2400030464, + 56.5, + "0x0" + ], + [ + 1782419102, + 2400030464, + 57.1, + "0x0" + ], + [ + 1782419103, + 2400033792, + 56.0, + "0x0" + ], + [ + 1782419104, + 2400033792, + 57.1, + "0x0" + ], + [ + 1782419105, + 2400023808, + 57.6, + "0x0" + ], + [ + 1782419106, + 2400020480, + 56.5, + "0x0" + ], + [ + 1782419107, + 2400037120, + 56.5, + "0x0" + ], + [ + 1782419108, + 2400030464, + 57.6, + "0x0" + ], + [ + 1782419109, + 2400030464, + 57.1, + "0x0" + ], + [ + 1782419110, + 2400017408, + 58.2, + "0x0" + ], + [ + 1782419111, + 2400020480, + 56.5, + "0x0" + ], + [ + 1782419112, + 2400030464, + 58.2, + "0x0" + ], + [ + 1782419113, + 2400033792, + 57.1, + "0x0" + ], + [ + 1782419114, + 2400017408, + 57.1, + "0x0" + ], + [ + 1782419115, + 2400033792, + 58.2, + "0x0" + ], + [ + 1782419116, + 2400027136, + 57.1, + "0x0" + ], + [ + 1782419117, + 2400037120, + 57.6, + "0x0" + ], + [ + 1782419118, + 2400027136, + 56.5, + "0x0" + ], + [ + 1782419119, + 2400017408, + 57.1, + "0x0" + ], + [ + 1782419120, + 2400030464, + 57.1, + "0x0" + ], + [ + 1782419121, + 2400027136, + 57.1, + "0x0" + ], + [ + 1782419122, + 2400027136, + 56.5, + "0x0" + ], + [ + 1782419123, + 2400020480, + 57.6, + "0x0" + ], + [ + 1782419124, + 2400023808, + 58.2, + "0x0" + ], + [ + 1782419125, + 2400020480, + 57.1, + "0x0" + ], + [ + 1782419126, + 2400020480, + 58.2, + "0x0" + ], + [ + 1782419127, + 2400020480, + 58.2, + "0x0" + ], + [ + 1782419129, + 2400033792, + 57.1, + "0x0" + ], + [ + 1782419130, + 2400020480, + 57.6, + "0x0" + ], + [ + 1782419131, + 2400027136, + 58.2, + "0x0" + ], + [ + 1782419132, + 2400027136, + 58.2, + "0x0" + ], + [ + 1782419133, + 2400030464, + 57.6, + "0x0" + ], + [ + 1782419134, + 2400017408, + 57.6, + "0x0" + ], + [ + 1782419135, + 2400030464, + 57.6, + "0x0" + ], + [ + 1782419136, + 2400030464, + 57.6, + "0x0" + ], + [ + 1782419137, + 2400020480, + 57.6, + "0x0" + ], + [ + 1782419138, + 2400027136, + 58.7, + "0x0" + ], + [ + 1782419139, + 2400017408, + 57.6, + "0x0" + ], + [ + 1782419140, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419141, + 2400027136, + 58.2, + "0x0" + ], + [ + 1782419142, + 2400027136, + 58.2, + "0x0" + ], + [ + 1782419143, + 2400037120, + 58.2, + "0x0" + ], + [ + 1782419144, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419145, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419146, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419147, + 2400033792, + 57.6, + "0x0" + ], + [ + 1782419148, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419149, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782419150, + 2400030464, + 58.2, + "0x0" + ], + [ + 1782419151, + 2400023808, + 59.3, + "0x0" + ], + [ + 1782419152, + 2400033792, + 58.2, + "0x0" + ], + [ + 1782419153, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782419154, + 2400030464, + 58.2, + "0x0" + ], + [ + 1782419155, + 2400030464, + 59.3, + "0x0" + ], + [ + 1782419156, + 2400020480, + 59.3, + "0x0" + ], + [ + 1782419157, + 2400030464, + 59.3, + "0x0" + ], + [ + 1782419158, + 2400030464, + 58.7, + "0x0" + ], + [ + 1782419159, + 2400023808, + 58.7, + "0x0" + ], + [ + 1782419160, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782419161, + 2400030464, + 58.7, + "0x0" + ], + [ + 1782419162, + 2400020480, + 59.8, + "0x0" + ], + [ + 1782419163, + 2400037120, + 57.6, + "0x0" + ], + [ + 1782419164, + 2400033792, + 59.3, + "0x0" + ], + [ + 1782419165, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782419166, + 2400030464, + 59.3, + "0x0" + ], + [ + 1782419167, + 2400020480, + 58.2, + "0x0" + ], + [ + 1782419168, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782419169, + 2400020480, + 58.2, + "0x0" + ], + [ + 1782419170, + 2400027136, + 58.2, + "0x0" + ], + [ + 1782419171, + 2400033792, + 57.1, + "0x0" + ], + [ + 1782419172, + 2400033792, + 57.6, + "0x0" + ], + [ + 1782419173, + 2400033792, + 57.1, + "0x0" + ], + [ + 1782419174, + 2400023808, + 57.1, + "0x0" + ], + [ + 1782419176, + 2400033792, + 57.1, + "0x0" + ], + [ + 1782419177, + 2400030464, + 56.5, + "0x0" + ], + [ + 1782419178, + 2400020480, + 57.1, + "0x0" + ], + [ + 1782419179, + 2400027136, + 57.1, + "0x0" + ], + [ + 1782419180, + 2400020480, + 57.1, + "0x0" + ], + [ + 1782419181, + 2400033792, + 58.7, + "0x0" + ], + [ + 1782419182, + 2400020480, + 58.2, + "0x0" + ], + [ + 1782419183, + 2400020480, + 58.2, + "0x0" + ], + [ + 1782419184, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419185, + 2400027136, + 57.6, + "0x0" + ], + [ + 1782419186, + 2400017408, + 58.2, + "0x0" + ], + [ + 1782419187, + 2400027136, + 58.7, + "0x0" + ], + [ + 1782419188, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782419189, + 2400023808, + 58.7, + "0x0" + ], + [ + 1782419190, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419191, + 2400017408, + 59.3, + "0x0" + ], + [ + 1782419192, + 2400033792, + 58.7, + "0x0" + ], + [ + 1782419193, + 2400037120, + 58.7, + "0x0" + ], + [ + 1782419194, + 2400030464, + 59.3, + "0x0" + ], + [ + 1782419195, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419196, + 2400020480, + 59.8, + "0x0" + ], + [ + 1782419197, + 2400037120, + 58.2, + "0x0" + ], + [ + 1782419198, + 2400033792, + 59.8, + "0x0" + ], + [ + 1782419199, + 2400017408, + 59.8, + "0x0" + ], + [ + 1782419200, + 2400023808, + 59.3, + "0x0" + ], + [ + 1782419201, + 2400037120, + 57.6, + "0x0" + ], + [ + 1782419202, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419203, + 2400023808, + 59.3, + "0x0" + ], + [ + 1782419204, + 2400023808, + 58.7, + "0x0" + ], + [ + 1782419205, + 2400027136, + 59.8, + "0x0" + ], + [ + 1782419206, + 2400023808, + 59.3, + "0x0" + ], + [ + 1782419207, + 2400030464, + 59.3, + "0x0" + ], + [ + 1782419208, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419209, + 2400020480, + 59.3, + "0x0" + ], + [ + 1782419210, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782419211, + 2400023808, + 58.7, + "0x0" + ], + [ + 1782419212, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419213, + 2400020480, + 59.8, + "0x0" + ], + [ + 1782419214, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419215, + 2400030464, + 59.8, + "0x0" + ], + [ + 1782419216, + 2400017408, + 59.8, + "0x0" + ], + [ + 1782419218, + 2400017408, + 58.7, + "0x0" + ], + [ + 1782419219, + 2400027136, + 57.6, + "0x0" + ], + [ + 1782419220, + 2400020480, + 58.7, + "0x0" + ], + [ + 1782419221, + 2400037120, + 57.6, + "0x0" + ], + [ + 1782419222, + 2400027136, + 58.2, + "0x0" + ], + [ + 1782419223, + 2400017408, + 57.1, + "0x0" + ], + [ + 1782419224, + 2400020480, + 57.6, + "0x0" + ], + [ + 1782419225, + 2400030464, + 57.6, + "0x0" + ], + [ + 1782419226, + 2400037120, + 57.1, + "0x0" + ], + [ + 1782419227, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782419228, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782419229, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782419230, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782419231, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782419232, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419233, + 2400033792, + 59.8, + "0x0" + ], + [ + 1782419234, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782419235, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782419236, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419237, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419238, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782419239, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782419240, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782419241, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419242, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782419243, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419244, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782419245, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419246, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419247, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419248, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419249, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419250, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782419251, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419252, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782419253, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419254, + 2400020480, + 59.8, + "0x0" + ], + [ + 1782419255, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782419256, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419257, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782419258, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419259, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419260, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782419261, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782419262, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419263, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419264, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419265, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419266, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419268, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782419269, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782419270, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419271, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419272, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419273, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419274, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782419275, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419276, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782419277, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419278, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419279, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419280, + 2400017408, + 62.0, + "0x0" + ], + [ + 1782419281, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419282, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419283, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419284, + 2400027136, + 59.8, + "0x0" + ], + [ + 1782419285, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419286, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419287, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419288, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782419289, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419290, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419291, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419292, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419293, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419294, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419295, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419296, + 2400037120, + 62.6, + "0x0" + ], + [ + 1782419297, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782419298, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419299, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419300, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419301, + 2400037120, + 63.1, + "0x0" + ], + [ + 1782419302, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419303, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419304, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419305, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419306, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419307, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419308, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419309, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419310, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782419311, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419313, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419314, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419315, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419316, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419317, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419318, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419319, + 2400037120, + 62.6, + "0x0" + ], + [ + 1782419320, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419321, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419322, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782419323, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419324, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782419325, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419326, + 2400017408, + 62.6, + "0x0" + ], + [ + 1782419327, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419328, + 2400017408, + 63.1, + "0x0" + ], + [ + 1782419329, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419330, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419331, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419332, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419333, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419334, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419335, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419336, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419337, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419338, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419339, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419340, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419341, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782419342, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419343, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419344, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419345, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419346, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419347, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419348, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419349, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419350, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419351, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419352, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419353, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419354, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419355, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419356, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419357, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419358, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419359, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419361, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419362, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419363, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419364, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419365, + 2400017408, + 63.7, + "0x0" + ], + [ + 1782419366, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419367, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419368, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419369, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419370, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419371, + 2400017408, + 63.7, + "0x0" + ], + [ + 1782419372, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782419373, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419374, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419375, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419376, + 2400037120, + 63.7, + "0x0" + ], + [ + 1782419377, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419378, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419379, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419380, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419381, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419382, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419383, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419384, + 2400037120, + 62.6, + "0x0" + ], + [ + 1782419385, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419386, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419387, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419388, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419389, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419390, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419391, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419392, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419393, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419394, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419395, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419396, + 2400037120, + 63.7, + "0x0" + ], + [ + 1782419397, + 2400017408, + 63.7, + "0x0" + ], + [ + 1782419398, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419399, + 2400017408, + 62.6, + "0x0" + ], + [ + 1782419400, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419401, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782419402, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419403, + 2400033792, + 64.2, + "0x0" + ], + [ + 1782419405, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419406, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419407, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419408, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419409, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419410, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782419411, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419412, + 2400037120, + 59.8, + "0x0" + ], + [ + 1782419413, + 2400037120, + 59.8, + "0x0" + ], + [ + 1782419414, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782419415, + 2400037120, + 60.4, + "0x0" + ], + [ + 1782419416, + 2400030464, + 59.3, + "0x0" + ], + [ + 1782419417, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782419418, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782419419, + 2400037120, + 59.3, + "0x0" + ], + [ + 1782419420, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782419421, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782419422, + 2400023808, + 59.3, + "0x0" + ], + [ + 1782419423, + 2400030464, + 58.7, + "0x0" + ], + [ + 1782419424, + 2400020480, + 59.8, + "0x0" + ], + [ + 1782419425, + 2400020480, + 59.3, + "0x0" + ], + [ + 1782419426, + 2400033792, + 59.3, + "0x0" + ], + [ + 1782419427, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419428, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782419429, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419430, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419431, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419432, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782419433, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419434, + 2400017408, + 62.0, + "0x0" + ], + [ + 1782419435, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419436, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419437, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419438, + 2400017408, + 62.6, + "0x0" + ], + [ + 1782419439, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419440, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419441, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419442, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419443, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419444, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419445, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419446, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419447, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419448, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419449, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419450, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419451, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419452, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419453, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419455, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419456, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419457, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419458, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419459, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419460, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419461, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419462, + 2400037120, + 63.7, + "0x0" + ], + [ + 1782419463, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419464, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419465, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419466, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419467, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419468, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419469, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419470, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419471, + 2400017408, + 63.7, + "0x0" + ], + [ + 1782419472, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419473, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419474, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419475, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419476, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419477, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419478, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419479, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419480, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419481, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419482, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419483, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419484, + 2400037120, + 63.1, + "0x0" + ], + [ + 1782419485, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419486, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419487, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419488, + 2400037120, + 64.2, + "0x0" + ], + [ + 1782419489, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419490, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419491, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419492, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419493, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419494, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419495, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419496, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419497, + 2400037120, + 63.7, + "0x0" + ], + [ + 1782419498, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419500, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419501, + 2400033792, + 64.2, + "0x0" + ], + [ + 1782419502, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419503, + 2400033792, + 64.2, + "0x0" + ], + [ + 1782419504, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419505, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419506, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419507, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419508, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419509, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419510, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419511, + 2400037120, + 64.2, + "0x0" + ], + [ + 1782419512, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419513, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419514, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419515, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419516, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419517, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419518, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419519, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419520, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419521, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419522, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419523, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419524, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419525, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419526, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419527, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419528, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419529, + 2400033792, + 64.2, + "0x0" + ], + [ + 1782419530, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419531, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419532, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419533, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419534, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419535, + 2400017408, + 63.7, + "0x0" + ], + [ + 1782419536, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419537, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419538, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419539, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419540, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419541, + 2400017408, + 63.7, + "0x0" + ], + [ + 1782419542, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419543, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419544, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419545, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419546, + 2400017408, + 64.2, + "0x0" + ], + [ + 1782419547, + 2400037120, + 64.8, + "0x0" + ], + [ + 1782419549, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419550, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419551, + 2400037120, + 63.1, + "0x0" + ], + [ + 1782419552, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419553, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419554, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419555, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419556, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419557, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419558, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419559, + 2400037120, + 63.7, + "0x0" + ], + [ + 1782419560, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419561, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419562, + 2400037120, + 64.2, + "0x0" + ], + [ + 1782419563, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419564, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419565, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419566, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419567, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419568, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419569, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419570, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419571, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419572, + 2400017408, + 64.2, + "0x0" + ], + [ + 1782419573, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419574, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419575, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419576, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419577, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419578, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419579, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419580, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419581, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419582, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419583, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419584, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419585, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419586, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419587, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419588, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419589, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419590, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419591, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419592, + 2400037120, + 64.8, + "0x0" + ], + [ + 1782419593, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419594, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419595, + 2400033792, + 64.8, + "0x0" + ], + [ + 1782419596, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419597, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419599, + 2400017408, + 65.3, + "0x0" + ], + [ + 1782419600, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419601, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419602, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419603, + 2400037120, + 64.2, + "0x0" + ], + [ + 1782419604, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419605, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419606, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419607, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419608, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419609, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419610, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419611, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419612, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419613, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419614, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419615, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419616, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419617, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419618, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419619, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419620, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419621, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419622, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419623, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782419624, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782419625, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782419626, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419627, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782419628, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782419629, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419630, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782419631, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782419632, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782419633, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782419634, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419635, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419636, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419637, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419638, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419639, + 2400033792, + 63.7, + "0x0" + ], + [ + 1782419640, + 2400023808, + 64.2, + "0x0" + ], + [ + 1782419641, + 2400033792, + 64.2, + "0x0" + ], + [ + 1782419642, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419643, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419644, + 2400023808, + 63.7, + "0x0" + ], + [ + 1782419645, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419646, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419647, + 2400037120, + 64.8, + "0x0" + ], + [ + 1782419649, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419650, + 2400017408, + 65.3, + "0x0" + ], + [ + 1782419651, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419652, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419653, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419654, + 2400017408, + 64.2, + "0x0" + ], + [ + 1782419655, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419656, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419657, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419658, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419659, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419660, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419661, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419662, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419663, + 2400027136, + 64.8, + "0x0" + ], + [ + 1782419664, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419665, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419666, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419667, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419668, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419669, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419670, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419671, + 2400017408, + 64.2, + "0x0" + ], + [ + 1782419672, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782419673, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419674, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419675, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419676, + 2400017408, + 64.2, + "0x0" + ], + [ + 1782419677, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419678, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419679, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419680, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419681, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419682, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419683, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419684, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419685, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419686, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419687, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419688, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419689, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419691, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419692, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419693, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419694, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419695, + 2400037120, + 65.3, + "0x0" + ], + [ + 1782419696, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419697, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419698, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419699, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419700, + 2400017408, + 65.9, + "0x0" + ], + [ + 1782419701, + 2400017408, + 65.3, + "0x0" + ], + [ + 1782419702, + 2400033792, + 64.2, + "0x0" + ], + [ + 1782419703, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419704, + 2400037120, + 65.9, + "0x0" + ], + [ + 1782419705, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419706, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419707, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419708, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419709, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419710, + 2400033792, + 65.3, + "0x0" + ], + [ + 1782419711, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419712, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419713, + 2400033792, + 67.0, + "0x0" + ], + [ + 1782419714, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419715, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419716, + 2400030464, + 65.3, + "0x0" + ], + [ + 1782419717, + 2400023808, + 64.8, + "0x0" + ], + [ + 1782419718, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419719, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419720, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419721, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419722, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419723, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419724, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419725, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419726, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419727, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419728, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419729, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419730, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419731, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419732, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419734, + 2400037120, + 66.4, + "0x0" + ], + [ + 1782419735, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419736, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419737, + 2400023808, + 65.3, + "0x0" + ], + [ + 1782419738, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419739, + 2400027136, + 65.3, + "0x0" + ], + [ + 1782419740, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419741, + 2400020480, + 65.9, + "0x0" + ], + [ + 1782419742, + 2400020480, + 64.2, + "0x0" + ], + [ + 1782419743, + 2400037120, + 65.3, + "0x0" + ], + [ + 1782419744, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419745, + 2400033792, + 65.3, + "0x0" + ], + [ + 1782419746, + 2400037120, + 65.3, + "0x0" + ], + [ + 1782419747, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419748, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419749, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419750, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419751, + 2400017408, + 65.9, + "0x0" + ], + [ + 1782419752, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419753, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419754, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419755, + 2400030464, + 67.0, + "0x0" + ], + [ + 1782419756, + 2400033792, + 66.4, + "0x0" + ], + [ + 1782419757, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419758, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419759, + 2400017408, + 66.4, + "0x0" + ], + [ + 1782419760, + 2400037120, + 66.4, + "0x0" + ], + [ + 1782419761, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419762, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419763, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419764, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419765, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419766, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419767, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419768, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419769, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419770, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419771, + 2400017408, + 65.3, + "0x0" + ], + [ + 1782419772, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419773, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419774, + 2400020480, + 67.5, + "0x0" + ], + [ + 1782419775, + 2400020480, + 65.3, + "0x0" + ], + [ + 1782419777, + 2400030464, + 64.8, + "0x0" + ], + [ + 1782419778, + 2400033792, + 66.4, + "0x0" + ], + [ + 1782419779, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419780, + 2400037120, + 65.3, + "0x0" + ], + [ + 1782419781, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419782, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419783, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419784, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419785, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419786, + 2400033792, + 66.4, + "0x0" + ], + [ + 1782419787, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419788, + 2400020480, + 64.8, + "0x0" + ], + [ + 1782419789, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419790, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419791, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419792, + 2400020480, + 67.0, + "0x0" + ], + [ + 1782419793, + 2400033792, + 67.0, + "0x0" + ], + [ + 1782419794, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419795, + 2400030464, + 67.0, + "0x0" + ], + [ + 1782419796, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419797, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419798, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419799, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419800, + 2400027136, + 65.9, + "0x0" + ], + [ + 1782419801, + 2400033792, + 64.8, + "0x0" + ], + [ + 1782419802, + 2400037120, + 66.4, + "0x0" + ], + [ + 1782419803, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419804, + 2400033792, + 66.4, + "0x0" + ], + [ + 1782419805, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419806, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419807, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419808, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419809, + 2400023808, + 66.4, + "0x0" + ], + [ + 1782419810, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419811, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419812, + 2400030464, + 67.0, + "0x0" + ], + [ + 1782419813, + 2400020480, + 67.0, + "0x0" + ], + [ + 1782419814, + 2400033792, + 65.3, + "0x0" + ], + [ + 1782419815, + 2400017408, + 66.4, + "0x0" + ], + [ + 1782419816, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419817, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419819, + 2400020480, + 67.0, + "0x0" + ], + [ + 1782419820, + 2400023808, + 67.0, + "0x0" + ], + [ + 1782419821, + 2400020480, + 68.1, + "0x0" + ], + [ + 1782419822, + 2400020480, + 67.0, + "0x0" + ], + [ + 1782419823, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419824, + 2400023808, + 67.5, + "0x0" + ], + [ + 1782419825, + 2400030464, + 67.5, + "0x0" + ], + [ + 1782419826, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419827, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419828, + 2400037120, + 66.4, + "0x0" + ], + [ + 1782419829, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419830, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419831, + 2400030464, + 67.5, + "0x0" + ], + [ + 1782419832, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419833, + 2400020480, + 67.5, + "0x0" + ], + [ + 1782419834, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419835, + 2400030464, + 66.4, + "0x0" + ], + [ + 1782419836, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419837, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419838, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419839, + 2400023808, + 67.5, + "0x0" + ], + [ + 1782419840, + 2400033792, + 66.4, + "0x0" + ], + [ + 1782419841, + 2400027136, + 67.0, + "0x0" + ], + [ + 1782419842, + 2400030464, + 65.9, + "0x0" + ], + [ + 1782419843, + 2400017408, + 66.4, + "0x0" + ], + [ + 1782419844, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419845, + 2400023808, + 65.9, + "0x0" + ], + [ + 1782419846, + 2400020480, + 66.4, + "0x0" + ], + [ + 1782419847, + 2400033792, + 65.9, + "0x0" + ], + [ + 1782419848, + 2400027136, + 66.4, + "0x0" + ], + [ + 1782419849, + 2400027136, + 64.2, + "0x0" + ], + [ + 1782419850, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419851, + 2400017408, + 63.1, + "0x0" + ], + [ + 1782419852, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419853, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419854, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419855, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419856, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419857, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419858, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419859, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419860, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419861, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419862, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419863, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419864, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419865, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419866, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419868, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782419869, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419870, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419871, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419872, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419873, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419874, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419875, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419876, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419877, + 2400030464, + 63.7, + "0x0" + ], + [ + 1782419878, + 2400017408, + 63.1, + "0x0" + ], + [ + 1782419879, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419880, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419881, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419882, + 2400020480, + 63.7, + "0x0" + ], + [ + 1782419883, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419884, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419885, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419886, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419887, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419888, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419889, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419890, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419891, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419892, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419893, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419894, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419895, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419896, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419897, + 2400030464, + 64.2, + "0x0" + ], + [ + 1782419898, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419899, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419900, + 2400033792, + 63.1, + "0x0" + ], + [ + 1782419901, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419902, + 2400017408, + 63.1, + "0x0" + ], + [ + 1782419903, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419904, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419905, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419906, + 2400017408, + 62.6, + "0x0" + ], + [ + 1782419907, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419908, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419909, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419910, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419911, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419912, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782419913, + 2400037120, + 62.6, + "0x0" + ], + [ + 1782419914, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419915, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419916, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419917, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419918, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419919, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419920, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419921, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419923, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419924, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419925, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419926, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419927, + 2400017408, + 62.6, + "0x0" + ], + [ + 1782419928, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419929, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419930, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419931, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419932, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419933, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419934, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419935, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419936, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419937, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419938, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419939, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419940, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419941, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419942, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419943, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419944, + 2400037120, + 63.7, + "0x0" + ], + [ + 1782419945, + 2400030464, + 63.1, + "0x0" + ], + [ + 1782419946, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419947, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419948, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419949, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419950, + 2400037120, + 62.6, + "0x0" + ], + [ + 1782419951, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419952, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419953, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419954, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419955, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419956, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782419957, + 2400033792, + 62.6, + "0x0" + ], + [ + 1782419958, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419959, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419960, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419961, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782419962, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782419963, + 2400037120, + 62.6, + "0x0" + ], + [ + 1782419964, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419965, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419966, + 2400023808, + 63.1, + "0x0" + ], + [ + 1782419967, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419968, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782419969, + 2400020480, + 63.1, + "0x0" + ], + [ + 1782419970, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782419971, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419972, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419973, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419974, + 2400027136, + 63.1, + "0x0" + ], + [ + 1782419975, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419977, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419978, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782419979, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419980, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419981, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419982, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419983, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419984, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419985, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782419986, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419987, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419988, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419989, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782419990, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782419991, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782419992, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419993, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782419994, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782419995, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419996, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782419997, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782419998, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782419999, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782420000, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782420001, + 2400017408, + 62.0, + "0x0" + ], + [ + 1782420002, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782420003, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420004, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782420005, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420006, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782420007, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420008, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420009, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782420010, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782420011, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420012, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420013, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420014, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782420015, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782420016, + 2400017408, + 62.0, + "0x0" + ], + [ + 1782420017, + 2400027136, + 63.7, + "0x0" + ], + [ + 1782420018, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420019, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782420020, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782420021, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420022, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782420023, + 2400017408, + 62.0, + "0x0" + ], + [ + 1782420024, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420025, + 2400023808, + 62.6, + "0x0" + ], + [ + 1782420026, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420027, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420028, + 2400017408, + 62.6, + "0x0" + ], + [ + 1782420029, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782420031, + 2400027136, + 62.6, + "0x0" + ], + [ + 1782420032, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420033, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782420034, + 2400020480, + 62.6, + "0x0" + ], + [ + 1782420035, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782420036, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420037, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420038, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420039, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420040, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782420041, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420042, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420043, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420044, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420045, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782420046, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420047, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420048, + 2400030464, + 62.6, + "0x0" + ], + [ + 1782420049, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420050, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420051, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420052, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420053, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420054, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420055, + 2400033792, + 62.0, + "0x0" + ], + [ + 1782420056, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420057, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420058, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420059, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420060, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782420061, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420062, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420063, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420064, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420065, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782420066, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420067, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420068, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782420069, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420070, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420071, + 2400030464, + 59.8, + "0x0" + ], + [ + 1782420072, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420073, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420074, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420075, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420076, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420077, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420078, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420079, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782420080, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420081, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420082, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420083, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420084, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420086, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420087, + 2400017408, + 62.0, + "0x0" + ], + [ + 1782420088, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420089, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420090, + 2400027136, + 62.0, + "0x0" + ], + [ + 1782420091, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420092, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420093, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420094, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420095, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420096, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420097, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420098, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420099, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420100, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420101, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420102, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420103, + 2400033792, + 59.8, + "0x0" + ], + [ + 1782420104, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420105, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420106, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420107, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420108, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420109, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782420110, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420111, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420112, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420113, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420114, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420115, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420116, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420117, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420118, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420119, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420120, + 2400030464, + 59.8, + "0x0" + ], + [ + 1782420121, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420122, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420123, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420124, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420125, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420126, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420127, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420128, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420129, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420130, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420131, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420132, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420134, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420135, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420136, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420137, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420138, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420139, + 2400030464, + 62.0, + "0x0" + ], + [ + 1782420140, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420141, + 2400037120, + 62.0, + "0x0" + ], + [ + 1782420142, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420143, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420144, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420145, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420146, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420147, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420148, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420149, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420150, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420151, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420152, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420153, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420154, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420155, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420156, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420157, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420158, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782420159, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420160, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420161, + 2400030464, + 60.4, + "0x0" + ], + [ + 1782420162, + 2400030464, + 59.8, + "0x0" + ], + [ + 1782420163, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782420164, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420165, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420166, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420167, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420168, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420169, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420170, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420171, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420172, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420173, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420174, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420175, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420176, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420177, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420178, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420179, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420180, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420181, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420182, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420183, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420184, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420185, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420187, + 2400030464, + 60.4, + "0x0" + ], + [ + 1782420188, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420189, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420190, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420191, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420192, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420193, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420194, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782420195, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782420196, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420197, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420198, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420199, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420200, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420201, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420202, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420203, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420204, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420205, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420206, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420207, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420208, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420209, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420210, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420211, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420212, + 2400033792, + 61.5, + "0x0" + ], + [ + 1782420213, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420214, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420215, + 2400030464, + 60.4, + "0x0" + ], + [ + 1782420216, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420217, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782420218, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420219, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420220, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782420221, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782420222, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420223, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420224, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420225, + 2400030464, + 60.4, + "0x0" + ], + [ + 1782420226, + 2400030464, + 60.4, + "0x0" + ], + [ + 1782420227, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420228, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420229, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420230, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420231, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420232, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420233, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420234, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420235, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420236, + 2400027136, + 59.8, + "0x0" + ], + [ + 1782420237, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420238, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420240, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420241, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420242, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420243, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420244, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420245, + 2400037120, + 61.5, + "0x0" + ], + [ + 1782420246, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420247, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420248, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420249, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420250, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420251, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420252, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420253, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420254, + 2400023808, + 62.0, + "0x0" + ], + [ + 1782420255, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420256, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420257, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420258, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420259, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420260, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420261, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420262, + 2400020480, + 62.0, + "0x0" + ], + [ + 1782420263, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420264, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420265, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420266, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420267, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420268, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420269, + 2400017408, + 60.9, + "0x0" + ], + [ + 1782420270, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420271, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420272, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420273, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420274, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782420275, + 2400037120, + 60.4, + "0x0" + ], + [ + 1782420276, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420277, + 2400017408, + 60.4, + "0x0" + ], + [ + 1782420278, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420279, + 2400037120, + 59.8, + "0x0" + ], + [ + 1782420280, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420281, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420282, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420283, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782420284, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420285, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420286, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420287, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420288, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420289, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420290, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420291, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420292, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420294, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420295, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420296, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420297, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420298, + 2400017408, + 59.8, + "0x0" + ], + [ + 1782420299, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420300, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420301, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420302, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420303, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420304, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782420305, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420306, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420307, + 2400033792, + 60.4, + "0x0" + ], + [ + 1782420308, + 2400033792, + 59.8, + "0x0" + ], + [ + 1782420309, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420310, + 2400023808, + 61.5, + "0x0" + ], + [ + 1782420311, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420312, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420313, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420314, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420315, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420316, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420317, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420318, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420319, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420320, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420321, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420322, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420323, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420324, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420325, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420326, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420327, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420328, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420329, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420330, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420331, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420332, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420333, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420334, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420335, + 2400030464, + 59.8, + "0x0" + ], + [ + 1782420336, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420337, + 2400023808, + 59.8, + "0x0" + ], + [ + 1782420338, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420339, + 2400030464, + 59.8, + "0x0" + ], + [ + 1782420340, + 2400027136, + 59.3, + "0x0" + ], + [ + 1782420342, + 2400017408, + 59.8, + "0x0" + ], + [ + 1782420343, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420344, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420345, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420346, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420347, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420348, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420349, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420350, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420351, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420352, + 2400027136, + 60.4, + "0x0" + ], + [ + 1782420353, + 2400020480, + 60.4, + "0x0" + ], + [ + 1782420354, + 2400033792, + 60.9, + "0x0" + ], + [ + 1782420355, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420356, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420357, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420358, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420359, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420360, + 2400030464, + 61.5, + "0x0" + ], + [ + 1782420361, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420362, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420363, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420364, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420365, + 2400023808, + 60.4, + "0x0" + ], + [ + 1782420366, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420367, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420368, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420369, + 2400020480, + 59.3, + "0x0" + ], + [ + 1782420370, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420371, + 2400030464, + 60.4, + "0x0" + ], + [ + 1782420372, + 2400037120, + 60.9, + "0x0" + ], + [ + 1782420373, + 2400020480, + 61.5, + "0x0" + ], + [ + 1782420374, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420375, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420376, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420377, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420378, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420379, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420380, + 2400017408, + 61.5, + "0x0" + ], + [ + 1782420381, + 2400027136, + 61.5, + "0x0" + ], + [ + 1782420382, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420383, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420384, + 2400030464, + 60.9, + "0x0" + ], + [ + 1782420385, + 2400020480, + 60.9, + "0x0" + ], + [ + 1782420386, + 2400027136, + 60.9, + "0x0" + ], + [ + 1782420387, + 2400023808, + 60.9, + "0x0" + ], + [ + 1782420388, + 2400017408, + 60.9, + "0x0" + ] + ], + "temp_c": { + "min": 49.9, + "max": 68.1, + "mean": 61.914, + "samples": 1326 + }, + "arm_clock_hz": { + "min": 2400017408, + "max": 2400037120, + "mean": 2400026263.94, + "samples": 1326, + "spread_frac": 0.0 + }, + "throttling_detected": false + }, + "warnings": [], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 875, + "timed_iters": 4374, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57154.98, + "samples": 21870, + "median": 56907.0, + "mad": 37.0, + "iqr": 111.0, + "q1": 56870.0, + "q3": 56981.0, + "min": 56777.0, + "max": 114870.0, + "mean": 57050.76, + "stddev": 986.98, + "ops_per_sec": 17572.53, + "per_rep_median": [ + 56907.0, + 56889.0, + 56907.0, + 56889.0, + 56945.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 302, + "timed_iters": 1509, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 165680.19, + "samples": 7545, + "median": 165610.0, + "mad": 167.0, + "iqr": 352.0, + "q1": 165444.0, + "q3": 165796.0, + "min": 164703.0, + "max": 194906.0, + "mean": 165761.44, + "stddev": 969.55, + "ops_per_sec": 6038.28, + "per_rep_median": [ + 165610.0, + 165592.0, + 165443.0, + 165629.0, + 165647.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2719, + "timed_iters": 13593, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18391.76, + "samples": 67965, + "median": 18278.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 18259.0, + "q3": 18297.0, + "min": 18185.0, + "max": 51666.0, + "mean": 18383.26, + "stddev": 593.56, + "ops_per_sec": 54710.58, + "per_rep_median": [ + 18278.0, + 18277.0, + 18278.0, + 18277.0, + 18296.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2426, + "timed_iters": 12128, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20613.95, + "samples": 60640, + "median": 20611.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 20593.0, + "q3": 20630.0, + "min": 20519.0, + "max": 66314.0, + "mean": 20694.34, + "stddev": 836.34, + "ops_per_sec": 48517.78, + "per_rep_median": [ + 20629.0, + 20593.0, + 20611.0, + 20611.0, + 20611.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2091, + "timed_iters": 10454, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23915.12, + "samples": 52270, + "median": 23926.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 23907.0, + "q3": 23944.0, + "min": 23851.0, + "max": 54963.0, + "mean": 23951.23, + "stddev": 395.66, + "ops_per_sec": 41795.54, + "per_rep_median": [ + 23926.0, + 23926.0, + 23926.0, + 23925.0, + 23926.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1662, + "timed_iters": 8309, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30086.88, + "samples": 41545, + "median": 29852.0, + "mad": 36.0, + "iqr": 56.0, + "q1": 29833.0, + "q3": 29889.0, + "min": 29722.0, + "max": 62166.0, + "mean": 30050.62, + "stddev": 849.83, + "ops_per_sec": 33498.59, + "per_rep_median": [ + 29852.0, + 29851.0, + 29852.0, + 29852.0, + 29834.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1562, + "timed_iters": 7811, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32007.82, + "samples": 39055, + "median": 31981.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 31963.0, + "q3": 32000.0, + "min": 31870.0, + "max": 70092.0, + "mean": 32074.93, + "stddev": 792.16, + "ops_per_sec": 31268.57, + "per_rep_median": [ + 31981.0, + 31982.0, + 31982.0, + 31981.0, + 31981.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1336, + "timed_iters": 6680, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37422.65, + "samples": 33400, + "median": 37352.0, + "mad": 19.0, + "iqr": 56.0, + "q1": 37333.0, + "q3": 37389.0, + "min": 37240.0, + "max": 82833.0, + "mean": 37419.54, + "stddev": 720.66, + "ops_per_sec": 26772.33, + "per_rep_median": [ + 37370.0, + 37352.0, + 37352.0, + 37370.0, + 37352.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1123, + "timed_iters": 5613, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44537.27, + "samples": 28065, + "median": 44074.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 44037.0, + "q3": 44129.0, + "min": 43907.0, + "max": 77111.0, + "mean": 44415.98, + "stddev": 1057.79, + "ops_per_sec": 22689.11, + "per_rep_median": [ + 44074.0, + 44074.0, + 44074.0, + 44074.0, + 44074.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1046, + "timed_iters": 5230, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47800.1, + "samples": 26150, + "median": 47703.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 47667.0, + "q3": 47722.0, + "min": 47573.0, + "max": 88684.0, + "mean": 47838.4, + "stddev": 1026.98, + "ops_per_sec": 20963.04, + "per_rep_median": [ + 47703.0, + 47685.0, + 47703.0, + 47703.0, + 47703.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 903, + "timed_iters": 4513, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55401.08, + "samples": 22565, + "median": 55370.0, + "mad": 37.0, + "iqr": 56.0, + "q1": 55333.0, + "q3": 55389.0, + "min": 55240.0, + "max": 105111.0, + "mean": 55470.25, + "stddev": 973.64, + "ops_per_sec": 18060.32, + "per_rep_median": [ + 55370.0, + 55370.0, + 55370.0, + 55352.0, + 55370.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 149749809.0, + "samples": 150, + "median": 149235702.5, + "mad": 70675909.5, + "iqr": 141485404.0, + "q1": 78576727.5, + "q3": 220062131.5, + "min": 78418431.0, + "max": 646083950.0, + "mean": 163473782.95, + "stddev": 99898990.43, + "ops_per_sec": 6.7, + "per_rep_median": [ + 131725594.5, + 149755504.5, + 113948890.5, + 149276463.5, + 113966602.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 714, + "timed_iters": 3569, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 70051.26, + "samples": 17845, + "median": 65833.0, + "mad": 352.0, + "iqr": 5667.0, + "q1": 65648.0, + "q3": 71315.0, + "min": 65333.0, + "max": 126869.0, + "mean": 70106.09, + "stddev": 6651.05, + "ops_per_sec": 15189.95, + "per_rep_median": [ + 65833.0, + 65870.0, + 65815.0, + 65703.0, + 65833.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25717655.67, + "samples": 150, + "median": 25696957.5, + "mad": 3416.5, + "iqr": 8458.25, + "q1": 25694314.25, + "q3": 25702772.5, + "min": 25688883.0, + "max": 25770050.0, + "mean": 25702188.51, + "stddev": 14293.3, + "ops_per_sec": 38.92, + "per_rep_median": [ + 25695190.0, + 25696902.0, + 25696319.0, + 25699318.5, + 25696790.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 345101192.0, + "samples": 150, + "median": 344270731.0, + "mad": 112890557.0, + "iqr": 447106044.25, + "q1": 232004846.5, + "q3": 679110890.75, + "min": 231301254.0, + "max": 1794926449.0, + "mean": 531179584.93, + "stddev": 355212346.2, + "ops_per_sec": 2.9, + "per_rep_median": [ + 518653138.5, + 342885442.5, + 344045984.0, + 399572191.5, + 343019984.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 357, + "timed_iters": 1787, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 139870.76, + "samples": 8935, + "median": 130573.0, + "mad": 11111.0, + "iqr": 24999.5, + "q1": 119611.0, + "q3": 144610.5, + "min": 118296.0, + "max": 330201.0, + "mean": 138390.09, + "stddev": 24092.04, + "ops_per_sec": 7658.55, + "per_rep_median": [ + 130665.0, + 130499.0, + 130406.0, + 130740.0, + 130388.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58247783.0, + "samples": 150, + "median": 58731815.0, + "mad": 198230.0, + "iqr": 391173.5, + "q1": 58529423.0, + "q3": 58920596.5, + "min": 58064673.0, + "max": 59455662.0, + "mean": 58726895.85, + "stddev": 301818.0, + "ops_per_sec": 17.03, + "per_rep_median": [ + 58724039.0, + 58639576.0, + 58763064.5, + 58757629.0, + 58606277.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 229384031.0, + "samples": 150, + "median": 229025837.5, + "mad": 231686.0, + "iqr": 537439.0, + "q1": 228843061.25, + "q3": 229380500.25, + "min": 228593097.0, + "max": 243918160.0, + "mean": 229294858.13, + "stddev": 1310206.78, + "ops_per_sec": 4.37, + "per_rep_median": [ + 228960213.0, + 228953276.0, + 228891952.0, + 229167594.0, + 229274284.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 359, + "timed_iters": 1794, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 139386.4, + "samples": 8970, + "median": 130555.0, + "mad": 11130.0, + "iqr": 32388.0, + "q1": 119518.0, + "q3": 151906.0, + "min": 118666.0, + "max": 440590.0, + "mean": 138896.43, + "stddev": 24620.96, + "ops_per_sec": 7659.61, + "per_rep_median": [ + 130591.5, + 130555.0, + 130518.0, + 130573.0, + 130545.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58761355.0, + "samples": 150, + "median": 58675112.0, + "mad": 107547.0, + "iqr": 436073.0, + "q1": 58314559.5, + "q3": 58750632.5, + "min": 58208284.0, + "max": 61217689.0, + "mean": 58579718.35, + "stddev": 306995.23, + "ops_per_sec": 17.04, + "per_rep_median": [ + 58746929.0, + 58745095.0, + 58323106.5, + 58688483.5, + 58567428.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 709136679.0, + "samples": 150, + "median": 711956854.0, + "mad": 297199934.0, + "iqr": 1178005657.5, + "q1": 416856208.5, + "q3": 1594861866.0, + "min": 414436967.0, + "max": 6024257606.0, + "mean": 1134308027.63, + "stddev": 860148030.94, + "ops_per_sec": 1.4, + "per_rep_median": [ + 712262148.0, + 1007454407.5, + 711790374.0, + 712104610.0, + 710965429.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 198, + "timed_iters": 991, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 252341.99, + "samples": 4955, + "median": 230702.0, + "mad": 22741.0, + "iqr": 67426.0, + "q1": 208331.0, + "q3": 275757.0, + "min": 207368.0, + "max": 686420.0, + "mean": 249568.48, + "stddev": 49646.61, + "ops_per_sec": 4334.6, + "per_rep_median": [ + 228702.0, + 237813.0, + 228147.0, + 228054.0, + 241813.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114132605.0, + "samples": 150, + "median": 112689252.5, + "mad": 305340.0, + "iqr": 570195.0, + "q1": 112375156.75, + "q3": 112945351.75, + "min": 111602532.0, + "max": 114134190.0, + "mean": 112739428.27, + "stddev": 597991.9, + "ops_per_sec": 8.87, + "per_rep_median": [ + 112534451.5, + 112681485.5, + 112840362.5, + 112685945.5, + 112690480.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1019779332.0, + "samples": 150, + "median": 867865263.0, + "mad": 448701486.5, + "iqr": 1194514298.25, + "q1": 421011370.25, + "q3": 1615525668.5, + "min": 418071136.0, + "max": 4310940622.0, + "mean": 1197770820.8, + "stddev": 866967412.04, + "ops_per_sec": 1.15, + "per_rep_median": [ + 1017120768.0, + 867865263.0, + 719231858.5, + 1017248809.0, + 717776590.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 135, + "timed_iters": 677, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 369297.24, + "samples": 3385, + "median": 357089.0, + "mad": 15277.0, + "iqr": 44463.0, + "q1": 342071.0, + "q3": 386534.0, + "min": 340682.0, + "max": 655013.0, + "mean": 370458.07, + "stddev": 34150.91, + "ops_per_sec": 2800.42, + "per_rep_median": [ + 356775.0, + 357719.0, + 357311.0, + 357145.0, + 357108.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 109830802.0, + "samples": 150, + "median": 109112241.5, + "mad": 298757.5, + "iqr": 745878.75, + "q1": 108492816.25, + "q3": 109238695.0, + "min": 107746815.0, + "max": 110387279.0, + "mean": 108956810.23, + "stddev": 630895.56, + "ops_per_sec": 9.16, + "per_rep_median": [ + 109149317.5, + 109134492.5, + 108485599.0, + 109193333.0, + 108859186.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1762833605.0, + "samples": 150, + "median": 1106148730.5, + "mad": 654945765.5, + "iqr": 1233033015.0, + "q1": 532867286.0, + "q3": 1765900301.0, + "min": 447539262.0, + "max": 5417925327.0, + "mean": 1320995240.49, + "stddev": 904925749.54, + "ops_per_sec": 0.9, + "per_rep_median": [ + 1437115641.0, + 1106486809.0, + 943001498.0, + 778945595.5, + 778502861.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 184, + "timed_iters": 918, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 272227.35, + "samples": 4590, + "median": 260942.0, + "mad": 16388.0, + "iqr": 48073.0, + "q1": 244776.0, + "q3": 292849.0, + "min": 243276.0, + "max": 537940.0, + "mean": 273216.62, + "stddev": 34841.85, + "ops_per_sec": 3832.27, + "per_rep_median": [ + 261146.0, + 260859.0, + 261016.0, + 260914.5, + 260840.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 136215508.0, + "samples": 150, + "median": 136533873.5, + "mad": 275228.5, + "iqr": 555321.5, + "q1": 136231903.0, + "q3": 136787224.5, + "min": 135999211.0, + "max": 137017627.0, + "mean": 136499833.52, + "stddev": 313444.07, + "ops_per_sec": 7.32, + "per_rep_median": [ + 136586069.0, + 136553031.5, + 136550336.0, + 136514223.5, + 136139967.0 + ] + } + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 64, + "timed_iters": 318, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 786872.33, + "samples": 1590, + "median": 785400.0, + "mad": 241.0, + "iqr": 556.0, + "q1": 785215.0, + "q3": 785771.0, + "min": 784289.0, + "max": 857955.0, + "mean": 786032.9, + "stddev": 3289.01, + "ops_per_sec": 1273.24, + "per_rep_median": [ + 785474.5, + 785363.0, + 785428.0, + 785400.0, + 785345.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 54, + "timed_iters": 270, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 924920.76, + "samples": 1350, + "median": 923214.0, + "mad": 278.0, + "iqr": 1588.25, + "q1": 923029.0, + "q3": 924617.25, + "min": 922381.0, + "max": 960787.0, + "mean": 924094.8, + "stddev": 3085.86, + "ops_per_sec": 1083.17, + "per_rep_median": [ + 923232.0, + 923167.5, + 923158.0, + 923279.0, + 923288.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 277, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 901357.76, + "samples": 1385, + "median": 901214.0, + "mad": 240.0, + "iqr": 1056.0, + "q1": 901066.0, + "q3": 902122.0, + "min": 899844.0, + "max": 985251.0, + "mean": 902040.38, + "stddev": 3933.11, + "ops_per_sec": 1109.61, + "per_rep_median": [ + 901214.0, + 901196.0, + 901400.0, + 901177.0, + 901158.0 + ] + } + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 30, + "timed_iters": 148, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1687547.94, + "samples": 740, + "median": 1684883.0, + "mad": 1787.0, + "iqr": 4005.5, + "q1": 1683114.0, + "q3": 1687119.5, + "min": 1682466.0, + "max": 1748595.0, + "mean": 1687057.71, + "stddev": 7405.79, + "ops_per_sec": 593.51, + "per_rep_median": [ + 1684985.0, + 1683678.5, + 1684827.0, + 1685503.5, + 1685040.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 26, + "timed_iters": 129, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1933215.39, + "samples": 645, + "median": 1933260.0, + "mad": 1259.0, + "iqr": 2352.0, + "q1": 1931908.0, + "q3": 1934260.0, + "min": 1929908.0, + "max": 2008945.0, + "mean": 1933986.31, + "stddev": 6204.44, + "ops_per_sec": 517.26, + "per_rep_median": [ + 1932723.0, + 1933649.0, + 1933168.0, + 1932983.0, + 1933482.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1882070.68, + "samples": 665, + "median": 1882020.0, + "mad": 1241.0, + "iqr": 2555.0, + "q1": 1880576.0, + "q3": 1883131.0, + "min": 1878594.0, + "max": 1967705.0, + "mean": 1882907.49, + "stddev": 7521.83, + "ops_per_sec": 531.34, + "per_rep_median": [ + 1882168.0, + 1882001.0, + 1882075.0, + 1882186.0, + 1881631.0 + ] + } + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 81, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3076098.0, + "samples": 405, + "median": 3071787.0, + "mad": 945.0, + "iqr": 1908.0, + "q1": 3070842.0, + "q3": 3072750.0, + "min": 3067658.0, + "max": 3161471.0, + "mean": 3073163.14, + "stddev": 9157.53, + "ops_per_sec": 325.54, + "per_rep_median": [ + 3072157.0, + 3071565.0, + 3071287.0, + 3071639.0, + 3072268.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3491955.87, + "samples": 360, + "median": 3467339.0, + "mad": 982.0, + "iqr": 2203.5, + "q1": 3466468.75, + "q3": 3468672.25, + "min": 3460820.0, + "max": 3584004.0, + "mean": 3468751.85, + "stddev": 9870.01, + "ops_per_sec": 288.41, + "per_rep_median": [ + 3467617.0, + 3466774.0, + 3467274.0, + 3468403.5, + 3467718.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3408318.4, + "samples": 365, + "median": 3407821.0, + "mad": 1223.0, + "iqr": 2760.0, + "q1": 3406987.0, + "q3": 3409747.0, + "min": 3403876.0, + "max": 3531746.0, + "mean": 3410382.58, + "stddev": 12647.71, + "ops_per_sec": 293.44, + "per_rep_median": [ + 3407525.0, + 3408895.0, + 3407765.0, + 3407506.0, + 3407951.0 + ] + } + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 855, + "timed_iters": 4277, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58445.52, + "samples": 21385, + "median": 58222.0, + "mad": 19.0, + "iqr": 56.0, + "q1": 58203.0, + "q3": 58259.0, + "min": 58129.0, + "max": 94314.0, + "mean": 58302.65, + "stddev": 649.41, + "ops_per_sec": 17175.64, + "per_rep_median": [ + 58222.0, + 58222.0, + 58222.0, + 58240.0, + 58222.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 866, + "timed_iters": 4329, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57756.2, + "samples": 21645, + "median": 57684.0, + "mad": 36.0, + "iqr": 73.0, + "q1": 57648.0, + "q3": 57721.0, + "min": 57555.0, + "max": 98981.0, + "mean": 57762.32, + "stddev": 738.96, + "ops_per_sec": 17335.83, + "per_rep_median": [ + 57666.0, + 57703.0, + 57685.0, + 57685.0, + 57666.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 348, + "timed_iters": 1739, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 143780.24, + "samples": 8695, + "median": 143535.0, + "mad": 56.0, + "iqr": 129.0, + "q1": 143462.0, + "q3": 143591.0, + "min": 143239.0, + "max": 178888.0, + "mean": 143653.68, + "stddev": 941.39, + "ops_per_sec": 6966.94, + "per_rep_median": [ + 143592.0, + 143517.0, + 143517.0, + 143499.0, + 143535.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 464, + "timed_iters": 2320, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107768.9, + "samples": 11600, + "median": 107462.0, + "mad": 593.0, + "iqr": 1185.0, + "q1": 106888.0, + "q3": 108073.0, + "min": 104703.0, + "max": 144554.0, + "mean": 107547.2, + "stddev": 1323.69, + "ops_per_sec": 9305.62, + "per_rep_median": [ + 107517.0, + 107499.0, + 107424.5, + 107444.0, + 107481.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 103, + "timed_iters": 514, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 486121.98, + "samples": 2570, + "median": 398672.0, + "mad": 180878.0, + "iqr": 343158.25, + "q1": 296983.75, + "q3": 640142.0, + "min": 215942.0, + "max": 2900603.0, + "mean": 505995.47, + "stddev": 321778.38, + "ops_per_sec": 2508.33, + "per_rep_median": [ + 398792.5, + 399200.0, + 397200.0, + 417107.0, + 398033.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 420, + "timed_iters": 2099, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 119119.02, + "samples": 10495, + "median": 119166.0, + "mad": 167.0, + "iqr": 1000.0, + "q1": 119036.0, + "q3": 120036.0, + "min": 118666.0, + "max": 158257.0, + "mean": 119493.77, + "stddev": 1048.95, + "ops_per_sec": 8391.66, + "per_rep_median": [ + 119018.0, + 120110.0, + 119147.0, + 119240.0, + 119073.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 261, + "timed_iters": 1303, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 191900.79, + "samples": 6515, + "median": 191072.0, + "mad": 408.0, + "iqr": 834.0, + "q1": 190702.0, + "q3": 191536.0, + "min": 189128.0, + "max": 229165.0, + "mean": 191352.71, + "stddev": 1399.44, + "ops_per_sec": 5233.63, + "per_rep_median": [ + 191165.0, + 191109.0, + 191035.0, + 191035.0, + 191035.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 50, + "timed_iters": 248, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1007438.87, + "samples": 1240, + "median": 675188.5, + "mad": 314654.0, + "iqr": 658063.5, + "q1": 429653.25, + "q3": 1087716.75, + "min": 320275.0, + "max": 5584801.0, + "mean": 855900.67, + "stddev": 619084.12, + "ops_per_sec": 1481.07, + "per_rep_median": [ + 596753.5, + 705355.0, + 703095.5, + 702688.0, + 597754.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 263, + "timed_iters": 1315, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 190115.69, + "samples": 6575, + "median": 189332.0, + "mad": 519.0, + "iqr": 1926.0, + "q1": 188887.0, + "q3": 190813.0, + "min": 188387.0, + "max": 241405.0, + "mean": 189796.34, + "stddev": 1575.3, + "ops_per_sec": 5281.73, + "per_rep_median": [ + 189462.0, + 189406.0, + 188888.0, + 188943.0, + 189220.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 173, + "timed_iters": 863, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 289718.25, + "samples": 4315, + "median": 288460.0, + "mad": 945.0, + "iqr": 1982.0, + "q1": 287608.0, + "q3": 289590.0, + "min": 284127.0, + "max": 330479.0, + "mean": 288910.7, + "stddev": 2375.56, + "ops_per_sec": 3466.69, + "per_rep_median": [ + 288127.0, + 288423.0, + 288590.0, + 288460.0, + 288775.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 51, + "timed_iters": 253, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 986720.83, + "samples": 1265, + "median": 834214.0, + "mad": 345663.0, + "iqr": 731530.0, + "q1": 491255.0, + "q3": 1222785.0, + "min": 484514.0, + "max": 4603458.0, + "mean": 992938.6, + "stddev": 582947.9, + "ops_per_sec": 1198.73, + "per_rep_median": [ + 833066.0, + 804344.0, + 796881.0, + 837604.0, + 834733.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 163, + "timed_iters": 817, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 305851.24, + "samples": 4085, + "median": 306090.0, + "mad": 649.0, + "iqr": 3945.0, + "q1": 305738.0, + "q3": 309683.0, + "min": 305183.0, + "max": 341330.0, + "mean": 307758.0, + "stddev": 2464.56, + "ops_per_sec": 3267.01, + "per_rep_median": [ + 305794.0, + 309775.0, + 309293.0, + 305757.0, + 309627.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9415170.71, + "samples": 150, + "median": 9062871.0, + "mad": 1285784.5, + "iqr": 2792910.0, + "q1": 7797729.25, + "q3": 10590639.25, + "min": 7270397.0, + "max": 21594099.0, + "mean": 9790589.07, + "stddev": 2711677.39, + "ops_per_sec": 110.34, + "per_rep_median": [ + 8577634.5, + 9192064.5, + 8826937.5, + 9221980.5, + 8949937.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 172, + "timed_iters": 861, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 290373.98, + "samples": 4305, + "median": 290294.0, + "mad": 2223.0, + "iqr": 4166.0, + "q1": 288775.0, + "q3": 292941.0, + "min": 278831.0, + "max": 326812.0, + "mean": 290684.42, + "stddev": 3632.86, + "ops_per_sec": 3444.78, + "per_rep_median": [ + 290424.0, + 290238.0, + 290164.0, + 290312.0, + 290368.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 979, + "timed_iters": 4895, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 51076.81, + "samples": 24475, + "median": 50870.0, + "mad": 56.0, + "iqr": 111.0, + "q1": 50833.0, + "q3": 50944.0, + "min": 50629.0, + "max": 70777.0, + "mean": 50932.32, + "stddev": 458.8, + "ops_per_sec": 19657.95, + "per_rep_median": [ + 51055.0, + 50889.0, + 50870.0, + 50833.0, + 50833.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26146945.67, + "samples": 150, + "median": 26303324.5, + "mad": 2618234.5, + "iqr": 6390821.25, + "q1": 24250116.0, + "q3": 30640937.25, + "min": 22847754.0, + "max": 61011646.0, + "mean": 28973269.54, + "stddev": 7198912.67, + "ops_per_sec": 38.02, + "per_rep_median": [ + 26532489.0, + 25732107.5, + 27121113.0, + 24859800.0, + 27400842.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 86, + "timed_iters": 428, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 584101.05, + "samples": 2140, + "median": 584374.0, + "mad": 3148.5, + "iqr": 6282.75, + "q1": 581217.0, + "q3": 587499.75, + "min": 568995.0, + "max": 644438.0, + "mean": 584544.67, + "stddev": 5613.37, + "ops_per_sec": 1711.23, + "per_rep_median": [ + 584161.0, + 584782.0, + 584013.5, + 584310.0, + 584726.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 497, + "timed_iters": 2487, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100521.26, + "samples": 12435, + "median": 99722.0, + "mad": 167.0, + "iqr": 370.0, + "q1": 99555.0, + "q3": 99925.0, + "min": 99166.0, + "max": 133036.0, + "mean": 99837.26, + "stddev": 713.85, + "ops_per_sec": 10027.88, + "per_rep_median": [ + 100203.0, + 99814.0, + 99758.0, + 99592.0, + 99463.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 158, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1582520.74, + "samples": 790, + "median": 1558819.0, + "mad": 1778.0, + "iqr": 3592.0, + "q1": 1556986.0, + "q3": 1560578.0, + "min": 1553004.0, + "max": 1633411.0, + "mean": 1559050.27, + "stddev": 4938.67, + "ops_per_sec": 641.51, + "per_rep_median": [ + 1560523.0, + 1558837.5, + 1558856.0, + 1555736.0, + 1557032.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 36452444.0, + "samples": 150, + "median": 36348426.0, + "mad": 41028.0, + "iqr": 83601.5, + "q1": 36308343.25, + "q3": 36391944.75, + "min": 36301464.0, + "max": 36479574.0, + "mean": 36349942.0, + "stddev": 45043.6, + "ops_per_sec": 27.51, + "per_rep_median": [ + 36396907.5, + 36349704.0, + 36322593.5, + 36347675.5, + 36309231.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 24, + "timed_iters": 119, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2102152.33, + "samples": 595, + "median": 2100610.0, + "mad": 1982.0, + "iqr": 4241.0, + "q1": 2098286.0, + "q3": 2102527.0, + "min": 2098166.0, + "max": 2186054.0, + "mean": 2101209.27, + "stddev": 5578.92, + "ops_per_sec": 476.05, + "per_rep_median": [ + 2103277.0, + 2100222.0, + 2100703.0, + 2100184.0, + 2100111.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 97225479.0, + "samples": 150, + "median": 96928665.0, + "mad": 10536.5, + "iqr": 29902.5, + "q1": 96921429.5, + "q3": 96951332.0, + "min": 96797056.0, + "max": 97280756.0, + "mean": 96943576.41, + "stddev": 89923.75, + "ops_per_sec": 10.32, + "per_rep_median": [ + 96926879.0, + 96926351.0, + 96926517.0, + 96933387.0, + 96930710.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 737849992.0, + "samples": 150, + "median": 738998757.5, + "mad": 923577.5, + "iqr": 1535087.5, + "q1": 738417853.0, + "q3": 739952940.5, + "min": 735828404.0, + "max": 746650664.0, + "mean": 739355528.6, + "stddev": 1875209.33, + "ops_per_sec": 1.35, + "per_rep_median": [ + 738952442.0, + 739659145.5, + 738482800.5, + 742241466.0, + 738683691.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 67, + "timed_iters": 335, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 745322.56, + "samples": 1675, + "median": 746771.0, + "mad": 352.0, + "iqr": 870.0, + "q1": 746734.0, + "q3": 747604.0, + "min": 744585.0, + "max": 819770.0, + "mean": 747099.62, + "stddev": 2815.47, + "ops_per_sec": 1339.1, + "per_rep_median": [ + 744623.0, + 747622.0, + 746771.0, + 746771.0, + 746771.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 21, + "timed_iters": 105, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2374561.73, + "samples": 525, + "median": 2332849.0, + "mad": 4778.0, + "iqr": 29926.0, + "q1": 2306237.0, + "q3": 2336163.0, + "min": 2301145.0, + "max": 2398422.0, + "mean": 2324577.41, + "stddev": 16600.87, + "ops_per_sec": 428.66, + "per_rep_median": [ + 2333200.0, + 2335960.0, + 2336200.0, + 2306664.0, + 2305052.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 62106715.0, + "samples": 150, + "median": 61899440.0, + "mad": 48527.0, + "iqr": 86388.75, + "q1": 61875494.5, + "q3": 61961883.25, + "min": 61726329.0, + "max": 62223178.0, + "mean": 61915262.67, + "stddev": 77985.71, + "ops_per_sec": 16.16, + "per_rep_median": [ + 62000115.0, + 61899375.0, + 61837921.5, + 61901272.5, + 61916920.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3376886.93, + "samples": 370, + "median": 3373866.0, + "mad": 1185.5, + "iqr": 3740.0, + "q1": 3373210.0, + "q3": 3376950.0, + "min": 3336209.0, + "max": 3411042.0, + "mean": 3373587.78, + "stddev": 8082.8, + "ops_per_sec": 296.4, + "per_rep_median": [ + 3377153.5, + 3373440.5, + 3374301.5, + 3373413.0, + 3373468.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 39, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6350943.29, + "samples": 195, + "median": 6275960.0, + "mad": 6815.0, + "iqr": 12944.0, + "q1": 6270450.5, + "q3": 6283394.5, + "min": 6226626.0, + "max": 6375440.0, + "mean": 6279887.72, + "stddev": 28336.27, + "ops_per_sec": 159.34, + "per_rep_median": [ + 6312867.0, + 6276145.0, + 6275997.0, + 6269256.0, + 6230367.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 130789831.0, + "samples": 150, + "median": 128728266.0, + "mad": 129795.5, + "iqr": 241107.75, + "q1": 128575873.25, + "q3": 128816981.0, + "min": 128307036.0, + "max": 131083215.0, + "mean": 128755858.35, + "stddev": 389204.74, + "ops_per_sec": 7.77, + "per_rep_median": [ + 128740701.5, + 128751728.5, + 128721330.0, + 128656913.5, + 128822337.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3321141.67, + "samples": 375, + "median": 3320580.0, + "mad": 3797.0, + "iqr": 8731.0, + "q1": 3313478.0, + "q3": 3322209.0, + "min": 3311209.0, + "max": 3392265.0, + "mean": 3319290.82, + "stddev": 7414.38, + "ops_per_sec": 301.15, + "per_rep_median": [ + 3320765.0, + 3324265.0, + 3320617.0, + 3313284.0, + 3315136.0 + ] + } + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1328747.0, + "p95": 1341701.2, + "min": 1322321.0, + "max": 1843353.0, + "mean": 1334789.3, + "stddev": 38745.9 + }, + "handshakes_per_sec": 752.6, + "bytes_on_wire": { + "client_to_server": 382, + "server_to_client": 1189, + "total": 1571 + }, + "client_hello_bytes": 302, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2674910.5, + "p95": 4547616.8, + "min": 2244738.0, + "max": 7464226.0, + "mean": 2921183.2, + "stddev": 758173.6 + }, + "handshakes_per_sec": 373.8, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 8294, + "total": 9852 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3578901.5, + "p95": 6786274.8, + "min": 2693104.0, + "max": 10607474.0, + "mean": 3922772.2, + "stddev": 1322237.5 + }, + "handshakes_per_sec": 279.4, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 10712, + "total": 12270 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4225339.5, + "p95": 7568932.7, + "min": 3377635.0, + "max": 14674436.0, + "mean": 4624577.4, + "stddev": 1414723.7 + }, + "handshakes_per_sec": 236.7, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 13988, + "total": 15546 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3184164.5, + "p95": 3216625.5, + "min": 3158396.0, + "max": 4250941.0, + "mean": 3197203.8, + "stddev": 88533.1 + }, + "handshakes_per_sec": 314.1, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 4336, + "total": 5894 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44119685.5, + "p95": 44669304.1, + "min": 43577293.0, + "max": 47016001.0, + "mean": 44162754.9, + "stddev": 283326.8 + }, + "handshakes_per_sec": 22.7, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 36394, + "total": 37952 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2712761.5, + "p95": 4586659.2, + "min": 2279756.0, + "max": 8335903.0, + "mean": 2980401.8, + "stddev": 793472.6 + }, + "handshakes_per_sec": 368.6, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 8327, + "total": 9918 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3634613.5, + "p95": 6847175.1, + "min": 2746752.0, + "max": 11254597.0, + "mean": 4008027.3, + "stddev": 1351918.3 + }, + "handshakes_per_sec": 275.1, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 10745, + "total": 12336 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4277496.0, + "p95": 7300544.8, + "min": 3427394.0, + "max": 14713157.0, + "mean": 4706221.0, + "stddev": 1479870.4 + }, + "handshakes_per_sec": 233.8, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 14021, + "total": 15612 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3329811.0, + "p95": 3500111.4, + "min": 3296524.0, + "max": 4461606.0, + "mean": 3357918.1, + "stddev": 109986.7 + }, + "handshakes_per_sec": 300.3, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 4370, + "total": 5961 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44574336.0, + "p95": 45137110.7, + "min": 43965361.0, + "max": 47645862.0, + "mean": 44626364.2, + "stddev": 305818.7 + }, + "handshakes_per_sec": 22.4, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 36427, + "total": 38018 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2105128.0, + "p95": 3971338.2, + "min": 1670484.0, + "max": 6703714.0, + "mean": 2391208.2, + "stddev": 775109.0 + }, + "handshakes_per_sec": 475.0, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 7942, + "total": 9084 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3004971.0, + "p95": 6508967.2, + "min": 2122313.0, + "max": 11480299.0, + "mean": 3354059.5, + "stddev": 1357035.0 + }, + "handshakes_per_sec": 332.8, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 10360, + "total": 11502 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3648058.0, + "p95": 6995478.8, + "min": 2798455.0, + "max": 12398715.0, + "mean": 4063084.0, + "stddev": 1408206.1 + }, + "handshakes_per_sec": 274.1, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 13636, + "total": 14778 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2592753.0, + "p95": 2621475.9, + "min": 2568420.0, + "max": 3673484.0, + "mean": 2600842.7, + "stddev": 67465.5 + }, + "handshakes_per_sec": 385.7, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 3986, + "total": 5128 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 42806832.0, + "p95": 43216107.5, + "min": 42350965.0, + "max": 45853285.0, + "mean": 42824792.6, + "stddev": 241070.6 + }, + "handshakes_per_sec": 23.4, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 36042, + "total": 37184 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2192238.5, + "p95": 3900309.5, + "min": 1761520.0, + "max": 7819981.0, + "mean": 2453754.0, + "stddev": 779251.1 + }, + "handshakes_per_sec": 456.2, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 8262, + "total": 9788 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3115081.5, + "p95": 6342347.8, + "min": 2235293.0, + "max": 12468547.0, + "mean": 3440788.2, + "stddev": 1391897.2 + }, + "handshakes_per_sec": 321.0, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 10680, + "total": 12206 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3773140.0, + "p95": 7115532.5, + "min": 2924694.0, + "max": 13790886.0, + "mean": 4142801.1, + "stddev": 1479622.7 + }, + "handshakes_per_sec": 265.0, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 13956, + "total": 15482 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2677252.0, + "p95": 2705182.7, + "min": 2654678.0, + "max": 3599966.0, + "mean": 2685900.6, + "stddev": 63825.8 + }, + "handshakes_per_sec": 373.5, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 4308, + "total": 5834 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43591286.0, + "p95": 44102441.1, + "min": 43007310.0, + "max": 46733514.0, + "mean": 43619459.1, + "stddev": 302764.6 + }, + "handshakes_per_sec": 22.9, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 36362, + "total": 37888 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2322727.5, + "p95": 4189684.5, + "min": 1885611.0, + "max": 7954275.0, + "mean": 2610924.0, + "stddev": 770009.3 + }, + "handshakes_per_sec": 430.5, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 8742, + "total": 10652 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3218598.5, + "p95": 5867511.6, + "min": 2331755.0, + "max": 10805489.0, + "mean": 3517722.5, + "stddev": 1267592.2 + }, + "handshakes_per_sec": 310.7, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 11160, + "total": 13070 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3860833.5, + "p95": 6797086.7, + "min": 3012878.0, + "max": 13488223.0, + "mean": 4226793.4, + "stddev": 1393307.5 + }, + "handshakes_per_sec": 259.0, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 14436, + "total": 16346 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2808501.0, + "p95": 2857909.1, + "min": 2783640.0, + "max": 3929629.0, + "mean": 2822505.4, + "stddev": 86394.6 + }, + "handshakes_per_sec": 356.1, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 4785, + "total": 6695 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43234843.0, + "p95": 43621617.6, + "min": 42746089.0, + "max": 46301757.0, + "mean": 43265752.0, + "stddev": 222157.2 + }, + "handshakes_per_sec": 23.1, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 36842, + "total": 38752 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260720T143239Z.json b/tools/benchmarks/pqc/results/rasberrypi5-20260720T143239Z.json new file mode 100644 index 0000000..d4b0218 --- /dev/null +++ b/tools/benchmarks/pqc/results/rasberrypi5-20260720T143239Z.json @@ -0,0 +1,21404 @@ +{ + "schema_version": "2.0.0", + "tool_version": "0.2.0", + "generated_utc": "2026-07-20T15:01:15Z", + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "host": { + "hostname": "rasberrypi5", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.18.33+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454029312 + }, + "cpu_features": { + "source": "/proc/cpuinfo", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-20T14:32:39Z", + "timestamp_end_utc": "2026-07-20T15:01:15Z", + "duration_s": 1716, + "governor_requested": "performance", + "governor_before": "performance", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.18.33+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=cortex-a76", + "target_features_compiled": [ + "aes", + "crc", + "dotprod", + "dpb", + "fp16", + "lor", + "lse", + "neon", + "pan", + "pmuv3", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": false + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=cortex-a76", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1784557959, + 2400023808, + 56.5, + "0x0" + ], + [ + 1784557959, + 2400037120, + 56.5, + "0x0" + ], + [ + 1784557960, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784557961, + 2400020480, + 57.1, + "0x0" + ], + [ + 1784557962, + 2400023808, + 57.6, + "0x0" + ], + [ + 1784557963, + 2400023808, + 57.6, + "0x0" + ], + [ + 1784557964, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784557965, + 2400030464, + 57.6, + "0x0" + ], + [ + 1784557966, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784557967, + 2400033792, + 58.2, + "0x0" + ], + [ + 1784557968, + 2400037120, + 57.6, + "0x0" + ], + [ + 1784557969, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784557970, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784557971, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784557972, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784557973, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784557974, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784557975, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784557976, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784557977, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784557978, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784557979, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784557980, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784557982, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784557983, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784557984, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784557985, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784557986, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784557987, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784557988, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784557989, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784557990, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784557991, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784557992, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784557993, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784557994, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784557995, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784557996, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784557997, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784557998, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784557999, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558000, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558001, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558002, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558003, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558004, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784558005, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558006, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784558007, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784558008, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558009, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558010, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558011, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784558012, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558013, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784558014, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558015, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784558016, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558017, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558018, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784558019, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558020, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558021, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558022, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558023, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558024, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558025, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558026, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558027, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558028, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558030, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558031, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558032, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558033, + 2400037120, + 61.5, + "0x0" + ], + [ + 1784558034, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558035, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558036, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558037, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558038, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558039, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558040, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784558041, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784558042, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784558043, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558044, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558045, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558046, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784558047, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558048, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558049, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558050, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558051, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558052, + 2400033792, + 62.6, + "0x0" + ], + [ + 1784558053, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558054, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558055, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558056, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558057, + 2400033792, + 62.6, + "0x0" + ], + [ + 1784558058, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558059, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558060, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558061, + 2400033792, + 61.5, + "0x0" + ], + [ + 1784558062, + 2400037120, + 61.5, + "0x0" + ], + [ + 1784558063, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558064, + 2400030464, + 62.6, + "0x0" + ], + [ + 1784558065, + 2400017408, + 62.6, + "0x0" + ], + [ + 1784558066, + 2400030464, + 62.6, + "0x0" + ], + [ + 1784558067, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558068, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558069, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558070, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558072, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558073, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558074, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558075, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558076, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558077, + 2400023808, + 62.0, + "0x0" + ], + [ + 1784558078, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558079, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558080, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558081, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558082, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558083, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558084, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558085, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558086, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558087, + 2400037120, + 62.0, + "0x0" + ], + [ + 1784558088, + 2400023808, + 62.0, + "0x0" + ], + [ + 1784558089, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558090, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558091, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558092, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558093, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558094, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558095, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558096, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558097, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558098, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558099, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558100, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558101, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558102, + 2400033792, + 61.5, + "0x0" + ], + [ + 1784558103, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558104, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784558105, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558106, + 2400037120, + 60.9, + "0x0" + ], + [ + 1784558107, + 2400033792, + 61.5, + "0x0" + ], + [ + 1784558108, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558109, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558110, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558111, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558112, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558113, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558114, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558115, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558116, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558117, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558118, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558119, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558120, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558121, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558122, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784558124, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558125, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558126, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784558127, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558128, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558129, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558130, + 2400017408, + 62.0, + "0x0" + ], + [ + 1784558131, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558132, + 2400017408, + 62.0, + "0x0" + ], + [ + 1784558133, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558134, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784558135, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558136, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558137, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558138, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558139, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558140, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558141, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784558142, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558143, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558144, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784558145, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558146, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558147, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558148, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558149, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558150, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558151, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558152, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558153, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558154, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558155, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558156, + 2400033792, + 62.6, + "0x0" + ], + [ + 1784558157, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558158, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558159, + 2400037120, + 63.1, + "0x0" + ], + [ + 1784558160, + 2400027136, + 63.1, + "0x0" + ], + [ + 1784558161, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558162, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558163, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558164, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558165, + 2400033792, + 63.1, + "0x0" + ], + [ + 1784558166, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558167, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558168, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558169, + 2400030464, + 62.6, + "0x0" + ], + [ + 1784558170, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558171, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558172, + 2400027136, + 63.1, + "0x0" + ], + [ + 1784558173, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558174, + 2400030464, + 62.6, + "0x0" + ], + [ + 1784558176, + 2400017408, + 63.7, + "0x0" + ], + [ + 1784558177, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558178, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558179, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558180, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558181, + 2400023808, + 62.0, + "0x0" + ], + [ + 1784558182, + 2400017408, + 63.7, + "0x0" + ], + [ + 1784558183, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558184, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558185, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558186, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558187, + 2400037120, + 63.7, + "0x0" + ], + [ + 1784558188, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558189, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558190, + 2400017408, + 63.7, + "0x0" + ], + [ + 1784558191, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558192, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558193, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558194, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558195, + 2400027136, + 63.1, + "0x0" + ], + [ + 1784558196, + 2400037120, + 63.7, + "0x0" + ], + [ + 1784558197, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558198, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558199, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558200, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558201, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558202, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558203, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558204, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558205, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558206, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558207, + 2400033792, + 63.7, + "0x0" + ], + [ + 1784558208, + 2400033792, + 63.7, + "0x0" + ], + [ + 1784558209, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558210, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558211, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558212, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558213, + 2400030464, + 62.6, + "0x0" + ], + [ + 1784558214, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558215, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558216, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558217, + 2400017408, + 64.8, + "0x0" + ], + [ + 1784558218, + 2400037120, + 63.7, + "0x0" + ], + [ + 1784558219, + 2400037120, + 64.8, + "0x0" + ], + [ + 1784558220, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558221, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558222, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558223, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558225, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558226, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558227, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558228, + 2400037120, + 63.7, + "0x0" + ], + [ + 1784558229, + 2400017408, + 64.2, + "0x0" + ], + [ + 1784558230, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558231, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558232, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558233, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558234, + 2400017408, + 64.2, + "0x0" + ], + [ + 1784558235, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558236, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558237, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558238, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558239, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558240, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558241, + 2400037120, + 64.8, + "0x0" + ], + [ + 1784558242, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558243, + 2400033792, + 64.2, + "0x0" + ], + [ + 1784558244, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558245, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558246, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558247, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558248, + 2400027136, + 63.1, + "0x0" + ], + [ + 1784558249, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558250, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558251, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558252, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558253, + 2400017408, + 64.8, + "0x0" + ], + [ + 1784558254, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558255, + 2400017408, + 64.2, + "0x0" + ], + [ + 1784558256, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558257, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558258, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558259, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558260, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558261, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558262, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558263, + 2400033792, + 63.1, + "0x0" + ], + [ + 1784558264, + 2400033792, + 63.7, + "0x0" + ], + [ + 1784558265, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558266, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558267, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558268, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558269, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558270, + 2400017408, + 64.8, + "0x0" + ], + [ + 1784558271, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558273, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558274, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558275, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558276, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558277, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558278, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558279, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558280, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558281, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558282, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558283, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558284, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558285, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558286, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558287, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558288, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558289, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558290, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558291, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558292, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558293, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558294, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558295, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558296, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558297, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558298, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558299, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558300, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558301, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558302, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558303, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558304, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558305, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558306, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558307, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558308, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558309, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558310, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558311, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558312, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558313, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558314, + 2400037120, + 65.9, + "0x0" + ], + [ + 1784558315, + 2400033792, + 64.2, + "0x0" + ], + [ + 1784558316, + 2400037120, + 64.2, + "0x0" + ], + [ + 1784558317, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558318, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558319, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558320, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558321, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558323, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558324, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558325, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558326, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558327, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558328, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558329, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558330, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558331, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558332, + 2400033792, + 61.5, + "0x0" + ], + [ + 1784558333, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558334, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558335, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558336, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558337, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784558338, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558339, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558340, + 2400037120, + 60.9, + "0x0" + ], + [ + 1784558341, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558342, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558343, + 2400033792, + 61.5, + "0x0" + ], + [ + 1784558344, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558345, + 2400023808, + 62.0, + "0x0" + ], + [ + 1784558346, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558347, + 2400037120, + 63.7, + "0x0" + ], + [ + 1784558348, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558349, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558350, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558351, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558352, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558353, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558354, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558355, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558356, + 2400027136, + 63.1, + "0x0" + ], + [ + 1784558357, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558358, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558359, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558360, + 2400033792, + 64.2, + "0x0" + ], + [ + 1784558361, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558362, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558363, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558364, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558365, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558366, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558367, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558368, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558369, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558370, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558371, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558373, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558374, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558375, + 2400033792, + 64.2, + "0x0" + ], + [ + 1784558376, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558377, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558378, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558379, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558380, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558381, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558382, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558383, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558384, + 2400033792, + 64.2, + "0x0" + ], + [ + 1784558385, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558386, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558387, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558388, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558389, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558390, + 2400037120, + 64.8, + "0x0" + ], + [ + 1784558391, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558392, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558393, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558394, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558395, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558396, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558397, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558398, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558399, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558400, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558401, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558402, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558403, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558404, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558405, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558406, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558407, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558408, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558409, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558410, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558411, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558412, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558413, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558414, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558415, + 2400033792, + 64.2, + "0x0" + ], + [ + 1784558416, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558417, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558418, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558419, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558420, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558421, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558422, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558424, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558425, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558426, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558427, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558428, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558429, + 2400037120, + 64.8, + "0x0" + ], + [ + 1784558430, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558431, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558432, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558433, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558434, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558435, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558436, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558437, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558438, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558439, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558440, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558441, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558442, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558443, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558444, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558445, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558446, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558447, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558448, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558449, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558450, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558451, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558452, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558453, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558454, + 2400037120, + 64.8, + "0x0" + ], + [ + 1784558455, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558456, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558457, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558458, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558459, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558460, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558461, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558462, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558463, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558464, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558465, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558466, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558467, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558468, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558469, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558470, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558471, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558473, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558474, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558475, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558476, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558477, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558478, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558479, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558480, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558481, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558482, + 2400027136, + 64.2, + "0x0" + ], + [ + 1784558483, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558484, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558485, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558486, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558487, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558488, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558489, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558490, + 2400030464, + 63.7, + "0x0" + ], + [ + 1784558491, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558492, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558493, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558494, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558495, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558496, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558497, + 2400037120, + 65.9, + "0x0" + ], + [ + 1784558498, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558499, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558500, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558501, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558502, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558503, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558504, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558505, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558506, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558507, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558508, + 2400020480, + 64.2, + "0x0" + ], + [ + 1784558509, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558510, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558511, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558512, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558513, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558514, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558515, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558516, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558518, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558519, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558520, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558521, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558522, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558523, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558524, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558525, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558526, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558527, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558528, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558529, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558530, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558531, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558532, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558533, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558534, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558535, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558536, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558537, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558538, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558539, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558540, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558541, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558542, + 2400037120, + 62.0, + "0x0" + ], + [ + 1784558543, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558544, + 2400023808, + 62.0, + "0x0" + ], + [ + 1784558545, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558546, + 2400023808, + 64.2, + "0x0" + ], + [ + 1784558547, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558548, + 2400017408, + 64.8, + "0x0" + ], + [ + 1784558549, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558550, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558551, + 2400027136, + 64.8, + "0x0" + ], + [ + 1784558552, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558553, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558554, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558555, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558556, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558557, + 2400033792, + 64.8, + "0x0" + ], + [ + 1784558558, + 2400030464, + 64.2, + "0x0" + ], + [ + 1784558559, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558560, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558561, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558562, + 2400037120, + 66.4, + "0x0" + ], + [ + 1784558563, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558564, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558565, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558566, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558568, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558569, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558570, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558571, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558572, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558573, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558574, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558575, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558576, + 2400020480, + 64.8, + "0x0" + ], + [ + 1784558577, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558578, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558579, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558580, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558581, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558582, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558583, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558584, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558585, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558586, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558587, + 2400017408, + 67.0, + "0x0" + ], + [ + 1784558588, + 2400027136, + 67.5, + "0x0" + ], + [ + 1784558589, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558590, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558591, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558592, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558593, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558594, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558595, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558596, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558597, + 2400030464, + 64.8, + "0x0" + ], + [ + 1784558598, + 2400017408, + 66.4, + "0x0" + ], + [ + 1784558599, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558600, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558601, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558602, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558603, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558604, + 2400030464, + 67.0, + "0x0" + ], + [ + 1784558605, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558606, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558607, + 2400037120, + 65.9, + "0x0" + ], + [ + 1784558608, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558609, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558611, + 2400037120, + 65.9, + "0x0" + ], + [ + 1784558612, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558613, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558614, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558615, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558616, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558617, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558618, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558619, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558620, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558621, + 2400017408, + 66.4, + "0x0" + ], + [ + 1784558622, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558623, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558624, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558625, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558626, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558627, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558628, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558629, + 2400033792, + 65.3, + "0x0" + ], + [ + 1784558630, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558631, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558632, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558633, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558634, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558635, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558636, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558637, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558638, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558639, + 2400020480, + 67.0, + "0x0" + ], + [ + 1784558640, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558641, + 2400023808, + 67.0, + "0x0" + ], + [ + 1784558642, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558643, + 2400037120, + 65.3, + "0x0" + ], + [ + 1784558644, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558645, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558646, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558647, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558648, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558649, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558650, + 2400017408, + 66.4, + "0x0" + ], + [ + 1784558651, + 2400023808, + 64.8, + "0x0" + ], + [ + 1784558652, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558653, + 2400020480, + 67.5, + "0x0" + ], + [ + 1784558655, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558656, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558657, + 2400033792, + 67.0, + "0x0" + ], + [ + 1784558658, + 2400030464, + 67.0, + "0x0" + ], + [ + 1784558659, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558660, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558661, + 2400033792, + 66.4, + "0x0" + ], + [ + 1784558662, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558663, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558664, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558665, + 2400027136, + 65.3, + "0x0" + ], + [ + 1784558666, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558667, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558668, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558669, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558670, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558671, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558672, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558673, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558674, + 2400030464, + 67.0, + "0x0" + ], + [ + 1784558675, + 2400020480, + 67.0, + "0x0" + ], + [ + 1784558676, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558677, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558678, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558679, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558680, + 2400023808, + 67.0, + "0x0" + ], + [ + 1784558681, + 2400030464, + 67.0, + "0x0" + ], + [ + 1784558682, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558683, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558684, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558685, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558686, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558687, + 2400017408, + 67.5, + "0x0" + ], + [ + 1784558688, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558689, + 2400020480, + 67.0, + "0x0" + ], + [ + 1784558690, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558691, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558692, + 2400017408, + 65.3, + "0x0" + ], + [ + 1784558693, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558694, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558695, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558696, + 2400020480, + 67.5, + "0x0" + ], + [ + 1784558697, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558698, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558699, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558700, + 2400027136, + 67.5, + "0x0" + ], + [ + 1784558702, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558703, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558704, + 2400033792, + 65.9, + "0x0" + ], + [ + 1784558705, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558706, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558707, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558708, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558709, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558710, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558711, + 2400023808, + 67.0, + "0x0" + ], + [ + 1784558712, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558713, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558714, + 2400033792, + 67.5, + "0x0" + ], + [ + 1784558715, + 2400037120, + 64.8, + "0x0" + ], + [ + 1784558716, + 2400030464, + 67.0, + "0x0" + ], + [ + 1784558717, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558718, + 2400030464, + 65.3, + "0x0" + ], + [ + 1784558719, + 2400030464, + 67.5, + "0x0" + ], + [ + 1784558720, + 2400023808, + 65.9, + "0x0" + ], + [ + 1784558721, + 2400030464, + 66.4, + "0x0" + ], + [ + 1784558722, + 2400020480, + 65.3, + "0x0" + ], + [ + 1784558723, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558724, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558725, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558726, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558727, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558728, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558729, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558730, + 2400017408, + 66.4, + "0x0" + ], + [ + 1784558731, + 2400033792, + 66.4, + "0x0" + ], + [ + 1784558732, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558733, + 2400037120, + 67.0, + "0x0" + ], + [ + 1784558734, + 2400023808, + 67.0, + "0x0" + ], + [ + 1784558735, + 2400020480, + 66.4, + "0x0" + ], + [ + 1784558736, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558737, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558738, + 2400033792, + 66.4, + "0x0" + ], + [ + 1784558739, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558740, + 2400023808, + 65.3, + "0x0" + ], + [ + 1784558741, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558742, + 2400023808, + 66.4, + "0x0" + ], + [ + 1784558744, + 2400020480, + 67.5, + "0x0" + ], + [ + 1784558745, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558746, + 2400017408, + 65.9, + "0x0" + ], + [ + 1784558747, + 2400027136, + 67.0, + "0x0" + ], + [ + 1784558748, + 2400030464, + 67.5, + "0x0" + ], + [ + 1784558749, + 2400030464, + 65.9, + "0x0" + ], + [ + 1784558750, + 2400020480, + 65.9, + "0x0" + ], + [ + 1784558751, + 2400027136, + 66.4, + "0x0" + ], + [ + 1784558752, + 2400027136, + 65.9, + "0x0" + ], + [ + 1784558753, + 2400037120, + 63.7, + "0x0" + ], + [ + 1784558754, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558755, + 2400027136, + 63.1, + "0x0" + ], + [ + 1784558756, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558757, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558758, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558759, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558760, + 2400017408, + 62.6, + "0x0" + ], + [ + 1784558761, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558762, + 2400037120, + 62.6, + "0x0" + ], + [ + 1784558763, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558764, + 2400017408, + 63.1, + "0x0" + ], + [ + 1784558765, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558766, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558767, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558768, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558769, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558770, + 2400037120, + 62.0, + "0x0" + ], + [ + 1784558771, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558772, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558773, + 2400027136, + 62.0, + "0x0" + ], + [ + 1784558774, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558775, + 2400017408, + 63.7, + "0x0" + ], + [ + 1784558776, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558777, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558778, + 2400020480, + 63.7, + "0x0" + ], + [ + 1784558779, + 2400033792, + 62.6, + "0x0" + ], + [ + 1784558780, + 2400027136, + 63.7, + "0x0" + ], + [ + 1784558781, + 2400033792, + 63.1, + "0x0" + ], + [ + 1784558782, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558783, + 2400017408, + 64.2, + "0x0" + ], + [ + 1784558784, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558785, + 2400023808, + 63.7, + "0x0" + ], + [ + 1784558786, + 2400030464, + 63.1, + "0x0" + ], + [ + 1784558787, + 2400037120, + 63.1, + "0x0" + ], + [ + 1784558788, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558789, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558790, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558792, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558793, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558794, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558795, + 2400020480, + 63.1, + "0x0" + ], + [ + 1784558796, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558797, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558798, + 2400017408, + 62.0, + "0x0" + ], + [ + 1784558799, + 2400027136, + 62.6, + "0x0" + ], + [ + 1784558800, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558801, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558802, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558803, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558804, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558805, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558806, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558807, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558808, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558809, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558810, + 2400030464, + 62.6, + "0x0" + ], + [ + 1784558811, + 2400017408, + 62.0, + "0x0" + ], + [ + 1784558812, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558813, + 2400023808, + 62.0, + "0x0" + ], + [ + 1784558814, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558815, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558816, + 2400023808, + 63.1, + "0x0" + ], + [ + 1784558817, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558818, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558819, + 2400033792, + 61.5, + "0x0" + ], + [ + 1784558820, + 2400030464, + 62.0, + "0x0" + ], + [ + 1784558821, + 2400020480, + 62.6, + "0x0" + ], + [ + 1784558822, + 2400023808, + 62.6, + "0x0" + ], + [ + 1784558823, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558824, + 2400037120, + 60.9, + "0x0" + ], + [ + 1784558825, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558826, + 2400033792, + 62.6, + "0x0" + ], + [ + 1784558827, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558828, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558829, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558830, + 2400020480, + 62.0, + "0x0" + ], + [ + 1784558831, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558832, + 2400037120, + 61.5, + "0x0" + ], + [ + 1784558833, + 2400033792, + 63.1, + "0x0" + ], + [ + 1784558834, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558835, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784558836, + 2400033792, + 63.1, + "0x0" + ], + [ + 1784558837, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558838, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558839, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558841, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784558842, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558843, + 2400037120, + 60.9, + "0x0" + ], + [ + 1784558844, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558845, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558846, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784558847, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784558848, + 2400023808, + 61.5, + "0x0" + ], + [ + 1784558849, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558850, + 2400027136, + 61.5, + "0x0" + ], + [ + 1784558851, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558852, + 2400017408, + 61.5, + "0x0" + ], + [ + 1784558853, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558854, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558855, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784558856, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558857, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558858, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558859, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784558860, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784558861, + 2400033792, + 62.0, + "0x0" + ], + [ + 1784558862, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558863, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558864, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558865, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558866, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784558867, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784558868, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784558869, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558870, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784558871, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784558872, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784558873, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558874, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784558875, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558876, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558877, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558878, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784558879, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558880, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558881, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558882, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558883, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784558884, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558885, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784558886, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558887, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558888, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558889, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558891, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784558892, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558893, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784558894, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784558895, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558896, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558897, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558898, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784558899, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558900, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784558901, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784558902, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558903, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784558904, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558905, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558906, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558907, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558908, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558909, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784558910, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558911, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558912, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558913, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558914, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784558915, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784558916, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784558917, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558918, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558919, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558920, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558921, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558922, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558923, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784558924, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558925, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784558926, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784558927, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558928, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558929, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784558930, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784558931, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558932, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558933, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558934, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558935, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558936, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784558937, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558938, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558939, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784558940, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558941, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558942, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784558943, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558945, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558946, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558947, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558948, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558949, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558950, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558951, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558952, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558953, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558954, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558955, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558956, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558957, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558958, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558959, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558960, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784558961, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784558962, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558963, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558964, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558965, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558966, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558967, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558968, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558969, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784558970, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784558971, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558972, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784558973, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784558974, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558975, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784558976, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558977, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558978, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558979, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784558980, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784558981, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558982, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784558983, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558984, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784558985, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784558986, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558987, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784558988, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558989, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784558990, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784558991, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784558992, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784558993, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784558994, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784558995, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784558996, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784558997, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784558998, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559000, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559001, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559002, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559003, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559004, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559005, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559006, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559007, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559008, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559009, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559010, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559011, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559012, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559013, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559014, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784559015, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559016, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559017, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559018, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559019, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559020, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559021, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559022, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559023, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784559024, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559025, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559026, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559027, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559028, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559029, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559030, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559031, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559032, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559033, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559034, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784559035, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559036, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559037, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784559038, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559039, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559040, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559041, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559042, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559043, + 2400027136, + 60.9, + "0x0" + ], + [ + 1784559044, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559045, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559046, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559047, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559049, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559050, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559051, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559052, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559053, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784559054, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559055, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559056, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784559057, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559058, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784559059, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559060, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559061, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559062, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559063, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559064, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559065, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559066, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559067, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559068, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559069, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559070, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559071, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559072, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784559073, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559074, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559075, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559076, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559077, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559078, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559079, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559080, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784559081, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559082, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559083, + 2400030464, + 60.9, + "0x0" + ], + [ + 1784559084, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559085, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559086, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559087, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559088, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784559089, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559090, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559091, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559092, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559093, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559094, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559095, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559096, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559097, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559098, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559099, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559100, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559101, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559102, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559104, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559105, + 2400033792, + 60.9, + "0x0" + ], + [ + 1784559106, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559107, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559108, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559109, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559110, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559111, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559112, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559113, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559114, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559115, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559116, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559117, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559118, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559119, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559120, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559121, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559122, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559123, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559124, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559125, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559126, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559127, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559128, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559129, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784559130, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784559131, + 2400030464, + 61.5, + "0x0" + ], + [ + 1784559132, + 2400020480, + 60.9, + "0x0" + ], + [ + 1784559133, + 2400020480, + 61.5, + "0x0" + ], + [ + 1784559134, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559135, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559136, + 2400017408, + 60.9, + "0x0" + ], + [ + 1784559137, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559138, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559139, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559140, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559141, + 2400017408, + 60.4, + "0x0" + ], + [ + 1784559142, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559143, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559144, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559145, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559146, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559147, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559148, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559149, + 2400023808, + 60.9, + "0x0" + ], + [ + 1784559150, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559151, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559152, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559153, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559154, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559155, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559156, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559158, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559159, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559160, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559161, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559162, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784559163, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559164, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559165, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784559166, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559167, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559168, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559169, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559170, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559171, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559172, + 2400020480, + 60.4, + "0x0" + ], + [ + 1784559173, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559174, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559175, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559176, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559177, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559178, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559179, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559180, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559181, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784559182, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559183, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559184, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559185, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559186, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559187, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559188, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559189, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559190, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559191, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559192, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559193, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559194, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559195, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784559196, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559197, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559198, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559199, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559200, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559201, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559202, + 2400017408, + 58.2, + "0x0" + ], + [ + 1784559203, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559204, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559205, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559207, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559208, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559209, + 2400027136, + 57.6, + "0x0" + ], + [ + 1784559210, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559211, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559212, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559213, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559214, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559215, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559216, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559217, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559218, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559219, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559220, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559221, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559222, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559223, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559224, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559225, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559226, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559227, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559228, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559229, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559230, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559231, + 2400033792, + 60.4, + "0x0" + ], + [ + 1784559232, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559233, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559234, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559235, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559236, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559237, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559238, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559239, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559240, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559241, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559242, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559243, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559244, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559245, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559246, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559247, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559248, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559249, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559250, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559251, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559252, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559253, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559254, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559255, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559256, + 2400030464, + 60.4, + "0x0" + ], + [ + 1784559257, + 2400033792, + 58.2, + "0x0" + ], + [ + 1784559259, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559260, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559261, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559262, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559263, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559264, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559265, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559266, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559267, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559268, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559269, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559270, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559271, + 2400023808, + 60.4, + "0x0" + ], + [ + 1784559272, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559273, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559274, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559275, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559276, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559277, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559278, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559279, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559280, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559281, + 2400027136, + 60.4, + "0x0" + ], + [ + 1784559282, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559283, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559284, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559285, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559286, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559287, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559288, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559289, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559290, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559291, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559292, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559293, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559294, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559295, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559296, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559297, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559298, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559299, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559300, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559301, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559302, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559303, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559304, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559305, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559306, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559307, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559308, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559310, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559311, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559312, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559313, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559314, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559315, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559316, + 2400023808, + 57.6, + "0x0" + ], + [ + 1784559317, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559318, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559319, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559320, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559321, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784559322, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559323, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559324, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559325, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559326, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559327, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559328, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559329, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559330, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559331, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559332, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559333, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559334, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559335, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559336, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559337, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559338, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559339, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559340, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559341, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559342, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559343, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559344, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559345, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559346, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559347, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559348, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559349, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559350, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559351, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559352, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559353, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559354, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559355, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559356, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559357, + 2400020480, + 57.6, + "0x0" + ], + [ + 1784559358, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559359, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559360, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559361, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559363, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559364, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559365, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559366, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559367, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559368, + 2400020480, + 57.6, + "0x0" + ], + [ + 1784559369, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559370, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559371, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559372, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559373, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559374, + 2400017408, + 58.2, + "0x0" + ], + [ + 1784559375, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559376, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559377, + 2400017408, + 58.2, + "0x0" + ], + [ + 1784559378, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559379, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559380, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559381, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559382, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559383, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559384, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559385, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559386, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559387, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559388, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559389, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559390, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559391, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559392, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559393, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559394, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559395, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559396, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559397, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559398, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559399, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559400, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784559401, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559402, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559403, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559404, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559405, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559406, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559407, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559408, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559409, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559410, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559411, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559412, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559413, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559414, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559416, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559417, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559418, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559419, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559420, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559421, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559422, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559423, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559424, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559425, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559426, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559427, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559428, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559429, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559430, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559431, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559432, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559433, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559434, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559435, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559436, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559437, + 2400023808, + 57.6, + "0x0" + ], + [ + 1784559438, + 2400017408, + 58.2, + "0x0" + ], + [ + 1784559439, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559440, + 2400020480, + 57.6, + "0x0" + ], + [ + 1784559441, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559442, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559443, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559444, + 2400020480, + 57.6, + "0x0" + ], + [ + 1784559445, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559446, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559447, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559448, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559449, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559450, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559451, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559452, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559453, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559454, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559455, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559456, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559457, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559458, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559459, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559460, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559461, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559462, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559463, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559464, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559465, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559466, + 2400027136, + 57.6, + "0x0" + ], + [ + 1784559467, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559469, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559470, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559471, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559472, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559473, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559474, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559475, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559476, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559477, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559478, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559479, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559480, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559481, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559482, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559483, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559484, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559485, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559486, + 2400033792, + 58.7, + "0x0" + ], + [ + 1784559487, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559488, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559489, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559490, + 2400020480, + 57.6, + "0x0" + ], + [ + 1784559491, + 2400027136, + 57.6, + "0x0" + ], + [ + 1784559492, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559493, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559494, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559495, + 2400027136, + 57.6, + "0x0" + ], + [ + 1784559496, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559497, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559498, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559499, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559500, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559501, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559502, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559503, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559504, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559505, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559506, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559507, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559508, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559509, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559510, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559511, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559512, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559513, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559514, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559515, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559517, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559518, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559519, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559520, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559521, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559522, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559523, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559524, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559525, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559526, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559527, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559528, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559529, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559530, + 2400033792, + 59.8, + "0x0" + ], + [ + 1784559531, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559532, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559533, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559534, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559535, + 2400037120, + 60.4, + "0x0" + ], + [ + 1784559536, + 2400033792, + 58.2, + "0x0" + ], + [ + 1784559537, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559538, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559539, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559540, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559541, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559542, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559543, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559544, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559545, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559546, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559547, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559548, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559549, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559550, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559551, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559552, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559553, + 2400033792, + 58.2, + "0x0" + ], + [ + 1784559554, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559555, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559556, + 2400030464, + 58.2, + "0x0" + ], + [ + 1784559557, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559558, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559559, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559560, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559561, + 2400037120, + 58.2, + "0x0" + ], + [ + 1784559562, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559563, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559564, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559565, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559566, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559567, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559568, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559569, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559571, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559572, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559573, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559574, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559575, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559576, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559577, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559578, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559579, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559580, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559581, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559582, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559583, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559584, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559585, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559586, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559587, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559588, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559589, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559590, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559591, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559592, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559593, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559594, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559595, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559596, + 2400020480, + 59.8, + "0x0" + ], + [ + 1784559597, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559598, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559599, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559600, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559601, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559602, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559603, + 2400027136, + 58.2, + "0x0" + ], + [ + 1784559604, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559605, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559606, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559607, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559608, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559609, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559610, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559611, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559612, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559613, + 2400027136, + 57.1, + "0x0" + ], + [ + 1784559614, + 2400017408, + 59.3, + "0x0" + ], + [ + 1784559615, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559616, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559617, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559618, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559619, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559620, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559621, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559622, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559624, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559625, + 2400037120, + 58.7, + "0x0" + ], + [ + 1784559626, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559627, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559628, + 2400027136, + 59.3, + "0x0" + ], + [ + 1784559629, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559630, + 2400037120, + 59.3, + "0x0" + ], + [ + 1784559631, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559632, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559633, + 2400037120, + 59.8, + "0x0" + ], + [ + 1784559634, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559635, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559636, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559637, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559638, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559639, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559640, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559641, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559642, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559643, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559644, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559645, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559646, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559647, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559648, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559649, + 2400023808, + 59.8, + "0x0" + ], + [ + 1784559650, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559651, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559652, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559653, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559654, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559655, + 2400033792, + 59.3, + "0x0" + ], + [ + 1784559656, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559657, + 2400030464, + 59.8, + "0x0" + ], + [ + 1784559658, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559659, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559660, + 2400023808, + 58.7, + "0x0" + ], + [ + 1784559661, + 2400017408, + 59.8, + "0x0" + ], + [ + 1784559662, + 2400023808, + 59.3, + "0x0" + ], + [ + 1784559663, + 2400027136, + 59.8, + "0x0" + ], + [ + 1784559664, + 2400023808, + 58.2, + "0x0" + ], + [ + 1784559665, + 2400030464, + 59.3, + "0x0" + ], + [ + 1784559666, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559667, + 2400030464, + 58.7, + "0x0" + ], + [ + 1784559668, + 2400023808, + 57.6, + "0x0" + ], + [ + 1784559669, + 2400020480, + 58.7, + "0x0" + ], + [ + 1784559670, + 2400027136, + 58.7, + "0x0" + ], + [ + 1784559671, + 2400020480, + 58.2, + "0x0" + ], + [ + 1784559672, + 2400017408, + 58.7, + "0x0" + ], + [ + 1784559673, + 2400020480, + 59.3, + "0x0" + ], + [ + 1784559674, + 2400033792, + 58.2, + "0x0" + ] + ], + "temp_c": { + "min": 56.5, + "max": 67.5, + "mean": 61.626, + "samples": 1683 + }, + "arm_clock_hz": { + "min": 2400017408, + "max": 2400037120, + "mean": 2400025920.494, + "samples": 1683, + "spread_frac": 0.0 + }, + "throttling_detected": false + }, + "warnings": [], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 880, + "timed_iters": 4402, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56791.1, + "samples": 22010, + "median": 56647.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 56611.0, + "q3": 56703.0, + "min": 56537.0, + "max": 77962.0, + "mean": 56721.51, + "stddev": 564.29, + "ops_per_sec": 17653.19, + "per_rep_median": [ + 56648.0, + 56629.0, + 56629.0, + 56629.0, + 56629.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 302, + "timed_iters": 1511, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 165446.09, + "samples": 7555, + "median": 165313.0, + "mad": 93.0, + "iqr": 186.0, + "q1": 165220.0, + "q3": 165406.0, + "min": 164442.0, + "max": 195442.0, + "mean": 165451.47, + "stddev": 916.8, + "ops_per_sec": 6049.13, + "per_rep_median": [ + 165331.0, + 165331.0, + 165313.0, + 165313.0, + 165332.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 221960.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2740, + "timed_iters": 13700, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18248.71, + "samples": 68500, + "median": 18166.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 18147.0, + "q3": 18185.0, + "min": 18073.0, + "max": 46703.0, + "mean": 18236.99, + "stddev": 452.81, + "ops_per_sec": 55047.89, + "per_rep_median": [ + 18166.0, + 18148.0, + 18166.0, + 18166.0, + 18166.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2440, + "timed_iters": 12198, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20495.5, + "samples": 60990, + "median": 20499.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 20481.0, + "q3": 20518.0, + "min": 20425.0, + "max": 77332.0, + "mean": 20518.1, + "stddev": 395.47, + "ops_per_sec": 48782.87, + "per_rep_median": [ + 20500.0, + 20482.0, + 20499.0, + 20500.0, + 20499.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2090, + "timed_iters": 10450, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23924.05, + "samples": 52250, + "median": 23926.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 23907.0, + "q3": 23944.0, + "min": 23851.0, + "max": 50351.0, + "mean": 23947.58, + "stddev": 328.76, + "ops_per_sec": 41795.54, + "per_rep_median": [ + 23926.0, + 23926.0, + 23926.0, + 23926.0, + 23926.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 62591.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1659, + "timed_iters": 8296, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30133.25, + "samples": 41480, + "median": 29870.0, + "mad": 37.0, + "iqr": 56.0, + "q1": 29851.0, + "q3": 29907.0, + "min": 29740.0, + "max": 70351.0, + "mean": 30045.07, + "stddev": 709.79, + "ops_per_sec": 33478.41, + "per_rep_median": [ + 29888.0, + 29870.0, + 29870.0, + 29870.0, + 29870.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1568, + "timed_iters": 7839, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31891.57, + "samples": 39195, + "median": 31907.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 31888.0, + "q3": 31925.0, + "min": 31795.0, + "max": 56536.0, + "mean": 31930.71, + "stddev": 401.87, + "ops_per_sec": 31341.09, + "per_rep_median": [ + 31888.0, + 31907.0, + 31907.0, + 31907.0, + 31907.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1340, + "timed_iters": 6698, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37325.28, + "samples": 33490, + "median": 37333.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 37314.0, + "q3": 37352.0, + "min": 37222.0, + "max": 62351.0, + "mean": 37367.8, + "stddev": 472.71, + "ops_per_sec": 26785.95, + "per_rep_median": [ + 37333.0, + 37333.0, + 37333.0, + 37333.0, + 37333.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 99110.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1124, + "timed_iters": 5619, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44495.3, + "samples": 28095, + "median": 44185.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 44166.0, + "q3": 44240.0, + "min": 44036.0, + "max": 71407.0, + "mean": 44475.46, + "stddev": 846.24, + "ops_per_sec": 22632.11, + "per_rep_median": [ + 44185.0, + 44203.0, + 44185.0, + 44185.0, + 44185.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1047, + "timed_iters": 5233, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47774.41, + "samples": 26165, + "median": 47777.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 47758.0, + "q3": 47795.0, + "min": 47666.0, + "max": 74999.0, + "mean": 47831.69, + "stddev": 627.83, + "ops_per_sec": 20930.57, + "per_rep_median": [ + 47759.0, + 47777.0, + 47777.0, + 47777.0, + 47759.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 901, + "timed_iters": 4506, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55484.79, + "samples": 22530, + "median": 55500.0, + "mad": 36.0, + "iqr": 55.0, + "q1": 55481.0, + "q3": 55536.0, + "min": 55369.0, + "max": 74239.0, + "mean": 55540.41, + "stddev": 399.02, + "ops_per_sec": 18018.02, + "per_rep_median": [ + 55499.0, + 55500.0, + 55500.0, + 55518.0, + 55499.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 147462.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 78511058.0, + "samples": 150, + "median": 149116177.0, + "mad": 35569676.5, + "iqr": 105798745.75, + "q1": 78853053.25, + "q3": 184651799.0, + "min": 78370727.0, + "max": 574714516.0, + "mean": 162526232.03, + "stddev": 96527536.69, + "ops_per_sec": 6.71, + "per_rep_median": [ + 149227481.5, + 149165815.0, + 149630995.0, + 113813561.5, + 149065474.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 717, + "timed_iters": 3583, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69772.99, + "samples": 17915, + "median": 66148.0, + "mad": 463.0, + "iqr": 5685.0, + "q1": 65944.0, + "q3": 71629.0, + "min": 65480.0, + "max": 121591.0, + "mean": 70379.26, + "stddev": 6536.73, + "ops_per_sec": 15117.62, + "per_rep_median": [ + 66148.0, + 66073.0, + 66073.0, + 66184.0, + 66185.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25698019.33, + "samples": 150, + "median": 25694698.0, + "mad": 1824.5, + "iqr": 3800.75, + "q1": 25693332.5, + "q3": 25697133.25, + "min": 25689013.0, + "max": 25816363.0, + "mean": 25699081.0, + "stddev": 16883.19, + "ops_per_sec": 38.92, + "per_rep_median": [ + 25694263.0, + 25694485.0, + 25694439.0, + 25694726.0, + 25695115.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 174877023.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 231489483.0, + "samples": 150, + "median": 345028791.5, + "mad": 113676647.5, + "iqr": 445962629.5, + "q1": 231746484.75, + "q3": 677709114.25, + "min": 231180007.0, + "max": 2241305547.0, + "mean": 524357608.43, + "stddev": 369051576.43, + "ops_per_sec": 2.9, + "per_rep_median": [ + 343532651.5, + 454219984.5, + 342952280.0, + 406099031.0, + 454202987.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 359, + "timed_iters": 1793, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 139418.16, + "samples": 8965, + "median": 130925.0, + "mad": 11093.0, + "iqr": 32407.0, + "q1": 119943.0, + "q3": 152350.0, + "min": 118832.0, + "max": 365014.0, + "mean": 139368.38, + "stddev": 24878.69, + "ops_per_sec": 7637.96, + "per_rep_median": [ + 130998.0, + 131053.0, + 130869.0, + 130887.0, + 130831.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58879896.0, + "samples": 150, + "median": 58743749.5, + "mad": 191516.0, + "iqr": 329607.25, + "q1": 58505882.0, + "q3": 58835489.25, + "min": 58029258.0, + "max": 59410296.0, + "mean": 58716571.0, + "stddev": 286977.31, + "ops_per_sec": 17.02, + "per_rep_median": [ + 58646676.5, + 58743184.5, + 58789990.0, + 58715555.5, + 58768110.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 403903466.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 230361425.0, + "samples": 150, + "median": 228718918.5, + "mad": 197821.0, + "iqr": 488657.0, + "q1": 228565725.75, + "q3": 229054382.75, + "min": 228469024.0, + "max": 231347617.0, + "mean": 228901119.75, + "stddev": 501285.83, + "ops_per_sec": 4.37, + "per_rep_median": [ + 228729048.0, + 228858184.5, + 228773946.0, + 228668743.5, + 228663567.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 364, + "timed_iters": 1818, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 137489.65, + "samples": 9090, + "median": 130591.0, + "mad": 11111.0, + "iqr": 24722.0, + "q1": 119721.0, + "q3": 144443.0, + "min": 118369.0, + "max": 321514.0, + "mean": 138027.65, + "stddev": 23270.78, + "ops_per_sec": 7657.5, + "per_rep_median": [ + 130628.0, + 130600.0, + 130498.0, + 130517.0, + 130739.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58369606.0, + "samples": 150, + "median": 58742425.5, + "mad": 42239.0, + "iqr": 288741.25, + "q1": 58465586.5, + "q3": 58754327.75, + "min": 58207590.0, + "max": 58832267.0, + "mean": 58602854.7, + "stddev": 198117.88, + "ops_per_sec": 17.02, + "per_rep_median": [ + 58731648.5, + 58746666.5, + 58747601.5, + 58747888.0, + 58674973.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 287591935.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1301541712.0, + "samples": 150, + "median": 745645982.5, + "mad": 330927545.5, + "iqr": 1104176622.5, + "q1": 416314344.75, + "q3": 1520490967.25, + "min": 414433712.0, + "max": 4252244171.0, + "mean": 1126097913.33, + "stddev": 807444157.93, + "ops_per_sec": 1.34, + "per_rep_median": [ + 710717471.5, + 710829925.0, + 1005002976.5, + 711302320.5, + 1447355105.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 199, + "timed_iters": 995, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 251140.8, + "samples": 4975, + "median": 234052.0, + "mad": 20332.0, + "iqr": 54564.0, + "q1": 214062.0, + "q3": 268626.0, + "min": 213016.0, + "max": 605011.0, + "mean": 254487.08, + "stddev": 48203.55, + "ops_per_sec": 4272.55, + "per_rep_median": [ + 247442.0, + 231312.0, + 231108.0, + 247552.0, + 231145.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 112717764.0, + "samples": 150, + "median": 112680671.5, + "mad": 261339.0, + "iqr": 563465.5, + "q1": 112423841.5, + "q3": 112987307.0, + "min": 111302541.0, + "max": 114022766.0, + "mean": 112715855.75, + "stddev": 627259.48, + "ops_per_sec": 8.87, + "per_rep_median": [ + 112694347.5, + 112661431.0, + 112636524.0, + 112702338.0, + 112695384.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 858560706.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2215019176.0, + "samples": 150, + "median": 1016413019.5, + "mad": 596102553.0, + "iqr": 1192755438.25, + "q1": 420419992.5, + "q3": 1613175430.75, + "min": 418044818.0, + "max": 8822139881.0, + "mean": 1169260167.07, + "stddev": 982073827.38, + "ops_per_sec": 0.98, + "per_rep_median": [ + 717912871.5, + 1016031385.5, + 1018325119.5, + 1015325454.5, + 1016775169.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 135, + "timed_iters": 675, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 370242.99, + "samples": 3375, + "median": 357774.0, + "mad": 15000.0, + "iqr": 44184.5, + "q1": 342959.0, + "q3": 387143.5, + "min": 341644.0, + "max": 580844.0, + "mean": 369373.82, + "stddev": 32335.61, + "ops_per_sec": 2795.06, + "per_rep_median": [ + 357829.0, + 357755.0, + 357792.0, + 357736.0, + 357810.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 108045212.0, + "samples": 150, + "median": 109162467.0, + "mad": 466512.0, + "iqr": 973205.0, + "q1": 108644501.25, + "q3": 109617706.25, + "min": 107734864.0, + "max": 110580014.0, + "mean": 109081902.62, + "stddev": 765182.15, + "ops_per_sec": 9.16, + "per_rep_median": [ + 109027866.0, + 109667710.5, + 109158068.5, + 108851646.5, + 109164152.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1125933260.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 776394234.0, + "samples": 150, + "median": 1103349763.0, + "mad": 330449503.0, + "iqr": 660442111.25, + "q1": 775002734.25, + "q3": 1435444845.5, + "min": 447481732.0, + "max": 6685044227.0, + "mean": 1315423824.21, + "stddev": 1071733593.32, + "ops_per_sec": 0.91, + "per_rep_median": [ + 1106180476.0, + 777542749.0, + 1104876588.0, + 1103655873.0, + 1103699679.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 183, + "timed_iters": 917, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 272773.8, + "samples": 4585, + "median": 259571.0, + "mad": 16278.0, + "iqr": 35537.0, + "q1": 243441.0, + "q3": 278978.0, + "min": 242349.0, + "max": 524957.0, + "mean": 270387.01, + "stddev": 33804.27, + "ops_per_sec": 3852.51, + "per_rep_median": [ + 259534.0, + 259589.0, + 259497.0, + 259645.0, + 259589.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 136591709.0, + "samples": 150, + "median": 136596108.0, + "mad": 252598.5, + "iqr": 482961.75, + "q1": 136380133.25, + "q3": 136863095.0, + "min": 135985310.0, + "max": 137122759.0, + "mean": 136598281.58, + "stddev": 303505.79, + "ops_per_sec": 7.32, + "per_rep_median": [ + 136524914.0, + 136614107.5, + 136498109.0, + 136825512.5, + 136749893.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 1240205442.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 64, + "timed_iters": 318, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 787147.78, + "samples": 1590, + "median": 785675.0, + "mad": 222.0, + "iqr": 556.0, + "q1": 785490.0, + "q3": 786046.0, + "min": 785027.0, + "max": 837582.0, + "mean": 786485.66, + "stddev": 3434.65, + "ops_per_sec": 1272.79, + "per_rep_median": [ + 785675.0, + 785620.0, + 785694.0, + 785713.0, + 785546.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 54, + "timed_iters": 270, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 925758.62, + "samples": 1350, + "median": 925340.0, + "mad": 333.0, + "iqr": 809.5, + "q1": 925081.0, + "q3": 925890.5, + "min": 922896.0, + "max": 980340.0, + "mean": 925905.69, + "stddev": 3222.84, + "ops_per_sec": 1080.68, + "per_rep_median": [ + 925341.0, + 925294.0, + 925377.0, + 925340.0, + 925341.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 277, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 903763.6, + "samples": 1385, + "median": 903230.0, + "mad": 222.0, + "iqr": 519.0, + "q1": 903044.0, + "q3": 903563.0, + "min": 901952.0, + "max": 974358.0, + "mean": 903843.03, + "stddev": 3388.45, + "ops_per_sec": 1107.14, + "per_rep_median": [ + 903304.0, + 903230.0, + 903266.0, + 903193.0, + 903137.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 2614245.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 30, + "timed_iters": 148, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1693707.13, + "samples": 740, + "median": 1692349.0, + "mad": 1056.0, + "iqr": 2130.0, + "q1": 1691293.0, + "q3": 1693423.0, + "min": 1690386.0, + "max": 1764386.0, + "mean": 1692964.07, + "stddev": 4776.36, + "ops_per_sec": 590.89, + "per_rep_median": [ + 1691756.5, + 1692609.0, + 1692821.5, + 1692192.0, + 1691997.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 26, + "timed_iters": 130, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1929507.65, + "samples": 650, + "median": 1929078.0, + "mad": 658.0, + "iqr": 1370.75, + "q1": 1928476.0, + "q3": 1929846.75, + "min": 1925013.0, + "max": 2022698.0, + "mean": 1930160.99, + "stddev": 7123.04, + "ops_per_sec": 518.38, + "per_rep_median": [ + 1929216.5, + 1928883.5, + 1928698.0, + 1929170.5, + 1929540.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1885819.45, + "samples": 665, + "median": 1885902.0, + "mad": 1204.0, + "iqr": 2408.0, + "q1": 1884421.0, + "q3": 1886829.0, + "min": 1881477.0, + "max": 1966383.0, + "mean": 1886332.99, + "stddev": 5047.87, + "ops_per_sec": 530.25, + "per_rep_median": [ + 1885477.0, + 1885587.0, + 1886477.0, + 1885995.0, + 1886236.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 5507329.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 81, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3076414.93, + "samples": 405, + "median": 3070239.0, + "mad": 869.0, + "iqr": 1704.0, + "q1": 3069462.0, + "q3": 3071166.0, + "min": 3065980.0, + "max": 3159664.0, + "mean": 3072087.2, + "stddev": 10214.31, + "ops_per_sec": 325.71, + "per_rep_median": [ + 3070665.0, + 3070129.0, + 3069851.0, + 3070425.0, + 3070443.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3470648.2, + "samples": 360, + "median": 3469077.5, + "mad": 1175.5, + "iqr": 2658.0, + "q1": 3468229.5, + "q3": 3470887.5, + "min": 3464902.0, + "max": 3549493.0, + "mean": 3470267.98, + "stddev": 7493.19, + "ops_per_sec": 288.26, + "per_rep_median": [ + 3469938.5, + 3469484.5, + 3469207.0, + 3468401.5, + 3469299.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3411168.67, + "samples": 365, + "median": 3409643.0, + "mad": 1222.0, + "iqr": 2481.0, + "q1": 3408458.0, + "q3": 3410939.0, + "min": 3407180.0, + "max": 6131479.0, + "mean": 3419524.02, + "stddev": 142979.46, + "ops_per_sec": 293.29, + "per_rep_median": [ + 3410309.0, + 3409143.0, + 3409772.0, + 3409476.0, + 3409680.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 9948959.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-640-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 17, + "timed_iters": 86, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2890965.27, + "samples": 430, + "median": 2886974.0, + "mad": 510.0, + "iqr": 1795.75, + "q1": 2885557.25, + "q3": 2887353.0, + "min": 2884130.0, + "max": 2959537.0, + "mean": 2887179.34, + "stddev": 4459.16, + "ops_per_sec": 346.38, + "per_rep_median": [ + 2886899.5, + 2887158.5, + 2886992.0, + 2887028.5, + 2886584.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3356295.33, + "samples": 370, + "median": 3354903.0, + "mad": 537.0, + "iqr": 1037.0, + "q1": 3354495.0, + "q3": 3355532.0, + "min": 3352032.0, + "max": 3425198.0, + "mean": 3356204.22, + "stddev": 7411.02, + "ops_per_sec": 298.07, + "per_rep_median": [ + 3355681.0, + 3354662.0, + 3354699.0, + 3355449.0, + 3354939.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3332603.07, + "samples": 375, + "median": 3332477.0, + "mad": 370.0, + "iqr": 759.0, + "q1": 3332070.0, + "q3": 3332829.0, + "min": 3329551.0, + "max": 3403013.0, + "mean": 3333144.14, + "stddev": 5834.96, + "ops_per_sec": 300.08, + "per_rep_median": [ + 3332329.0, + 3332718.0, + 3332273.0, + 3332551.0, + 3332589.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 9574354.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-976-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 39, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6463073.0, + "samples": 195, + "median": 6447550.0, + "mad": 1389.0, + "iqr": 2694.0, + "q1": 6446308.5, + "q3": 6449002.5, + "min": 6442846.0, + "max": 6518604.0, + "mean": 6449162.87, + "stddev": 8310.2, + "ops_per_sec": 155.1, + "per_rep_median": [ + 6447568.0, + 6445957.0, + 6447624.0, + 6448957.0, + 6446846.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 34, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7426730.43, + "samples": 170, + "median": 7426259.5, + "mad": 1286.5, + "iqr": 2800.75, + "q1": 7425204.0, + "q3": 7428004.75, + "min": 7421315.0, + "max": 7537110.0, + "mean": 7429978.58, + "stddev": 15246.76, + "ops_per_sec": 134.66, + "per_rep_median": [ + 7426259.5, + 7427019.0, + 7425898.5, + 7426445.0, + 7426824.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 34, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7394119.71, + "samples": 170, + "median": 7391602.0, + "mad": 1222.0, + "iqr": 2935.5, + "q1": 7390537.25, + "q3": 7393472.75, + "min": 7387686.0, + "max": 7406426.0, + "mean": 7392323.35, + "stddev": 2833.01, + "ops_per_sec": 135.29, + "per_rep_median": [ + 7391436.0, + 7394686.5, + 7392667.0, + 7390954.5, + 7390639.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 21265411.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-1344-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11762495.33, + "samples": 150, + "median": 11751743.0, + "mad": 1074.0, + "iqr": 2555.5, + "q1": 11750821.75, + "q3": 11753377.25, + "min": 11747909.0, + "max": 11889667.0, + "mean": 11756096.39, + "stddev": 18029.17, + "ops_per_sec": 85.09, + "per_rep_median": [ + 11753280.0, + 11751613.0, + 11751502.0, + 11752817.0, + 11750845.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13550955.0, + "samples": 150, + "median": 13543026.0, + "mad": 1240.0, + "iqr": 2745.75, + "q1": 13541928.75, + "q3": 13544674.5, + "min": 13538535.0, + "max": 13696070.0, + "mean": 13547181.37, + "stddev": 19365.5, + "ops_per_sec": 73.84, + "per_rep_median": [ + 13545359.0, + 13542980.0, + 13542914.5, + 13542415.0, + 13542656.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13495431.0, + "samples": 150, + "median": 13484721.0, + "mad": 1972.0, + "iqr": 3981.25, + "q1": 13482809.25, + "q3": 13486790.5, + "min": 13479944.0, + "max": 13674404.0, + "mean": 13490152.1, + "stddev": 23693.28, + "ops_per_sec": 74.16, + "per_rep_median": [ + 13485286.0, + 13483860.5, + 13485425.0, + 13482749.0, + 13485693.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 38779490.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 920, + "timed_iters": 4601, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54331.68, + "samples": 23005, + "median": 54147.0, + "mad": 92.0, + "iqr": 518.0, + "q1": 54092.0, + "q3": 54610.0, + "min": 53870.0, + "max": 71499.0, + "mean": 54319.82, + "stddev": 510.56, + "ops_per_sec": 18468.24, + "per_rep_median": [ + 54129.0, + 54147.0, + 54129.0, + 54147.0, + 54166.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 271, + "timed_iters": 1357, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 184267.07, + "samples": 6785, + "median": 183942.0, + "mad": 36.0, + "iqr": 56.0, + "q1": 183923.0, + "q3": 183979.0, + "min": 183812.0, + "max": 209978.0, + "mean": 184078.56, + "stddev": 733.44, + "ops_per_sec": 5436.5, + "per_rep_median": [ + 183942.0, + 184128.0, + 183942.0, + 183942.0, + 183942.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 238089.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1208, + "timed_iters": 6042, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 41373.73, + "samples": 30210, + "median": 41296.0, + "mad": 481.0, + "iqr": 815.0, + "q1": 40777.0, + "q3": 41592.0, + "min": 39500.0, + "max": 83462.0, + "mean": 41276.72, + "stddev": 817.78, + "ops_per_sec": 24215.42, + "per_rep_median": [ + 41295.0, + 41295.0, + 41296.0, + 41314.0, + 41278.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1145, + "timed_iters": 5723, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43684.62, + "samples": 28615, + "median": 43499.0, + "mad": 111.0, + "iqr": 537.0, + "q1": 43425.0, + "q3": 43962.0, + "min": 43222.0, + "max": 62203.0, + "mean": 43663.87, + "stddev": 473.65, + "ops_per_sec": 22989.03, + "per_rep_median": [ + 43499.0, + 43481.0, + 43481.0, + 43499.0, + 43518.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 881, + "timed_iters": 4403, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56775.79, + "samples": 22015, + "median": 56703.0, + "mad": 55.0, + "iqr": 93.0, + "q1": 56666.0, + "q3": 56759.0, + "min": 56481.0, + "max": 87129.0, + "mean": 56778.46, + "stddev": 658.91, + "ops_per_sec": 17635.75, + "per_rep_median": [ + 56703.0, + 56722.0, + 56722.0, + 56703.0, + 56684.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 141498.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 687, + "timed_iters": 3433, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 72830.18, + "samples": 17165, + "median": 72648.0, + "mad": 667.0, + "iqr": 1351.0, + "q1": 71999.0, + "q3": 73350.0, + "min": 70036.0, + "max": 100332.0, + "mean": 72732.02, + "stddev": 1126.91, + "ops_per_sec": 13765.0, + "per_rep_median": [ + 72703.0, + 72629.0, + 72647.0, + 72629.0, + 72647.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 664, + "timed_iters": 3319, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 75327.72, + "samples": 16595, + "median": 75110.0, + "mad": 185.0, + "iqr": 555.0, + "q1": 74981.0, + "q3": 75536.0, + "min": 74666.0, + "max": 130535.0, + "mean": 75291.14, + "stddev": 799.82, + "ops_per_sec": 13313.81, + "per_rep_median": [ + 75111.0, + 75110.0, + 75166.0, + 75073.0, + 75092.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 536, + "timed_iters": 2680, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 93273.65, + "samples": 13400, + "median": 93258.0, + "mad": 92.0, + "iqr": 184.0, + "q1": 93166.0, + "q3": 93350.0, + "min": 92813.0, + "max": 120443.0, + "mean": 93343.07, + "stddev": 697.18, + "ops_per_sec": 10722.94, + "per_rep_median": [ + 93240.0, + 93221.0, + 93295.0, + 93258.5, + 93240.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 241016.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 432, + "timed_iters": 2158, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 115857.48, + "samples": 10790, + "median": 115684.0, + "mad": 870.0, + "iqr": 1741.0, + "q1": 114832.0, + "q3": 116573.0, + "min": 111758.0, + "max": 149646.0, + "mean": 115768.4, + "stddev": 1437.74, + "ops_per_sec": 8644.24, + "per_rep_median": [ + 115703.0, + 115647.0, + 115619.0, + 115702.0, + 115758.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 415, + "timed_iters": 2076, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 120411.58, + "samples": 10380, + "median": 120128.0, + "mad": 240.0, + "iqr": 537.0, + "q1": 119961.0, + "q3": 120498.0, + "min": 119517.0, + "max": 149961.0, + "mean": 120306.63, + "stddev": 931.53, + "ops_per_sec": 8324.45, + "per_rep_median": [ + 120166.0, + 120183.0, + 120147.0, + 120072.0, + 120017.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 349, + "timed_iters": 1745, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 143280.72, + "samples": 8725, + "median": 143165.0, + "mad": 111.0, + "iqr": 240.0, + "q1": 143054.0, + "q3": 143294.0, + "min": 142609.0, + "max": 168035.0, + "mean": 143298.36, + "stddev": 820.61, + "ops_per_sec": 6984.95, + "per_rep_median": [ + 143165.0, + 143110.0, + 143165.0, + 143202.0, + 143165.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 378977.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2371, + "timed_iters": 11855, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21088.42, + "samples": 59275, + "median": 21112.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 21093.0, + "q3": 21130.0, + "min": 21019.0, + "max": 58575.0, + "mean": 21138.79, + "stddev": 347.31, + "ops_per_sec": 47366.43, + "per_rep_median": [ + 21112.0, + 21112.0, + 21112.0, + 21112.0, + 21112.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1067, + "timed_iters": 5336, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 46855.75, + "samples": 26680, + "median": 46853.0, + "mad": 1.0, + "iqr": 19.0, + "q1": 46834.0, + "q3": 46853.0, + "min": 46815.0, + "max": 71353.0, + "mean": 46880.96, + "stddev": 401.36, + "ops_per_sec": 21343.35, + "per_rep_median": [ + 46852.0, + 46853.0, + 46853.0, + 46853.0, + 46853.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 67965.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "secp256r1", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1857, + "timed_iters": 9283, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26931.57, + "samples": 46415, + "median": 26908.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 26890.0, + "q3": 26927.0, + "min": 26815.0, + "max": 86446.0, + "mean": 26953.18, + "stddev": 567.86, + "ops_per_sec": 37163.67, + "per_rep_median": [ + 26926.0, + 26908.0, + 26908.0, + 26908.0, + 26908.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 470, + "timed_iters": 2351, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 106327.76, + "samples": 11755, + "median": 106261.0, + "mad": 55.0, + "iqr": 93.0, + "q1": 106206.0, + "q3": 106299.0, + "min": 105483.0, + "max": 134687.0, + "mean": 106317.13, + "stddev": 502.46, + "ops_per_sec": 9410.79, + "per_rep_median": [ + 106261.0, + 106261.0, + 106261.0, + 106261.0, + 106261.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 133169.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1749, + "timed_iters": 8747, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 28581.91, + "samples": 43735, + "median": 28464.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 28445.0, + "q3": 28500.0, + "min": 28370.0, + "max": 65872.0, + "mean": 28627.45, + "stddev": 621.97, + "ops_per_sec": 35132.1, + "per_rep_median": [ + 28463.0, + 28464.0, + 28482.0, + 28482.0, + 28464.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1576, + "timed_iters": 7882, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31716.8, + "samples": 39410, + "median": 31722.0, + "mad": 17.0, + "iqr": 19.0, + "q1": 31704.0, + "q3": 31723.0, + "min": 31667.0, + "max": 69205.0, + "mean": 31740.55, + "stddev": 399.8, + "ops_per_sec": 31523.86, + "per_rep_median": [ + 31722.0, + 31722.0, + 31705.0, + 31705.0, + 31705.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1349, + "timed_iters": 6743, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37075.66, + "samples": 33715, + "median": 37019.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 37001.0, + "q3": 37038.0, + "min": 36963.0, + "max": 91205.0, + "mean": 37053.16, + "stddev": 453.44, + "ops_per_sec": 27013.16, + "per_rep_median": [ + 37019.0, + 37019.0, + 37019.0, + 37019.0, + 37019.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 97205.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1157, + "timed_iters": 5786, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43205.16, + "samples": 28930, + "median": 42964.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 42927.0, + "q3": 43001.0, + "min": 42815.0, + "max": 73501.0, + "mean": 43252.03, + "stddev": 868.26, + "ops_per_sec": 23275.3, + "per_rep_median": [ + 42945.0, + 42964.0, + 42964.0, + 42964.0, + 42964.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1049, + "timed_iters": 5246, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47657.81, + "samples": 26230, + "median": 47631.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 47612.0, + "q3": 47649.0, + "min": 47556.0, + "max": 76205.0, + "mean": 47667.77, + "stddev": 339.24, + "ops_per_sec": 20994.73, + "per_rep_median": [ + 47630.0, + 47630.0, + 47630.0, + 47649.0, + 47649.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 911, + "timed_iters": 4557, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54857.94, + "samples": 22785, + "median": 54852.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 54834.0, + "q3": 54853.0, + "min": 54760.0, + "max": 79094.0, + "mean": 54898.67, + "stddev": 549.34, + "ops_per_sec": 18230.88, + "per_rep_median": [ + 54835.0, + 54853.0, + 54835.0, + 54852.0, + 54852.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 145447.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 862, + "timed_iters": 4308, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58031.87, + "samples": 21540, + "median": 57944.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 57925.0, + "q3": 57963.0, + "min": 57851.0, + "max": 90295.0, + "mean": 58016.58, + "stddev": 666.78, + "ops_per_sec": 17258.04, + "per_rep_median": [ + 57962.0, + 57944.0, + 57944.0, + 57926.0, + 57943.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 868, + "timed_iters": 4341, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57588.56, + "samples": 21705, + "median": 57574.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 57555.0, + "q3": 57592.0, + "min": 57480.0, + "max": 83351.0, + "mean": 57641.88, + "stddev": 631.32, + "ops_per_sec": 17368.95, + "per_rep_median": [ + 57573.0, + 57574.0, + 57573.0, + 57592.0, + 57573.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 345, + "timed_iters": 1726, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 144868.56, + "samples": 8630, + "median": 144647.0, + "mad": 56.0, + "iqr": 111.0, + "q1": 144591.0, + "q3": 144702.0, + "min": 144424.0, + "max": 176554.0, + "mean": 144775.74, + "stddev": 914.13, + "ops_per_sec": 6913.38, + "per_rep_median": [ + 144721.0, + 144647.0, + 144628.0, + 144628.0, + 144665.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 260165.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 467, + "timed_iters": 2333, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107160.59, + "samples": 11665, + "median": 106998.0, + "mad": 555.0, + "iqr": 1111.0, + "q1": 106425.0, + "q3": 107536.0, + "min": 104480.0, + "max": 137331.0, + "mean": 107091.02, + "stddev": 1104.92, + "ops_per_sec": 9345.97, + "per_rep_median": [ + 107017.0, + 107036.0, + 106943.0, + 107055.0, + 106906.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 99, + "timed_iters": 496, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 504536.35, + "samples": 2480, + "median": 397865.5, + "mad": 180507.0, + "iqr": 362171.25, + "q1": 296718.0, + "q3": 658889.25, + "min": 215645.0, + "max": 2757743.0, + "mean": 507973.96, + "stddev": 331280.83, + "ops_per_sec": 2513.41, + "per_rep_median": [ + 397226.5, + 397717.5, + 398245.0, + 398764.0, + 407995.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 416, + "timed_iters": 2081, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 120138.74, + "samples": 10405, + "median": 119147.0, + "mad": 223.0, + "iqr": 1074.0, + "q1": 118999.0, + "q3": 120073.0, + "min": 118683.0, + "max": 146350.0, + "mean": 119541.14, + "stddev": 942.59, + "ops_per_sec": 8392.99, + "per_rep_median": [ + 119091.0, + 120110.0, + 120073.0, + 119017.0, + 119017.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 624010.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 261, + "timed_iters": 1303, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 191877.57, + "samples": 6515, + "median": 191220.0, + "mad": 592.0, + "iqr": 1723.0, + "q1": 190775.0, + "q3": 192498.0, + "min": 189239.0, + "max": 229849.0, + "mean": 191619.79, + "stddev": 1386.66, + "ops_per_sec": 5229.58, + "per_rep_median": [ + 191442.0, + 191220.0, + 191182.0, + 191127.0, + 191146.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 58, + "timed_iters": 292, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 855596.65, + "samples": 1460, + "median": 674677.0, + "mad": 275774.0, + "iqr": 627724.0, + "q1": 430953.0, + "q3": 1058677.0, + "min": 319996.0, + "max": 4819866.0, + "mean": 843198.12, + "stddev": 592778.32, + "ops_per_sec": 1482.19, + "per_rep_median": [ + 676278.5, + 704278.5, + 702741.5, + 595400.0, + 595289.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 264, + "timed_iters": 1320, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 189385.16, + "samples": 6600, + "median": 189145.5, + "mad": 332.0, + "iqr": 778.0, + "q1": 188849.0, + "q3": 189627.0, + "min": 188405.0, + "max": 214534.0, + "mean": 189595.01, + "stddev": 1293.46, + "ops_per_sec": 5286.94, + "per_rep_median": [ + 188868.0, + 189053.0, + 189202.0, + 189424.0, + 188970.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1055042.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 172, + "timed_iters": 862, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 290132.16, + "samples": 4310, + "median": 288496.0, + "mad": 1037.0, + "iqr": 2204.0, + "q1": 287607.0, + "q3": 289811.0, + "min": 284256.0, + "max": 347533.0, + "mean": 289021.62, + "stddev": 2559.54, + "ops_per_sec": 3466.25, + "per_rep_median": [ + 288367.0, + 288126.0, + 288329.0, + 291311.0, + 288200.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 53, + "timed_iters": 265, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 942841.9, + "samples": 1325, + "median": 833916.0, + "mad": 344274.0, + "iqr": 727806.0, + "q1": 492235.0, + "q3": 1220041.0, + "min": 484123.0, + "max": 5229120.0, + "mean": 988040.68, + "stddev": 573220.04, + "ops_per_sec": 1199.16, + "per_rep_median": [ + 832971.0, + 834138.0, + 832897.0, + 871563.0, + 834231.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 161, + "timed_iters": 806, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 310229.87, + "samples": 4030, + "median": 305570.0, + "mad": 167.0, + "iqr": 352.0, + "q1": 305422.0, + "q3": 305774.0, + "min": 304960.0, + "max": 343255.0, + "mean": 305803.39, + "stddev": 1342.02, + "ops_per_sec": 3272.57, + "per_rep_median": [ + 305460.0, + 305793.0, + 305570.0, + 305460.0, + 305589.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1427982.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 9646480.71, + "samples": 150, + "median": 8577032.5, + "mad": 1161234.5, + "iqr": 2773725.5, + "q1": 7790037.0, + "q3": 10563762.5, + "min": 7266372.0, + "max": 19121263.0, + "mean": 9596368.14, + "stddev": 2421599.77, + "ops_per_sec": 116.59, + "per_rep_median": [ + 8430043.5, + 8434377.0, + 9204311.5, + 9479863.5, + 8947518.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 172, + "timed_iters": 859, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 290916.34, + "samples": 4295, + "median": 290052.0, + "mad": 2204.0, + "iqr": 4148.0, + "q1": 288552.0, + "q3": 292700.0, + "min": 277737.0, + "max": 342421.0, + "mean": 290388.71, + "stddev": 3461.74, + "ops_per_sec": 3447.66, + "per_rep_median": [ + 289978.0, + 290126.0, + 290108.0, + 290107.0, + 289941.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 981, + "timed_iters": 4907, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 50945.53, + "samples": 24535, + "median": 50759.0, + "mad": 38.0, + "iqr": 93.0, + "q1": 50722.0, + "q3": 50815.0, + "min": 50518.0, + "max": 72499.0, + "mean": 50816.34, + "stddev": 441.98, + "ops_per_sec": 19700.94, + "per_rep_median": [ + 50888.0, + 50741.0, + 50758.0, + 50758.0, + 50758.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 8917843.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 29425721.0, + "samples": 150, + "median": 26301469.5, + "mad": 2898028.5, + "iqr": 6565978.25, + "q1": 23887129.5, + "q3": 30453107.75, + "min": 22847828.0, + "max": 89997048.0, + "mean": 28918954.57, + "stddev": 7863581.49, + "ops_per_sec": 38.02, + "per_rep_median": [ + 25520479.0, + 27069644.5, + 28006531.5, + 24600351.5, + 26012260.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 86, + "timed_iters": 428, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 583954.24, + "samples": 2140, + "median": 583456.0, + "mad": 3018.5, + "iqr": 5736.75, + "q1": 580289.0, + "q3": 586025.75, + "min": 570455.0, + "max": 639733.0, + "mean": 583509.47, + "stddev": 5639.27, + "ops_per_sec": 1713.93, + "per_rep_median": [ + 583891.0, + 583308.0, + 583345.0, + 583270.5, + 583150.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 499, + "timed_iters": 2495, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100207.2, + "samples": 12475, + "median": 99461.0, + "mad": 149.0, + "iqr": 370.0, + "q1": 99332.0, + "q3": 99702.0, + "min": 98888.0, + "max": 123239.0, + "mean": 99588.11, + "stddev": 623.97, + "ops_per_sec": 10054.19, + "per_rep_median": [ + 99925.0, + 99609.0, + 99425.0, + 99369.0, + 99277.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 26984386.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 37, + "timed_iters": 183, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1367646.68, + "samples": 915, + "median": 1368298.0, + "mad": 851.0, + "iqr": 1759.0, + "q1": 1367613.0, + "q3": 1369372.0, + "min": 1365502.0, + "max": 1443241.0, + "mean": 1368771.1, + "stddev": 3617.8, + "ops_per_sec": 730.83, + "per_rep_median": [ + 1368002.0, + 1368594.0, + 1368297.0, + 1368557.0, + 1368020.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32036602.0, + "samples": 150, + "median": 32056499.5, + "mad": 14666.5, + "iqr": 30374.0, + "q1": 32039666.75, + "q3": 32070040.75, + "min": 32017177.0, + "max": 32134768.0, + "mean": 32056968.43, + "stddev": 23002.97, + "ops_per_sec": 31.19, + "per_rep_median": [ + 32057250.0, + 32056499.5, + 32060453.5, + 32059935.0, + 32042843.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1873952.19, + "samples": 665, + "median": 1874143.0, + "mad": 1148.0, + "iqr": 2111.0, + "q1": 1872921.0, + "q3": 1875032.0, + "min": 1871162.0, + "max": 1944569.0, + "mean": 1874472.87, + "stddev": 3502.94, + "ops_per_sec": 533.58, + "per_rep_median": [ + 1873606.0, + 1873865.0, + 1874773.0, + 1873458.0, + 1874736.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 35298940.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 87493709.0, + "samples": 150, + "median": 87522977.0, + "mad": 40962.5, + "iqr": 82956.5, + "q1": 87486394.75, + "q3": 87569351.25, + "min": 87424821.0, + "max": 90286933.0, + "mean": 87548535.87, + "stddev": 231342.86, + "ops_per_sec": 11.43, + "per_rep_median": [ + 87514005.0, + 87563652.5, + 87499977.0, + 87499505.5, + 87547116.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 667179857.0, + "samples": 150, + "median": 667627638.5, + "mad": 206200.5, + "iqr": 407629.0, + "q1": 667395091.25, + "q3": 667802720.25, + "min": 667013970.0, + "max": 670127414.0, + "mean": 667615304.09, + "stddev": 335509.93, + "ops_per_sec": 1.5, + "per_rep_median": [ + 667621509.0, + 667651592.5, + 667565427.0, + 667661055.5, + 667624695.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 365, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 684360.68, + "samples": 1825, + "median": 683584.0, + "mad": 444.0, + "iqr": 926.0, + "q1": 683213.0, + "q3": 684139.0, + "min": 682399.0, + "max": 742639.0, + "mean": 683942.56, + "stddev": 2097.79, + "ops_per_sec": 1462.88, + "per_rep_median": [ + 684029.0, + 683288.0, + 683306.0, + 683528.0, + 683880.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 755834199.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 25, + "timed_iters": 126, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1988403.0, + "samples": 630, + "median": 1988781.0, + "mad": 991.0, + "iqr": 1963.0, + "q1": 1987753.0, + "q3": 1989716.0, + "min": 1986031.0, + "max": 2058216.0, + "mean": 1989102.71, + "stddev": 3477.97, + "ops_per_sec": 502.82, + "per_rep_median": [ + 1988493.5, + 1988466.5, + 1988522.0, + 1989160.5, + 1988948.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 52436330.0, + "samples": 150, + "median": 52413052.5, + "mad": 21962.0, + "iqr": 42693.5, + "q1": 52391034.5, + "q3": 52433728.0, + "min": 52324183.0, + "max": 55123741.0, + "mean": 52431027.66, + "stddev": 223969.21, + "ops_per_sec": 19.08, + "per_rep_median": [ + 52414432.0, + 52420553.0, + 52387071.0, + 52393756.5, + 52431200.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 18, + "timed_iters": 92, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2724708.2, + "samples": 460, + "median": 2724022.0, + "mad": 833.5, + "iqr": 1732.0, + "q1": 2722998.5, + "q3": 2724730.5, + "min": 2721133.0, + "max": 2795410.0, + "mean": 2724438.83, + "stddev": 5077.3, + "ops_per_sec": 367.1, + "per_rep_median": [ + 2724771.5, + 2723975.0, + 2724003.5, + 2723763.0, + 2723975.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 57125855.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 10, + "timed_iters": 48, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5245069.71, + "samples": 240, + "median": 5243111.0, + "mad": 1777.5, + "iqr": 3866.0, + "q1": 5241837.25, + "q3": 5245703.25, + "min": 5238935.0, + "max": 5314656.0, + "mean": 5244329.22, + "stddev": 5691.78, + "ops_per_sec": 190.73, + "per_rep_median": [ + 5242222.0, + 5242629.0, + 5245897.5, + 5242342.5, + 5244138.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107592645.0, + "samples": 150, + "median": 107508683.0, + "mad": 35953.0, + "iqr": 76786.25, + "q1": 107480210.75, + "q3": 107556997.0, + "min": 107435499.0, + "max": 107706735.0, + "mean": 107519666.11, + "stddev": 51306.85, + "ops_per_sec": 9.3, + "per_rep_median": [ + 107511849.5, + 107530552.5, + 107492785.0, + 107542701.5, + 107496396.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 17, + "timed_iters": 87, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2886939.47, + "samples": 435, + "median": 2885094.0, + "mad": 981.0, + "iqr": 2028.0, + "q1": 2884186.0, + "q3": 2886214.0, + "min": 2881834.0, + "max": 2906779.0, + "mean": 2885583.34, + "stddev": 2580.44, + "ops_per_sec": 346.61, + "per_rep_median": [ + 2884483.0, + 2884631.0, + 2884909.0, + 2887779.0, + 2885593.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 115636888.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 161, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1554052.35, + "samples": 805, + "median": 1531111.0, + "mad": 1815.0, + "iqr": 3629.0, + "q1": 1529296.0, + "q3": 1532925.0, + "min": 1527185.0, + "max": 1618795.0, + "mean": 1532409.79, + "stddev": 7080.51, + "ops_per_sec": 653.12, + "per_rep_median": [ + 1534925.0, + 1529259.0, + 1531074.0, + 1531240.0, + 1529500.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 35830481.0, + "samples": 150, + "median": 35785962.5, + "mad": 41443.5, + "iqr": 63564.5, + "q1": 35766277.75, + "q3": 35829842.25, + "min": 35697094.0, + "max": 35995682.0, + "mean": 35799372.87, + "stddev": 53981.17, + "ops_per_sec": 27.94, + "per_rep_median": [ + 35823119.5, + 35870332.0, + 35749963.5, + 35784898.5, + 35776407.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 23, + "timed_iters": 114, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2194998.67, + "samples": 570, + "median": 2193713.0, + "mad": 1852.0, + "iqr": 2778.0, + "q1": 2192917.0, + "q3": 2195695.0, + "min": 2190991.0, + "max": 2266657.0, + "mean": 2194775.19, + "stddev": 5132.3, + "ops_per_sec": 455.85, + "per_rep_median": [ + 2193677.0, + 2193677.0, + 2195510.0, + 2196343.0, + 2192880.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 39510786.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 99648465.0, + "samples": 150, + "median": 99101491.0, + "mad": 145035.5, + "iqr": 1438111.75, + "q1": 97786196.75, + "q3": 99224308.5, + "min": 97509399.0, + "max": 99559208.0, + "mean": 98754724.65, + "stddev": 696249.44, + "ops_per_sec": 10.09, + "per_rep_median": [ + 99336080.5, + 99180342.0, + 99065732.5, + 99054593.5, + 97610472.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 741850950.0, + "samples": 150, + "median": 739801068.0, + "mad": 1360899.5, + "iqr": 2691188.75, + "q1": 738370637.0, + "q3": 741061825.75, + "min": 736891623.0, + "max": 744293049.0, + "mean": 739708002.35, + "stddev": 1701976.07, + "ops_per_sec": 1.35, + "per_rep_median": [ + 741210467.0, + 740791102.0, + 739078179.0, + 737757872.0, + 738402252.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 71, + "timed_iters": 353, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 708538.51, + "samples": 1765, + "median": 709621.0, + "mad": 74.0, + "iqr": 130.0, + "q1": 709584.0, + "q3": 709714.0, + "min": 708806.0, + "max": 772213.0, + "mean": 710014.16, + "stddev": 2076.84, + "ops_per_sec": 1409.2, + "per_rep_median": [ + 708843.0, + 709713.0, + 709676.0, + 709621.0, + 709620.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 839612180.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 21, + "timed_iters": 103, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2425284.73, + "samples": 515, + "median": 2396286.0, + "mad": 9925.0, + "iqr": 21703.0, + "q1": 2384415.0, + "q3": 2406118.0, + "min": 2373655.0, + "max": 2476969.0, + "mean": 2397246.83, + "stddev": 12852.9, + "ops_per_sec": 417.31, + "per_rep_median": [ + 2408841.0, + 2405322.0, + 2394063.0, + 2396286.0, + 2379526.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 64116833.0, + "samples": 150, + "median": 63546655.0, + "mad": 59138.0, + "iqr": 127531.5, + "q1": 63503257.25, + "q3": 63630788.75, + "min": 63443619.0, + "max": 63944131.0, + "mean": 63572185.79, + "stddev": 91707.98, + "ops_per_sec": 15.74, + "per_rep_median": [ + 63526664.5, + 63548525.0, + 63528581.0, + 63531368.5, + 63685005.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3318448.93, + "samples": 375, + "median": 3320662.0, + "mad": 1185.0, + "iqr": 3083.0, + "q1": 3319700.0, + "q3": 3322783.0, + "min": 3307052.0, + "max": 3388624.0, + "mean": 3321519.59, + "stddev": 6146.3, + "ops_per_sec": 301.14, + "per_rep_median": [ + 3320126.0, + 3320089.0, + 3320458.0, + 3320829.0, + 3323662.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 69263603.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 40, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6256178.71, + "samples": 200, + "median": 6192302.5, + "mad": 6231.5, + "iqr": 23865.25, + "q1": 6190552.5, + "q3": 6214417.75, + "min": 6183294.0, + "max": 6283903.0, + "mean": 6204273.69, + "stddev": 24841.95, + "ops_per_sec": 161.49, + "per_rep_median": [ + 6246811.5, + 6192395.5, + 6191895.5, + 6192405.0, + 6185358.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 129832331.0, + "samples": 150, + "median": 127590813.0, + "mad": 88749.0, + "iqr": 184521.5, + "q1": 127510489.25, + "q3": 127695010.75, + "min": 127350399.0, + "max": 130321214.0, + "mean": 127748321.31, + "stddev": 446346.71, + "ops_per_sec": 7.84, + "per_rep_median": [ + 128328767.0, + 127608350.0, + 127576535.0, + 127543767.5, + 127522073.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3423935.2, + "samples": 365, + "median": 3418254.0, + "mad": 982.0, + "iqr": 1945.0, + "q1": 3417309.0, + "q3": 3419254.0, + "min": 3416272.0, + "max": 3509437.0, + "mean": 3420944.09, + "stddev": 8648.16, + "ops_per_sec": 292.55, + "per_rep_median": [ + 3418421.0, + 3417847.0, + 3420642.0, + 3418550.0, + 3417772.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 137201369.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 911, + "timed_iters": 4555, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54890.69, + "samples": 22775, + "median": 54740.0, + "mad": 111.0, + "iqr": 518.0, + "q1": 54666.0, + "q3": 55184.0, + "min": 54499.0, + "max": 72425.0, + "mean": 54912.71, + "stddev": 513.05, + "ops_per_sec": 18268.18, + "per_rep_median": [ + 54684.0, + 54685.0, + 54759.0, + 54740.0, + 54796.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 885, + "timed_iters": 4423, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56527.59, + "samples": 22115, + "median": 56499.0, + "mad": 37.0, + "iqr": 56.0, + "q1": 56462.0, + "q3": 56518.0, + "min": 56277.0, + "max": 75202.0, + "mean": 56528.84, + "stddev": 436.92, + "ops_per_sec": 17699.43, + "per_rep_median": [ + 56499.0, + 56481.0, + 56499.0, + 56499.0, + 56481.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 273, + "timed_iters": 1367, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 182948.2, + "samples": 6835, + "median": 182590.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 182571.0, + "q3": 182609.0, + "min": 182461.0, + "max": 210127.0, + "mean": 182713.76, + "stddev": 818.16, + "ops_per_sec": 5476.75, + "per_rep_median": [ + 182590.0, + 182590.0, + 182590.0, + 182590.0, + 182590.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 296, + "timed_iters": 1482, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 168649.4, + "samples": 7410, + "median": 168572.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 168553.0, + "q3": 168591.0, + "min": 168442.0, + "max": 197516.0, + "mean": 168674.26, + "stddev": 733.34, + "ops_per_sec": 5932.18, + "per_rep_median": [ + 168572.0, + 168572.0, + 168572.0, + 168572.0, + 168572.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 293829.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 161, + "timed_iters": 806, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 310292.87, + "samples": 4030, + "median": 309940.0, + "mad": 481.0, + "iqr": 944.0, + "q1": 309441.0, + "q3": 310385.0, + "min": 308515.0, + "max": 353459.0, + "mean": 310174.31, + "stddev": 1897.37, + "ops_per_sec": 3226.43, + "per_rep_median": [ + 309422.0, + 309496.0, + 309950.0, + 310256.0, + 310274.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 73, + "timed_iters": 363, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 687769.81, + "samples": 1815, + "median": 590511.0, + "mad": 347180.0, + "iqr": 694732.0, + "q1": 415236.0, + "q3": 1109968.0, + "min": 242349.0, + "max": 7038005.0, + "mean": 825674.81, + "stddev": 666362.82, + "ops_per_sec": 1693.45, + "per_rep_median": [ + 595122.0, + 592549.0, + 590270.0, + 590659.0, + 589826.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 270, + "timed_iters": 1349, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 185287.75, + "samples": 6745, + "median": 184831.0, + "mad": 74.0, + "iqr": 130.0, + "q1": 184775.0, + "q3": 184905.0, + "min": 184516.0, + "max": 217535.0, + "mean": 185019.83, + "stddev": 1218.41, + "ops_per_sec": 5410.35, + "per_rep_median": [ + 184849.0, + 184849.0, + 184812.0, + 184831.0, + 184831.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 506, + "timed_iters": 2530, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 98807.39, + "samples": 12650, + "median": 98776.0, + "mad": 56.0, + "iqr": 129.0, + "q1": 98703.0, + "q3": 98832.0, + "min": 98480.0, + "max": 121425.0, + "mean": 98837.27, + "stddev": 576.78, + "ops_per_sec": 10123.92, + "per_rep_median": [ + 98758.0, + 98795.0, + 98758.0, + 98758.0, + 98758.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1085282.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 104, + "timed_iters": 519, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 481848.81, + "samples": 2595, + "median": 484031.0, + "mad": 926.0, + "iqr": 1962.0, + "q1": 482791.0, + "q3": 484753.0, + "min": 479049.0, + "max": 544586.0, + "mean": 484089.63, + "stddev": 4092.27, + "ops_per_sec": 2065.98, + "per_rep_median": [ + 480643.0, + 484365.0, + 484568.0, + 483957.0, + 483957.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 39, + "timed_iters": 195, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1283430.32, + "samples": 975, + "median": 1089449.0, + "mad": 497420.0, + "iqr": 1240549.5, + "q1": 595224.0, + "q3": 1835773.5, + "min": 347162.0, + "max": 6548141.0, + "mean": 1387471.71, + "stddev": 1109585.24, + "ops_per_sec": 917.9, + "per_rep_median": [ + 1086264.0, + 1088560.0, + 1091671.0, + 1091857.0, + 1089376.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 170, + "timed_iters": 849, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 294452.17, + "samples": 4245, + "median": 294015.0, + "mad": 92.0, + "iqr": 185.0, + "q1": 293923.0, + "q3": 294108.0, + "min": 293589.0, + "max": 330700.0, + "mean": 294336.41, + "stddev": 1747.01, + "ops_per_sec": 3401.19, + "per_rep_median": [ + 294015.0, + 293978.0, + 294033.0, + 294033.0, + 294015.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 348, + "timed_iters": 1741, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 143563.94, + "samples": 8705, + "median": 143536.0, + "mad": 73.0, + "iqr": 131.0, + "q1": 143479.0, + "q3": 143610.0, + "min": 143165.0, + "max": 172813.0, + "mean": 143664.14, + "stddev": 926.93, + "ops_per_sec": 6966.89, + "per_rep_median": [ + 143573.0, + 143554.0, + 143498.0, + 143536.0, + 143535.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1867495.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 65, + "timed_iters": 327, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 764026.37, + "samples": 1635, + "median": 754861.0, + "mad": 1981.0, + "iqr": 5573.5, + "q1": 753046.5, + "q3": 758620.0, + "min": 750028.0, + "max": 869008.0, + "mean": 756948.43, + "stddev": 8748.46, + "ops_per_sec": 1324.75, + "per_rep_median": [ + 762175.0, + 753473.0, + 753509.0, + 752954.0, + 755657.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 23, + "timed_iters": 117, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2137219.13, + "samples": 585, + "median": 1175745.0, + "mad": 700065.0, + "iqr": 1404390.0, + "q1": 478753.0, + "q3": 1883143.0, + "min": 474420.0, + "max": 6779286.0, + "mean": 1445696.85, + "stddev": 1068560.2, + "ops_per_sec": 850.52, + "per_rep_median": [ + 1175967.0, + 827508.0, + 1175670.0, + 1183930.0, + 1176171.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 107, + "timed_iters": 536, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 466773.15, + "samples": 2680, + "median": 466272.0, + "mad": 111.0, + "iqr": 241.0, + "q1": 466161.0, + "q3": 466402.0, + "min": 465772.0, + "max": 531771.0, + "mean": 466782.12, + "stddev": 2668.7, + "ops_per_sec": 2144.67, + "per_rep_median": [ + 466272.0, + 466235.0, + 466272.0, + 466290.0, + 466309.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 240, + "timed_iters": 1200, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 208395.37, + "samples": 6000, + "median": 208164.0, + "mad": 56.0, + "iqr": 112.0, + "q1": 208108.0, + "q3": 208220.0, + "min": 207868.0, + "max": 236220.0, + "mean": 208317.54, + "stddev": 882.97, + "ops_per_sec": 4803.9, + "per_rep_median": [ + 208164.0, + 208146.0, + 208146.0, + 208164.0, + 208164.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 2396878.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 114, + "timed_iters": 568, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 440445.39, + "samples": 2840, + "median": 439865.0, + "mad": 426.0, + "iqr": 851.0, + "q1": 439458.0, + "q3": 440309.0, + "min": 438087.0, + "max": 490476.0, + "mean": 440075.08, + "stddev": 1707.82, + "ops_per_sec": 2273.42, + "per_rep_median": [ + 439865.0, + 439865.0, + 439846.0, + 439902.0, + 439883.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10268032.67, + "samples": 150, + "median": 10256548.5, + "mad": 2795.5, + "iqr": 5698.75, + "q1": 10253784.75, + "q3": 10259483.5, + "min": 10240317.0, + "max": 12985635.0, + "mean": 10275815.85, + "stddev": 222901.18, + "ops_per_sec": 97.5, + "per_rep_median": [ + 10257187.0, + 10255900.5, + 10256548.5, + 10255946.5, + 10258354.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 79, + "timed_iters": 395, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 633276.08, + "samples": 1975, + "median": 633399.0, + "mad": 779.0, + "iqr": 1593.0, + "q1": 632640.0, + "q3": 634233.0, + "min": 630548.0, + "max": 703436.0, + "mean": 633587.38, + "stddev": 2438.09, + "ops_per_sec": 1578.78, + "per_rep_median": [ + 633418.0, + 633289.0, + 633418.0, + 633436.0, + 633418.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 79, + "timed_iters": 395, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 633513.0, + "samples": 1975, + "median": 633252.0, + "mad": 759.0, + "iqr": 1518.5, + "q1": 632520.0, + "q3": 634038.5, + "min": 630178.0, + "max": 693547.0, + "mean": 633439.53, + "stddev": 2061.35, + "ops_per_sec": 1579.15, + "per_rep_median": [ + 633307.0, + 633270.0, + 633288.0, + 633289.0, + 633158.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 11329812.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30105626.0, + "samples": 150, + "median": 30103908.5, + "mad": 4473.0, + "iqr": 8965.75, + "q1": 30100123.25, + "q3": 30109089.0, + "min": 30092761.0, + "max": 30175352.0, + "mean": 30106685.01, + "stddev": 12893.12, + "ops_per_sec": 33.22, + "per_rep_median": [ + 30104365.0, + 30103104.0, + 30105185.5, + 30102488.5, + 30103950.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 217395571.0, + "samples": 150, + "median": 217366831.0, + "mad": 35358.5, + "iqr": 72890.25, + "q1": 217342192.0, + "q3": 217415082.25, + "min": 217277135.0, + "max": 217544382.0, + "mean": 217380043.81, + "stddev": 54799.93, + "ops_per_sec": 4.6, + "per_rep_median": [ + 217361654.0, + 217366111.0, + 217375673.0, + 217369625.5, + 217365971.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 224, + "timed_iters": 1119, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 223482.22, + "samples": 5595, + "median": 223208.0, + "mad": 408.0, + "iqr": 870.0, + "q1": 222819.0, + "q3": 223689.0, + "min": 221986.0, + "max": 259875.0, + "mean": 223392.96, + "stddev": 1090.32, + "ops_per_sec": 4480.13, + "per_rep_median": [ + 223189.0, + 223171.0, + 223208.0, + 223227.0, + 223226.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 224, + "timed_iters": 1120, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 223252.05, + "samples": 5600, + "median": 223097.0, + "mad": 426.0, + "iqr": 870.0, + "q1": 222708.0, + "q3": 223578.0, + "min": 221782.0, + "max": 254912.0, + "mean": 223289.24, + "stddev": 1168.58, + "ops_per_sec": 4482.36, + "per_rep_median": [ + 223023.0, + 223078.0, + 223097.0, + 223152.0, + 223153.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 247693947.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 75, + "timed_iters": 373, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 670997.1, + "samples": 1865, + "median": 671587.0, + "mad": 612.0, + "iqr": 1241.0, + "q1": 671050.0, + "q3": 672291.0, + "min": 668476.0, + "max": 686865.0, + "mean": 671784.08, + "stddev": 1305.29, + "ops_per_sec": 1489.01, + "per_rep_median": [ + 671587.0, + 671754.0, + 671569.0, + 671457.0, + 671606.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20306373.0, + "samples": 150, + "median": 20319010.5, + "mad": 5221.0, + "iqr": 11168.0, + "q1": 20314444.5, + "q3": 20325612.5, + "min": 20299666.0, + "max": 20393205.0, + "mean": 20322255.4, + "stddev": 14968.66, + "ops_per_sec": 49.21, + "per_rep_median": [ + 20319048.5, + 20318881.0, + 20319316.0, + 20317148.5, + 20318777.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 45, + "timed_iters": 227, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1100291.06, + "samples": 1135, + "median": 1099651.0, + "mad": 704.0, + "iqr": 1546.5, + "q1": 1099058.0, + "q3": 1100604.5, + "min": 1096817.0, + "max": 1169097.0, + "mean": 1100196.42, + "stddev": 3506.83, + "ops_per_sec": 909.38, + "per_rep_median": [ + 1099910.0, + 1099743.0, + 1099336.0, + 1099595.0, + 1099743.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 46, + "timed_iters": 230, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1086224.35, + "samples": 1150, + "median": 1086094.0, + "mad": 668.0, + "iqr": 1425.0, + "q1": 1085521.0, + "q3": 1086946.0, + "min": 1083521.0, + "max": 1127411.0, + "mean": 1086486.14, + "stddev": 2345.06, + "ops_per_sec": 920.73, + "per_rep_median": [ + 1086279.5, + 1086066.5, + 1086021.0, + 1086085.0, + 1086048.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 22090248.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 142, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1756404.81, + "samples": 710, + "median": 1756829.5, + "mad": 1185.0, + "iqr": 2366.5, + "q1": 1755667.5, + "q3": 1758034.0, + "min": 1751977.0, + "max": 1829202.0, + "mean": 1757321.03, + "stddev": 4440.21, + "ops_per_sec": 569.21, + "per_rep_median": [ + 1756950.0, + 1757089.0, + 1756756.0, + 1757134.5, + 1755968.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 41184444.0, + "samples": 150, + "median": 41159803.0, + "mad": 9515.0, + "iqr": 20813.0, + "q1": 41152242.0, + "q3": 41173055.0, + "min": 41131654.0, + "max": 43904576.0, + "mean": 41184216.67, + "stddev": 224699.92, + "ops_per_sec": 24.3, + "per_rep_median": [ + 41159951.0, + 41161521.5, + 41157723.5, + 41163313.0, + 41158338.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 44, + "timed_iters": 221, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1131108.16, + "samples": 1105, + "median": 1131113.0, + "mad": 1037.0, + "iqr": 2093.0, + "q1": 1130150.0, + "q3": 1132243.0, + "min": 1128058.0, + "max": 1185022.0, + "mean": 1131500.1, + "stddev": 2731.0, + "ops_per_sec": 884.08, + "per_rep_median": [ + 1130966.0, + 1131151.0, + 1131113.0, + 1131225.0, + 1131206.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 44, + "timed_iters": 221, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1131231.71, + "samples": 1105, + "median": 1131113.0, + "mad": 963.0, + "iqr": 1926.0, + "q1": 1130206.0, + "q3": 1132132.0, + "min": 1127669.0, + "max": 1183225.0, + "mean": 1131367.14, + "stddev": 2414.78, + "ops_per_sec": 884.08, + "per_rep_median": [ + 1131225.0, + 1131002.0, + 1131058.0, + 1131188.0, + 1131132.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 44047745.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2327, + "timed_iters": 11633, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21491.04, + "samples": 58165, + "median": 21501.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 21500.0, + "q3": 21519.0, + "min": 21408.0, + "max": 47260.0, + "mean": 21527.39, + "stddev": 285.71, + "ops_per_sec": 46509.46, + "per_rep_median": [ + 21519.0, + 21501.0, + 21501.0, + 21501.0, + 21501.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2222, + "timed_iters": 11108, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 22505.99, + "samples": 55540, + "median": 22519.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 22501.0, + "q3": 22538.0, + "min": 22426.0, + "max": 53853.0, + "mean": 22543.25, + "stddev": 358.49, + "ops_per_sec": 44406.95, + "per_rep_median": [ + 22519.0, + 22519.0, + 22519.0, + 22519.0, + 22519.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 438, + "timed_iters": 2191, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114105.45, + "samples": 10955, + "median": 114039.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 114002.0, + "q3": 114076.0, + "min": 113705.0, + "max": 138372.0, + "mean": 114109.32, + "stddev": 665.42, + "ops_per_sec": 8768.93, + "per_rep_median": [ + 114021.0, + 114039.0, + 114039.0, + 114039.0, + 114039.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 158059.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 724, + "timed_iters": 3622, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69029.43, + "samples": 18110, + "median": 69093.0, + "mad": 38.0, + "iqr": 93.0, + "q1": 69038.0, + "q3": 69131.0, + "min": 65112.0, + "max": 94983.0, + "mean": 68979.96, + "stddev": 868.69, + "ops_per_sec": 14473.25, + "per_rep_median": [ + 69075.0, + 69093.0, + 69094.0, + 69094.0, + 69094.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 251, + "timed_iters": 1257, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 198919.48, + "samples": 6285, + "median": 157985.0, + "mad": 62224.0, + "iqr": 119336.0, + "q1": 120131.0, + "q3": 239467.0, + "min": 95390.0, + "max": 1014684.0, + "mean": 194595.71, + "stddev": 111273.75, + "ops_per_sec": 6329.71, + "per_rep_median": [ + 158374.0, + 154077.0, + 158762.0, + 158096.0, + 158133.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 739, + "timed_iters": 3693, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 67689.25, + "samples": 18465, + "median": 67668.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 67649.0, + "q3": 67686.0, + "min": 67593.0, + "max": 91094.0, + "mean": 67722.28, + "stddev": 582.22, + "ops_per_sec": 14778.03, + "per_rep_median": [ + 67668.0, + 67668.0, + 67668.0, + 67667.0, + 67650.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 294746.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 421, + "timed_iters": 2105, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 118757.81, + "samples": 10525, + "median": 118669.0, + "mad": 56.0, + "iqr": 112.0, + "q1": 118631.0, + "q3": 118743.0, + "min": 118391.0, + "max": 145928.0, + "mean": 118759.04, + "stddev": 628.13, + "ops_per_sec": 8426.8, + "per_rep_median": [ + 118669.0, + 118687.0, + 118687.0, + 118669.0, + 118687.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 153, + "timed_iters": 763, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 327485.31, + "samples": 3815, + "median": 256579.0, + "mad": 79186.0, + "iqr": 190132.5, + "q1": 184466.0, + "q3": 374598.5, + "min": 148558.0, + "max": 1539860.0, + "mean": 307437.79, + "stddev": 175230.43, + "ops_per_sec": 3897.44, + "per_rep_median": [ + 266005.0, + 259986.0, + 262986.0, + 242652.0, + 249356.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 443, + "timed_iters": 2214, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 112926.28, + "samples": 11070, + "median": 112910.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 112891.0, + "q3": 112946.0, + "min": 112780.0, + "max": 145743.0, + "mean": 113009.54, + "stddev": 753.88, + "ops_per_sec": 8856.61, + "per_rep_median": [ + 112910.0, + 112928.0, + 112910.0, + 112910.0, + 112928.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 488158.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 248, + "timed_iters": 1238, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 201906.11, + "samples": 6190, + "median": 201966.0, + "mad": 110.0, + "iqr": 222.0, + "q1": 201837.0, + "q3": 202059.0, + "min": 196114.0, + "max": 234245.0, + "mean": 201815.52, + "stddev": 1451.24, + "ops_per_sec": 4951.33, + "per_rep_median": [ + 201985.0, + 201948.0, + 201947.0, + 201948.0, + 201967.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 115, + "timed_iters": 576, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 433983.37, + "samples": 2880, + "median": 348987.0, + "mad": 101723.0, + "iqr": 216402.0, + "q1": 249226.0, + "q3": 465628.0, + "min": 246856.0, + "max": 1818549.0, + "mean": 401271.97, + "stddev": 184378.95, + "ops_per_sec": 2865.44, + "per_rep_median": [ + 356589.5, + 346543.0, + 344681.5, + 343839.0, + 352293.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 258, + "timed_iters": 1289, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 193997.74, + "samples": 6445, + "median": 193818.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 193781.0, + "q3": 193855.0, + "min": 193632.0, + "max": 229763.0, + "mean": 194017.67, + "stddev": 1312.23, + "ops_per_sec": 5159.48, + "per_rep_median": [ + 193781.0, + 193836.0, + 193818.0, + 193836.0, + 193818.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 744771.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1303818.0, + "p95": 1315377.7, + "min": 1297706.0, + "max": 1742844.0, + "mean": 1308303.7, + "stddev": 28011.1 + }, + "handshakes_per_sec": 767.0, + "bytes_on_wire": { + "client_to_server": 306, + "server_to_client": 1212, + "total": 1518 + }, + "client_hello_bytes": 226, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 790788.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57574.0, + "subtotal_ns": 57574.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144647.0, + "subtotal_ns": 289294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1643453.0, + "p95": 1657377.6, + "min": 1635194.0, + "max": 2195295.0, + "mean": 1649984.2, + "stddev": 41908.6 + }, + "handshakes_per_sec": 608.5, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 2300, + "total": 3782 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 889898.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57574.0, + "subtotal_ns": 57574.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144647.0, + "subtotal_ns": 289294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1673879.5, + "p95": 1687282.9, + "min": 1664305.0, + "max": 2254667.0, + "mean": 1678176.4, + "stddev": 33562.5 + }, + "handshakes_per_sec": 597.4, + "bytes_on_wire": { + "client_to_server": 1515, + "server_to_client": 2333, + "total": 3848 + }, + "client_hello_bytes": 1435, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57574.0, + "subtotal_ns": 57574.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144647.0, + "subtotal_ns": 289294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1052267.0, + "p95": 1063040.6, + "min": 1044091.0, + "max": 1538266.0, + "mean": 1056316.3, + "stddev": 27261.1 + }, + "handshakes_per_sec": 950.3, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 1948, + "total": 3014 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 409459.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57574.0, + "subtotal_ns": 57574.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144647.0, + "subtotal_ns": 289294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1165324.0, + "p95": 1177304.4, + "min": 1158741.0, + "max": 1610415.0, + "mean": 1171030.1, + "stddev": 34878.4 + }, + "handshakes_per_sec": 858.1, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 2268, + "total": 3718 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 445978.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57574.0, + "subtotal_ns": 57574.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144647.0, + "subtotal_ns": 289294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1279363.5, + "p95": 1291359.6, + "min": 1271872.0, + "max": 1779270.0, + "mean": 1284067.9, + "stddev": 29944.5 + }, + "handshakes_per_sec": 781.6, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 2748, + "total": 4582 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 494330.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57574.0, + "subtotal_ns": 57574.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144647.0, + "subtotal_ns": 289294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2642264.5, + "p95": 4724046.5, + "min": 2210888.0, + "max": 8889292.0, + "mean": 2971998.5, + "stddev": 875969.6 + }, + "handshakes_per_sec": 378.5, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 8318, + "total": 9800 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1179189.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3546908.5, + "p95": 6460090.1, + "min": 2660339.0, + "max": 16381151.0, + "mean": 3889864.3, + "stddev": 1341976.0 + }, + "handshakes_per_sec": 281.9, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 10736, + "total": 12218 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1595998.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4192695.5, + "p95": 7114732.0, + "min": 3347478.0, + "max": 13811957.0, + "mean": 4497823.8, + "stddev": 1327143.6 + }, + "handshakes_per_sec": 238.5, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 14012, + "total": 15494 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1988086.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2067087.5, + "p95": 4147666.8, + "min": 1638118.0, + "max": 7494673.0, + "mean": 2394068.6, + "stddev": 883402.8 + }, + "handshakes_per_sec": 483.8, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 7966, + "total": 9032 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 698750.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2984361.0, + "p95": 5918027.8, + "min": 2106773.0, + "max": 12033056.0, + "mean": 3279540.6, + "stddev": 1313853.2 + }, + "handshakes_per_sec": 335.1, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 10384, + "total": 11450 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1115559.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3670436.0, + "p95": 7013232.0, + "min": 2821821.0, + "max": 13285741.0, + "mean": 4133282.2, + "stddev": 1472421.7 + }, + "handshakes_per_sec": 272.4, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 13660, + "total": 14726 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1507647.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2175931.0, + "p95": 3850755.8, + "min": 1747842.0, + "max": 8026473.0, + "mean": 2445296.0, + "stddev": 770428.3 + }, + "handshakes_per_sec": 459.6, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 8286, + "total": 9736 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 735269.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3070000.0, + "p95": 6286987.7, + "min": 2184421.0, + "max": 14192936.0, + "mean": 3429181.1, + "stddev": 1384705.0 + }, + "handshakes_per_sec": 325.7, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 10704, + "total": 12154 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1152078.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3711638.5, + "p95": 7056028.3, + "min": 2866191.0, + "max": 15836512.0, + "mean": 4094992.3, + "stddev": 1460800.2 + }, + "handshakes_per_sec": 269.4, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 13980, + "total": 15430 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1544166.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2341932.5, + "p95": 4425032.2, + "min": 1907806.0, + "max": 7974857.0, + "mean": 2658616.9, + "stddev": 818170.4 + }, + "handshakes_per_sec": 427.0, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 8766, + "total": 10600 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 783621.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3202908.0, + "p95": 6714608.8, + "min": 2317589.0, + "max": 13165340.0, + "mean": 3634853.8, + "stddev": 1478817.8 + }, + "handshakes_per_sec": 312.2, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 11184, + "total": 13018 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1200430.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3885158.5, + "p95": 7221608.7, + "min": 3039729.0, + "max": 12337641.0, + "mean": 4257672.8, + "stddev": 1440767.7 + }, + "handshakes_per_sec": 257.4, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 14460, + "total": 16294 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1592518.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2675195.0, + "p95": 4754347.3, + "min": 2245865.0, + "max": 7064638.0, + "mean": 2966296.7, + "stddev": 802613.7 + }, + "handshakes_per_sec": 373.8, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 8316, + "total": 9874 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1179189.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3576152.5, + "p95": 6793181.6, + "min": 2691963.0, + "max": 15543146.0, + "mean": 3940765.2, + "stddev": 1447693.1 + }, + "handshakes_per_sec": 279.6, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 10734, + "total": 12292 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1595998.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4225179.5, + "p95": 7568345.1, + "min": 3379639.0, + "max": 13424592.0, + "mean": 4597439.9, + "stddev": 1417389.7 + }, + "handshakes_per_sec": 236.7, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 14010, + "total": 15568 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1988086.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3276453.0, + "p95": 3303993.2, + "min": 3251730.0, + "max": 4327318.0, + "mean": 3286411.0, + "stddev": 75531.1 + }, + "handshakes_per_sec": 305.2, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 4359, + "total": 5917 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 934600.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290052.0, + "subtotal_ns": 290052.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50759.0, + "subtotal_ns": 101518.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43611561.5, + "p95": 44032220.1, + "min": 43120526.0, + "max": 46445842.0, + "mean": 43644455.0, + "stddev": 231256.8 + }, + "handshakes_per_sec": 22.9, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 36417, + "total": 37975 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40716418.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56647.0, + "subtotal_ns": 113294.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165313.0, + "subtotal_ns": 330626.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 35785962.5, + "subtotal_ns": 35785962.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2193713.0, + "subtotal_ns": 4387426.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2714606.0, + "p95": 4585020.8, + "min": 2282972.0, + "max": 8988273.0, + "mean": 2973737.0, + "stddev": 785259.9 + }, + "handshakes_per_sec": 368.4, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 8349, + "total": 9940 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3620357.5, + "p95": 6827196.2, + "min": 2731883.0, + "max": 12970337.0, + "mean": 3993931.3, + "stddev": 1359034.8 + }, + "handshakes_per_sec": 276.2, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 10767, + "total": 12358 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4298512.5, + "p95": 7222961.0, + "min": 3451150.0, + "max": 15559901.0, + "mean": 4573943.1, + "stddev": 1299651.5 + }, + "handshakes_per_sec": 232.6, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 14043, + "total": 15634 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3234500.0, + "p95": 3273468.5, + "min": 3207851.0, + "max": 4268326.0, + "mean": 3249030.4, + "stddev": 92973.9 + }, + "handshakes_per_sec": 309.2, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 4396, + "total": 5987 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290052.0, + "subtotal_ns": 290052.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50759.0, + "subtotal_ns": 101518.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43885456.5, + "p95": 44291992.7, + "min": 43436579.0, + "max": 46712716.0, + "mean": 43906287.3, + "stddev": 234843.2 + }, + "handshakes_per_sec": 22.8, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 36450, + "total": 38041 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 35785962.5, + "subtotal_ns": 35785962.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2193713.0, + "subtotal_ns": 4387426.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2110835.0, + "p95": 3987458.0, + "min": 1680442.0, + "max": 8571527.0, + "mean": 2406687.5, + "stddev": 804512.4 + }, + "handshakes_per_sec": 473.7, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 7964, + "total": 9106 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 698750.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3011686.0, + "p95": 5945297.5, + "min": 2130020.0, + "max": 10894419.0, + "mean": 3305796.2, + "stddev": 1275684.9 + }, + "handshakes_per_sec": 332.0, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 10382, + "total": 11524 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1115559.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3645719.5, + "p95": 6576949.2, + "min": 2799304.0, + "max": 10740470.0, + "mean": 4009398.3, + "stddev": 1304649.0 + }, + "handshakes_per_sec": 274.3, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 13658, + "total": 14800 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1507647.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2600357.0, + "p95": 2624052.2, + "min": 2577043.0, + "max": 3513792.0, + "mean": 2609606.2, + "stddev": 69785.3 + }, + "handshakes_per_sec": 384.6, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 4006, + "total": 5148 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 454161.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290052.0, + "subtotal_ns": 290052.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50759.0, + "subtotal_ns": 101518.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 42759218.5, + "p95": 43133184.2, + "min": 42264238.0, + "max": 45572388.0, + "mean": 42781685.0, + "stddev": 213012.5 + }, + "handshakes_per_sec": 23.4, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 36065, + "total": 37207 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40235979.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18166.0, + "subtotal_ns": 18166.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20499.0, + "subtotal_ns": 20499.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23926.0, + "subtotal_ns": 23926.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 35785962.5, + "subtotal_ns": 35785962.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2193713.0, + "subtotal_ns": 4387426.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2191795.0, + "p95": 4072287.9, + "min": 1762069.0, + "max": 6779646.0, + "mean": 2462281.0, + "stddev": 778660.7 + }, + "handshakes_per_sec": 456.2, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 8284, + "total": 9810 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 735269.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3104199.5, + "p95": 6039552.1, + "min": 2220591.0, + "max": 10426007.0, + "mean": 3430956.5, + "stddev": 1319087.8 + }, + "handshakes_per_sec": 322.1, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 10702, + "total": 12228 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1152078.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3797871.5, + "p95": 6771489.6, + "min": 2950374.0, + "max": 14257701.0, + "mean": 4161369.2, + "stddev": 1387968.2 + }, + "handshakes_per_sec": 263.3, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 13978, + "total": 15504 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1544166.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2686224.0, + "p95": 2713250.4, + "min": 2659686.0, + "max": 3657509.0, + "mean": 2696117.3, + "stddev": 72525.6 + }, + "handshakes_per_sec": 372.3, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 4329, + "total": 5855 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 490680.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290052.0, + "subtotal_ns": 290052.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50759.0, + "subtotal_ns": 101518.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44022291.0, + "p95": 44387911.8, + "min": 43483010.0, + "max": 46826869.0, + "mean": 44036674.5, + "stddev": 224954.0 + }, + "handshakes_per_sec": 22.7, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 36385, + "total": 37911 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40272498.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29870.0, + "subtotal_ns": 29870.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31907.0, + "subtotal_ns": 31907.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37333.0, + "subtotal_ns": 37333.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 35785962.5, + "subtotal_ns": 35785962.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2193713.0, + "subtotal_ns": 4387426.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2351875.5, + "p95": 4407859.3, + "min": 1922068.0, + "max": 7821936.0, + "mean": 2643856.7, + "stddev": 809449.9 + }, + "handshakes_per_sec": 425.2, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 8764, + "total": 10674 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 783621.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397865.5, + "subtotal_ns": 397865.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119147.0, + "subtotal_ns": 238294.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3217778.5, + "p95": 6144981.5, + "min": 2332089.0, + "max": 12269500.0, + "mean": 3565339.7, + "stddev": 1378730.7 + }, + "handshakes_per_sec": 310.8, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 11182, + "total": 13092 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1200430.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674677.0, + "subtotal_ns": 674677.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189145.5, + "subtotal_ns": 378291.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3872680.5, + "p95": 7210130.8, + "min": 3024240.0, + "max": 11794385.0, + "mean": 4270709.7, + "stddev": 1398614.9 + }, + "handshakes_per_sec": 258.2, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 14458, + "total": 16368 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1592518.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833916.0, + "subtotal_ns": 833916.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305570.0, + "subtotal_ns": 611140.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2820479.0, + "p95": 2846062.3, + "min": 2791183.0, + "max": 3918541.0, + "mean": 2828505.5, + "stddev": 65771.7 + }, + "handshakes_per_sec": 354.5, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 4808, + "total": 6718 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 539032.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290052.0, + "subtotal_ns": 290052.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50759.0, + "subtotal_ns": 101518.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43513600.5, + "p95": 43945152.9, + "min": 42966986.0, + "max": 45977212.0, + "mean": 43532681.0, + "stddev": 264879.3 + }, + "handshakes_per_sec": 23.0, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 36865, + "total": 38775 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40320850.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44185.0, + "subtotal_ns": 44185.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47777.0, + "subtotal_ns": 47777.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55500.0, + "subtotal_ns": 55500.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 35785962.5, + "subtotal_ns": 35785962.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2193713.0, + "subtotal_ns": 4387426.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 537318.0, + "p95": 544733.3, + "min": 536002.0, + "max": 708726.0, + "mean": 539582.1, + "stddev": 11088.2 + }, + "handshakes_per_sec": 1861.1, + "bytes_on_wire": { + "client_to_server": 312, + "server_to_client": 824, + "total": 1136 + }, + "client_hello_bytes": 232, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 386527.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21112.0, + "subtotal_ns": 42224.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46853.0, + "subtotal_ns": 93706.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22519.0, + "subtotal_ns": 22519.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 114039.0, + "subtotal_ns": 228078.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 657290.0, + "p95": 666030.8, + "min": 655373.0, + "max": 870245.0, + "mean": 660148.2, + "stddev": 13660.0 + }, + "handshakes_per_sec": 1521.4, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 1912, + "total": 3408 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 483732.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21112.0, + "subtotal_ns": 42224.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46853.0, + "subtotal_ns": 93706.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22519.0, + "subtotal_ns": 22519.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 114039.0, + "subtotal_ns": 228078.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 799652.0, + "p95": 809598.8, + "min": 797170.0, + "max": 894134.0, + "mean": 801606.0, + "stddev": 5660.0 + }, + "handshakes_per_sec": 1250.5, + "bytes_on_wire": { + "client_to_server": 1529, + "server_to_client": 1945, + "total": 3474 + }, + "client_hello_bytes": 1449, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 614140.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 26908.0, + "subtotal_ns": 53816.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 106261.0, + "subtotal_ns": 212522.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22519.0, + "subtotal_ns": 22519.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 114039.0, + "subtotal_ns": 228078.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 518530.0, + "p95": 527108.8, + "min": 516835.0, + "max": 710337.0, + "mean": 521220.0, + "stddev": 12451.7 + }, + "handshakes_per_sec": 1928.5, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 1880, + "total": 3344 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 347802.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22519.0, + "subtotal_ns": 22519.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 114039.0, + "subtotal_ns": 228078.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 571216.0, + "p95": 581079.8, + "min": 569206.0, + "max": 803263.0, + "mean": 574260.3, + "stddev": 13338.4 + }, + "handshakes_per_sec": 1750.7, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 2360, + "total": 4208 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 396044.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 42964.0, + "subtotal_ns": 42964.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47631.0, + "subtotal_ns": 47631.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54852.0, + "subtotal_ns": 54852.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22519.0, + "subtotal_ns": 22519.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 114039.0, + "subtotal_ns": 228078.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 751800.0, + "p95": 1014012.9, + "min": 685281.0, + "max": 1514396.0, + "mean": 789141.3, + "stddev": 111857.0 + }, + "handshakes_per_sec": 1330.1, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 7930, + "total": 9426 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 526456.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21112.0, + "subtotal_ns": 42224.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46853.0, + "subtotal_ns": 93706.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 157985.0, + "subtotal_ns": 157985.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 67668.0, + "subtotal_ns": 135336.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 942846.5, + "p95": 1318319.6, + "min": 846467.0, + "max": 2202140.0, + "mean": 998892.9, + "stddev": 165619.7 + }, + "handshakes_per_sec": 1060.6, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 10348, + "total": 11844 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 715534.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21112.0, + "subtotal_ns": 42224.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46853.0, + "subtotal_ns": 93706.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 256579.0, + "subtotal_ns": 256579.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 112910.0, + "subtotal_ns": 225820.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1244940.5, + "p95": 1672442.9, + "min": 1132635.0, + "max": 2963569.0, + "mean": 1301196.2, + "stddev": 186583.6 + }, + "handshakes_per_sec": 803.3, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 13624, + "total": 15120 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 969758.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21112.0, + "subtotal_ns": 42224.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46853.0, + "subtotal_ns": 93706.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 348987.0, + "subtotal_ns": 348987.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 193818.0, + "subtotal_ns": 387636.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 610678.0, + "p95": 854215.4, + "min": 543391.0, + "max": 1088634.0, + "mean": 643368.0, + "stddev": 101825.7 + }, + "handshakes_per_sec": 1637.5, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 7898, + "total": 9362 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 390526.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 157985.0, + "subtotal_ns": 157985.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 67668.0, + "subtotal_ns": 135336.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 811920.0, + "p95": 1232152.3, + "min": 705744.0, + "max": 1921620.0, + "mean": 863420.2, + "stddev": 173820.2 + }, + "handshakes_per_sec": 1231.6, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 10316, + "total": 11780 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 579604.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 256579.0, + "subtotal_ns": 256579.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 112910.0, + "subtotal_ns": 225820.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1100931.0, + "p95": 1576239.5, + "min": 991060.0, + "max": 2384066.0, + "mean": 1161894.3, + "stddev": 199520.4 + }, + "handshakes_per_sec": 908.3, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 13592, + "total": 15056 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 833828.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28464.0, + "subtotal_ns": 28464.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31722.0, + "subtotal_ns": 31722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37019.0, + "subtotal_ns": 37019.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 348987.0, + "subtotal_ns": 348987.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 193818.0, + "subtotal_ns": 387636.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 662827.0, + "p95": 899673.1, + "min": 597780.0, + "max": 1298357.0, + "mean": 696983.3, + "stddev": 108646.2 + }, + "handshakes_per_sec": 1508.7, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 8378, + "total": 10226 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 438768.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 42964.0, + "subtotal_ns": 42964.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47631.0, + "subtotal_ns": 47631.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54852.0, + "subtotal_ns": 54852.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 157985.0, + "subtotal_ns": 157985.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 67668.0, + "subtotal_ns": 135336.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 871281.5, + "p95": 1275149.8, + "min": 757947.0, + "max": 1871434.0, + "mean": 921557.0, + "stddev": 174052.5 + }, + "handshakes_per_sec": 1147.7, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 10796, + "total": 12644 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 627846.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 42964.0, + "subtotal_ns": 42964.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47631.0, + "subtotal_ns": 47631.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54852.0, + "subtotal_ns": 54852.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 256579.0, + "subtotal_ns": 256579.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 112910.0, + "subtotal_ns": 225820.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1153218.0, + "p95": 1574762.2, + "min": 1047597.0, + "max": 2084546.0, + "mean": 1204884.2, + "stddev": 178329.1 + }, + "handshakes_per_sec": 867.1, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 14072, + "total": 15920 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 882070.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 42964.0, + "subtotal_ns": 42964.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47631.0, + "subtotal_ns": 47631.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54852.0, + "subtotal_ns": 54852.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 348987.0, + "subtotal_ns": 348987.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 193818.0, + "subtotal_ns": 387636.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/results/thomas-pi-20260703T083302Z.json b/tools/benchmarks/pqc/results/thomas-pi-20260703T083302Z.json new file mode 100644 index 0000000..d232f80 --- /dev/null +++ b/tools/benchmarks/pqc/results/thomas-pi-20260703T083302Z.json @@ -0,0 +1,10555 @@ +{ + "schema_version": "1.0.0", + "tool_version": "0.1.0", + "generated_utc": "2026-07-03T08:54:48Z", + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "host": { + "hostname": "logos", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.12.62+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454602752 + }, + "cpu_features": { + "source": "/proc/cpuinfo", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-03T08:33:03Z", + "timestamp_end_utc": "2026-07-03T08:54:48Z", + "duration_s": 1305, + "governor_requested": "performance", + "governor_before": "ondemand", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.12.62+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52" + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1783067582, + 2400027136, + 54.9, + "0x0" + ], + [ + 1783067582, + 2400020480, + 54.9, + "0x0" + ], + [ + 1783067584, + 2400027136, + 54.9, + "0x0" + ], + [ + 1783067585, + 2400020480, + 57.1, + "0x0" + ], + [ + 1783067586, + 2400020480, + 56.0, + "0x0" + ], + [ + 1783067587, + 2400030464, + 57.6, + "0x0" + ], + [ + 1783067588, + 2400017408, + 57.1, + "0x0" + ], + [ + 1783067589, + 2400027136, + 58.7, + "0x0" + ], + [ + 1783067590, + 2400030464, + 58.7, + "0x0" + ], + [ + 1783067591, + 2400020480, + 58.2, + "0x0" + ], + [ + 1783067592, + 2400023808, + 58.7, + "0x0" + ], + [ + 1783067593, + 2400017408, + 59.3, + "0x0" + ], + [ + 1783067594, + 2400020480, + 58.2, + "0x0" + ], + [ + 1783067595, + 2400027136, + 59.8, + "0x0" + ], + [ + 1783067596, + 2400030464, + 59.8, + "0x0" + ], + [ + 1783067597, + 2400023808, + 60.4, + "0x0" + ], + [ + 1783067598, + 2400020480, + 59.3, + "0x0" + ], + [ + 1783067599, + 2400023808, + 60.4, + "0x0" + ], + [ + 1783067600, + 2400020480, + 58.7, + "0x0" + ], + [ + 1783067601, + 2400023808, + 59.3, + "0x0" + ], + [ + 1783067602, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783067603, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783067604, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783067605, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783067606, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783067607, + 2400033792, + 60.4, + "0x0" + ], + [ + 1783067608, + 2400030464, + 60.9, + "0x0" + ], + [ + 1783067609, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783067610, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783067611, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783067612, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783067613, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783067614, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067615, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783067616, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783067617, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067618, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783067619, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783067620, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783067621, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783067622, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783067623, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783067624, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783067625, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783067626, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783067627, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783067628, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783067629, + 2400023808, + 60.4, + "0x0" + ], + [ + 1783067630, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783067631, + 2400023808, + 59.8, + "0x0" + ], + [ + 1783067632, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783067633, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783067634, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783067635, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067636, + 2400037120, + 62.6, + "0x0" + ], + [ + 1783067637, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067639, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783067640, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783067641, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067642, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067643, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067644, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067645, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783067646, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783067647, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067648, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067649, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067650, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783067651, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783067652, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067653, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783067654, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067655, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783067656, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783067657, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067658, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067659, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067660, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067661, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067662, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067663, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067664, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067665, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067666, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067667, + 2400027136, + 65.9, + "0x0" + ], + [ + 1783067668, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783067669, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783067670, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783067671, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067672, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783067673, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067674, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067675, + 2400037120, + 64.2, + "0x0" + ], + [ + 1783067676, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067677, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783067678, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067679, + 2400037120, + 65.3, + "0x0" + ], + [ + 1783067680, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783067681, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067682, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067683, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067684, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067685, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067686, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067687, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783067688, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783067689, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067690, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783067692, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067693, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067694, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067695, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783067696, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067697, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067698, + 2400030464, + 67.0, + "0x0" + ], + [ + 1783067699, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783067700, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067701, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067702, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067703, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783067704, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067705, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783067706, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783067707, + 2400027136, + 66.4, + "0x0" + ], + [ + 1783067708, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783067709, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067710, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067711, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067712, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783067713, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067714, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783067715, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067716, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783067717, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067718, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783067719, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067720, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783067721, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067722, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783067723, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783067724, + 2400037120, + 63.1, + "0x0" + ], + [ + 1783067725, + 2400037120, + 63.7, + "0x0" + ], + [ + 1783067726, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783067727, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783067728, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067729, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783067730, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067731, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067732, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783067733, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067734, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067735, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067736, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067737, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067738, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067739, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067740, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067741, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067742, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067744, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067745, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067746, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067747, + 2400037120, + 64.2, + "0x0" + ], + [ + 1783067748, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067749, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067750, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067751, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067752, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067753, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067754, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067755, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783067756, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067757, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783067758, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067759, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783067760, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067761, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067762, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067763, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067764, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067765, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783067766, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067767, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783067768, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783067769, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783067770, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783067771, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783067772, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783067773, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783067774, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783067775, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067776, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067777, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067778, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067779, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067780, + 2400027136, + 65.9, + "0x0" + ], + [ + 1783067781, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783067782, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783067783, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067784, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783067785, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067786, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067787, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067788, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067789, + 2400033792, + 67.5, + "0x0" + ], + [ + 1783067790, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783067791, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067792, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067793, + 2400017408, + 67.0, + "0x0" + ], + [ + 1783067794, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783067795, + 2400027136, + 67.0, + "0x0" + ], + [ + 1783067797, + 2400027136, + 66.4, + "0x0" + ], + [ + 1783067798, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783067799, + 2400027136, + 65.9, + "0x0" + ], + [ + 1783067800, + 2400027136, + 67.0, + "0x0" + ], + [ + 1783067801, + 2400023808, + 66.4, + "0x0" + ], + [ + 1783067802, + 2400017408, + 67.0, + "0x0" + ], + [ + 1783067803, + 2400027136, + 67.5, + "0x0" + ], + [ + 1783067804, + 2400030464, + 67.0, + "0x0" + ], + [ + 1783067805, + 2400030464, + 67.5, + "0x0" + ], + [ + 1783067806, + 2400017408, + 68.1, + "0x0" + ], + [ + 1783067807, + 2400030464, + 67.5, + "0x0" + ], + [ + 1783067808, + 2400017408, + 67.5, + "0x0" + ], + [ + 1783067809, + 2400027136, + 67.0, + "0x0" + ], + [ + 1783067810, + 2400033792, + 67.5, + "0x0" + ], + [ + 1783067811, + 2400023808, + 67.5, + "0x0" + ], + [ + 1783067812, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783067813, + 2400023808, + 68.1, + "0x0" + ], + [ + 1783067814, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067815, + 2400030464, + 67.0, + "0x0" + ], + [ + 1783067816, + 2400017408, + 67.0, + "0x0" + ], + [ + 1783067817, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783067818, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783067819, + 2400030464, + 67.0, + "0x0" + ], + [ + 1783067820, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783067821, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783067822, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783067823, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783067824, + 2400023808, + 67.5, + "0x0" + ], + [ + 1783067825, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067826, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067827, + 2400027136, + 67.5, + "0x0" + ], + [ + 1783067828, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783067829, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067830, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067831, + 2400023808, + 66.4, + "0x0" + ], + [ + 1783067832, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067833, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783067834, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783067835, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783067836, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783067837, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783067838, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067839, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067841, + 2400037120, + 65.9, + "0x0" + ], + [ + 1783067842, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067843, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067844, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067845, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067846, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067847, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067848, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783067849, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783067850, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783067851, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783067852, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067853, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067854, + 2400027136, + 66.4, + "0x0" + ], + [ + 1783067855, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067856, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067857, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067858, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067859, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067860, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067861, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783067862, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067863, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067864, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067865, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783067866, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067867, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067868, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783067869, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067870, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067871, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783067872, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067873, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783067874, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067875, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067876, + 2400037120, + 64.2, + "0x0" + ], + [ + 1783067877, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783067878, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067879, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067880, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067881, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067882, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783067883, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067884, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067885, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067886, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067887, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067888, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067889, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783067891, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067892, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067893, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067894, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783067895, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067896, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783067897, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067898, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067899, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783067900, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067901, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067902, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783067903, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067904, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067905, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067906, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067907, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067908, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067909, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067910, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067911, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067912, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067913, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067914, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067915, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067916, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067917, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783067918, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067919, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783067920, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067921, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067922, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783067923, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067924, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783067925, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783067926, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783067927, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067928, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067929, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067930, + 2400037120, + 64.8, + "0x0" + ], + [ + 1783067931, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067932, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067933, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783067934, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783067935, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067936, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783067937, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067938, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067940, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783067941, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067942, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067943, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067944, + 2400037120, + 63.1, + "0x0" + ], + [ + 1783067945, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783067946, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783067947, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783067948, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783067949, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783067950, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783067951, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783067952, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783067953, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783067954, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783067955, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783067956, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783067957, + 2400017408, + 59.8, + "0x0" + ], + [ + 1783067958, + 2400027136, + 59.8, + "0x0" + ], + [ + 1783067959, + 2400017408, + 60.4, + "0x0" + ], + [ + 1783067960, + 2400033792, + 58.7, + "0x0" + ], + [ + 1783067961, + 2400023808, + 59.8, + "0x0" + ], + [ + 1783067962, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783067963, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783067964, + 2400033792, + 59.8, + "0x0" + ], + [ + 1783067965, + 2400020480, + 59.8, + "0x0" + ], + [ + 1783067966, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783067967, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783067968, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783067969, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783067970, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783067971, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783067972, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783067973, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783067974, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783067975, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783067976, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783067977, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783067978, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783067979, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783067980, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783067981, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783067982, + 2400037120, + 63.7, + "0x0" + ], + [ + 1783067983, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067984, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783067985, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783067987, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783067988, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783067989, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783067990, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783067991, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067992, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067993, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783067994, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067995, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783067996, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783067997, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783067998, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783067999, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068000, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783068001, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068002, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068003, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068004, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783068005, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068006, + 2400027136, + 65.9, + "0x0" + ], + [ + 1783068007, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068008, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068009, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068010, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068011, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068012, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068013, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068014, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068015, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068016, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068017, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068018, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068019, + 2400023808, + 66.4, + "0x0" + ], + [ + 1783068020, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783068021, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783068022, + 2400027136, + 66.4, + "0x0" + ], + [ + 1783068023, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068024, + 2400037120, + 67.0, + "0x0" + ], + [ + 1783068025, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068026, + 2400027136, + 68.6, + "0x0" + ], + [ + 1783068027, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068028, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068029, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068030, + 2400023808, + 67.5, + "0x0" + ], + [ + 1783068031, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068032, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068033, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068034, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068036, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068037, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068038, + 2400033792, + 67.5, + "0x0" + ], + [ + 1783068039, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783068040, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068041, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068042, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068043, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068044, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068045, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068046, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068047, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068048, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068049, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068050, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068051, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783068052, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068053, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783068054, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068055, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068056, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068057, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068058, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068059, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068060, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068061, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068062, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068063, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068064, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068065, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068066, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068067, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068068, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068069, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068070, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068071, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068072, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068073, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068074, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068075, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068076, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068077, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068078, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068079, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068080, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068082, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068083, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068084, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068085, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068086, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068087, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068088, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783068089, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068090, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068091, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068092, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068093, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068094, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068095, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068096, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068097, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068098, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068099, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068100, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068101, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068102, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068103, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068104, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068105, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068106, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068107, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068108, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068109, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068110, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783068111, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068112, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068113, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068114, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068115, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068116, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068117, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068118, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783068119, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068120, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068121, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068122, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068123, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068124, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068125, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068126, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068127, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068128, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068129, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783068130, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068131, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783068133, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068134, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068135, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068136, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068137, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068138, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068139, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068140, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068141, + 2400023808, + 66.4, + "0x0" + ], + [ + 1783068142, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068143, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068144, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068145, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068146, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783068147, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068148, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068149, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068150, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068151, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068152, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068153, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068154, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068155, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068156, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068157, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068158, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068159, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068160, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068161, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068162, + 2400017408, + 60.4, + "0x0" + ], + [ + 1783068163, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783068164, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068165, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068166, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068167, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068168, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068169, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068170, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068171, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068172, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068173, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068174, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068175, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068176, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068177, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068178, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068179, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068180, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068181, + 2400030464, + 68.1, + "0x0" + ], + [ + 1783068182, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068183, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783068185, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068186, + 2400023808, + 66.4, + "0x0" + ], + [ + 1783068187, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068188, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068189, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068190, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783068191, + 2400030464, + 68.1, + "0x0" + ], + [ + 1783068192, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068193, + 2400033792, + 67.5, + "0x0" + ], + [ + 1783068194, + 2400030464, + 67.5, + "0x0" + ], + [ + 1783068195, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068196, + 2400027136, + 67.0, + "0x0" + ], + [ + 1783068197, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783068198, + 2400020480, + 68.1, + "0x0" + ], + [ + 1783068199, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068200, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068201, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068202, + 2400030464, + 67.5, + "0x0" + ], + [ + 1783068203, + 2400017408, + 67.0, + "0x0" + ], + [ + 1783068204, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783068205, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068206, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068207, + 2400023808, + 66.4, + "0x0" + ], + [ + 1783068208, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068209, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068210, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068211, + 2400017408, + 67.0, + "0x0" + ], + [ + 1783068212, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068213, + 2400020480, + 67.0, + "0x0" + ], + [ + 1783068214, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068215, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068216, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068217, + 2400017408, + 66.4, + "0x0" + ], + [ + 1783068218, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068219, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068220, + 2400037120, + 67.0, + "0x0" + ], + [ + 1783068221, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068222, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068223, + 2400037120, + 65.9, + "0x0" + ], + [ + 1783068224, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068225, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068226, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783068227, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783068228, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068229, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068230, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068231, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068232, + 2400023808, + 67.0, + "0x0" + ], + [ + 1783068234, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068235, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068236, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068237, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068238, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068239, + 2400033792, + 67.0, + "0x0" + ], + [ + 1783068240, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068241, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068242, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068243, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068244, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068245, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783068246, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783068247, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068248, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068249, + 2400020480, + 66.4, + "0x0" + ], + [ + 1783068250, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783068251, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068252, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068253, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068254, + 2400017408, + 65.9, + "0x0" + ], + [ + 1783068255, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068256, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068257, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068258, + 2400027136, + 65.3, + "0x0" + ], + [ + 1783068259, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068260, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068261, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068262, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068263, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068264, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068265, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068266, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068267, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068268, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068269, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068270, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068271, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068272, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068273, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068274, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068275, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068276, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068277, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068278, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068279, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068281, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068282, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068283, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068284, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068285, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068286, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068287, + 2400033792, + 66.4, + "0x0" + ], + [ + 1783068288, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068289, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068290, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068291, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068292, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068293, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068294, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068295, + 2400033792, + 64.2, + "0x0" + ], + [ + 1783068296, + 2400027136, + 64.8, + "0x0" + ], + [ + 1783068297, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068298, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068299, + 2400030464, + 66.4, + "0x0" + ], + [ + 1783068300, + 2400023808, + 65.9, + "0x0" + ], + [ + 1783068301, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068302, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068303, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068304, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068305, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068306, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068307, + 2400037120, + 65.9, + "0x0" + ], + [ + 1783068308, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068309, + 2400030464, + 65.9, + "0x0" + ], + [ + 1783068310, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068311, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068312, + 2400023808, + 65.3, + "0x0" + ], + [ + 1783068313, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783068314, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068315, + 2400023808, + 64.8, + "0x0" + ], + [ + 1783068316, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068317, + 2400033792, + 65.3, + "0x0" + ], + [ + 1783068318, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068319, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068320, + 2400033792, + 65.9, + "0x0" + ], + [ + 1783068321, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068322, + 2400020480, + 65.3, + "0x0" + ], + [ + 1783068323, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068324, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068325, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068326, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068327, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068329, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068330, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068331, + 2400030464, + 64.2, + "0x0" + ], + [ + 1783068332, + 2400020480, + 64.8, + "0x0" + ], + [ + 1783068333, + 2400030464, + 65.3, + "0x0" + ], + [ + 1783068334, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068335, + 2400017408, + 64.8, + "0x0" + ], + [ + 1783068336, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068337, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068338, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068339, + 2400033792, + 64.8, + "0x0" + ], + [ + 1783068340, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068341, + 2400020480, + 64.2, + "0x0" + ], + [ + 1783068342, + 2400020480, + 65.9, + "0x0" + ], + [ + 1783068343, + 2400017408, + 65.3, + "0x0" + ], + [ + 1783068344, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068345, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068346, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068347, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068348, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783068349, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068350, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068351, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068352, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783068353, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068354, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068355, + 2400027136, + 59.3, + "0x0" + ], + [ + 1783068356, + 2400023808, + 59.8, + "0x0" + ], + [ + 1783068357, + 2400027136, + 59.8, + "0x0" + ], + [ + 1783068358, + 2400033792, + 59.8, + "0x0" + ], + [ + 1783068359, + 2400027136, + 59.3, + "0x0" + ], + [ + 1783068360, + 2400030464, + 60.4, + "0x0" + ], + [ + 1783068361, + 2400023808, + 59.8, + "0x0" + ], + [ + 1783068362, + 2400023808, + 59.3, + "0x0" + ], + [ + 1783068363, + 2400033792, + 60.4, + "0x0" + ], + [ + 1783068364, + 2400020480, + 58.2, + "0x0" + ], + [ + 1783068365, + 2400020480, + 59.8, + "0x0" + ], + [ + 1783068366, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783068367, + 2400023808, + 59.3, + "0x0" + ], + [ + 1783068368, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783068369, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068370, + 2400030464, + 59.8, + "0x0" + ], + [ + 1783068372, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068373, + 2400027136, + 59.8, + "0x0" + ], + [ + 1783068374, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068375, + 2400023808, + 59.3, + "0x0" + ], + [ + 1783068376, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068377, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068378, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783068379, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068380, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783068381, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783068382, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068383, + 2400020480, + 59.8, + "0x0" + ], + [ + 1783068384, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068385, + 2400017408, + 60.9, + "0x0" + ], + [ + 1783068386, + 2400017408, + 60.9, + "0x0" + ], + [ + 1783068387, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068388, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068389, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068390, + 2400037120, + 61.5, + "0x0" + ], + [ + 1783068391, + 2400030464, + 60.9, + "0x0" + ], + [ + 1783068392, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068393, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068394, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068395, + 2400023808, + 59.8, + "0x0" + ], + [ + 1783068396, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783068397, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068398, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068399, + 2400017408, + 60.9, + "0x0" + ], + [ + 1783068400, + 2400020480, + 59.8, + "0x0" + ], + [ + 1783068401, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068402, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068403, + 2400033792, + 60.4, + "0x0" + ], + [ + 1783068404, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068405, + 2400020480, + 60.4, + "0x0" + ], + [ + 1783068406, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068407, + 2400033792, + 58.7, + "0x0" + ], + [ + 1783068408, + 2400023808, + 59.8, + "0x0" + ], + [ + 1783068409, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068410, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068411, + 2400030464, + 59.8, + "0x0" + ], + [ + 1783068412, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783068413, + 2400033792, + 60.4, + "0x0" + ], + [ + 1783068414, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068415, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068416, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068417, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068418, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068419, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068420, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068421, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068422, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068423, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068424, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068426, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068427, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068428, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068429, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068430, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068431, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068432, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068433, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068434, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068435, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068436, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068437, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068438, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068439, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068440, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068441, + 2400030464, + 61.5, + "0x0" + ], + [ + 1783068442, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068443, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068444, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068445, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068446, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068447, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068448, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068449, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068450, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068451, + 2400037120, + 61.5, + "0x0" + ], + [ + 1783068452, + 2400030464, + 64.8, + "0x0" + ], + [ + 1783068453, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068454, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068455, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068456, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068457, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068458, + 2400017408, + 60.9, + "0x0" + ], + [ + 1783068459, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068460, + 2400017408, + 60.9, + "0x0" + ], + [ + 1783068461, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068462, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068463, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068464, + 2400030464, + 61.5, + "0x0" + ], + [ + 1783068465, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068466, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068467, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068468, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068469, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068470, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068471, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068472, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068473, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068474, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068475, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068476, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068477, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068478, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068479, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068480, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068482, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068483, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068484, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068485, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068486, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068487, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068488, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068489, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068490, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068491, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068492, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068493, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068494, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068495, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068496, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068497, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068498, + 2400030464, + 60.9, + "0x0" + ], + [ + 1783068499, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068500, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068501, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068502, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068503, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068504, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068505, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068506, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068507, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068508, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068509, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068510, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068511, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068512, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068513, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068514, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068515, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068516, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068517, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068518, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068519, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068520, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068521, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068522, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068523, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068524, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068525, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068526, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068527, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068528, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068529, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068530, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068532, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068533, + 2400037120, + 63.7, + "0x0" + ], + [ + 1783068534, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068535, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068536, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068537, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068538, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068539, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068540, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068541, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068542, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068543, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068544, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068545, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068546, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068547, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068548, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068549, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068550, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068551, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068552, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068553, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068554, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068555, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068556, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068557, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783068558, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068559, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068560, + 2400030464, + 61.5, + "0x0" + ], + [ + 1783068561, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068562, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068563, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068564, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068565, + 2400030464, + 61.5, + "0x0" + ], + [ + 1783068566, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068567, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068568, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068569, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068570, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068571, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068572, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068573, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068574, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068575, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068577, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068578, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068579, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068580, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068581, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068582, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068583, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068584, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068585, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068586, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068587, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068588, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068589, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068590, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068591, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068592, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068593, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068594, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068595, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068596, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068597, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068598, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068599, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068600, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068601, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068602, + 2400027136, + 60.4, + "0x0" + ], + [ + 1783068603, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068604, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068605, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068606, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068607, + 2400027136, + 60.9, + "0x0" + ], + [ + 1783068608, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068609, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068610, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068611, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068612, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068613, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068614, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068615, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068616, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068617, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068618, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068619, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068620, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068621, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068622, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068623, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068625, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068626, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068627, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068628, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068629, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068630, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068631, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068632, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068633, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068634, + 2400033792, + 61.5, + "0x0" + ], + [ + 1783068635, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068636, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068637, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068638, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068639, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068640, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068641, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068642, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068643, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068644, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068645, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068646, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068647, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068648, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068649, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068650, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068651, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068652, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068653, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068654, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068655, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068656, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068657, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068658, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068659, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068660, + 2400030464, + 61.5, + "0x0" + ], + [ + 1783068661, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068662, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068663, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068664, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068665, + 2400037120, + 62.6, + "0x0" + ], + [ + 1783068666, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068667, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068668, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068669, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068670, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068672, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068673, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068674, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068675, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068676, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068677, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068678, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068679, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068680, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068681, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068682, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068683, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068684, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068685, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068686, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068687, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068688, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068689, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068690, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068691, + 2400023808, + 64.2, + "0x0" + ], + [ + 1783068692, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068693, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068694, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068695, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068696, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068697, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068698, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068699, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068700, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068701, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068702, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068703, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068704, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068705, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068706, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068707, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068708, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068709, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068710, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783068711, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068712, + 2400027136, + 64.2, + "0x0" + ], + [ + 1783068713, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068714, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068715, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068716, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068717, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068718, + 2400017408, + 61.5, + "0x0" + ], + [ + 1783068719, + 2400030464, + 62.6, + "0x0" + ], + [ + 1783068720, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068722, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068723, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068724, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068725, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068726, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068727, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068728, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068729, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068730, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068731, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068732, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068733, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068734, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068735, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068736, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068737, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068738, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068739, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068740, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068741, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068742, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068743, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068744, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068745, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068746, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068747, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068748, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068749, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068750, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068751, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068752, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068753, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068754, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068755, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068756, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068757, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068758, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068759, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068760, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068761, + 2400030464, + 62.0, + "0x0" + ], + [ + 1783068762, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068763, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068764, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068765, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068766, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068767, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068768, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068770, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068771, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068772, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068773, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068774, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068775, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068776, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068777, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068778, + 2400020480, + 60.9, + "0x0" + ], + [ + 1783068779, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068780, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068781, + 2400020480, + 61.5, + "0x0" + ], + [ + 1783068782, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068783, + 2400033792, + 60.9, + "0x0" + ], + [ + 1783068784, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068785, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068786, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068787, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068788, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068789, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068790, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068791, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068792, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068793, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068794, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068795, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068796, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068797, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068798, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068799, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068800, + 2400017408, + 63.7, + "0x0" + ], + [ + 1783068801, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068802, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068803, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068804, + 2400027136, + 61.5, + "0x0" + ], + [ + 1783068805, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068806, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068807, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068808, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068809, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068810, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068811, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068812, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068813, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068814, + 2400030464, + 63.7, + "0x0" + ], + [ + 1783068815, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068817, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068818, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068819, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068820, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068821, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068822, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068823, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068824, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068825, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068826, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068827, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068828, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068829, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068830, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068831, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068832, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068833, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068834, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068835, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068836, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068837, + 2400027136, + 62.0, + "0x0" + ], + [ + 1783068838, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068839, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068840, + 2400023808, + 60.9, + "0x0" + ], + [ + 1783068841, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068842, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068843, + 2400023808, + 61.5, + "0x0" + ], + [ + 1783068844, + 2400027136, + 62.6, + "0x0" + ], + [ + 1783068845, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068846, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068847, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068848, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068849, + 2400033792, + 63.1, + "0x0" + ], + [ + 1783068850, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068851, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068852, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068853, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068854, + 2400023808, + 62.6, + "0x0" + ], + [ + 1783068855, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068856, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068857, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068858, + 2400030464, + 63.1, + "0x0" + ], + [ + 1783068859, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068860, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068861, + 2400020480, + 62.6, + "0x0" + ], + [ + 1783068862, + 2400033792, + 62.6, + "0x0" + ], + [ + 1783068863, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068864, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068865, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068866, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068868, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068869, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068870, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068871, + 2400023808, + 63.7, + "0x0" + ], + [ + 1783068872, + 2400023808, + 62.0, + "0x0" + ], + [ + 1783068873, + 2400027136, + 63.7, + "0x0" + ], + [ + 1783068874, + 2400027136, + 63.1, + "0x0" + ], + [ + 1783068875, + 2400017408, + 62.6, + "0x0" + ], + [ + 1783068876, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068877, + 2400020480, + 62.0, + "0x0" + ], + [ + 1783068878, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068879, + 2400017408, + 63.1, + "0x0" + ], + [ + 1783068880, + 2400023808, + 63.1, + "0x0" + ], + [ + 1783068881, + 2400033792, + 63.7, + "0x0" + ], + [ + 1783068882, + 2400017408, + 62.0, + "0x0" + ], + [ + 1783068883, + 2400033792, + 62.0, + "0x0" + ], + [ + 1783068884, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068885, + 2400017408, + 64.2, + "0x0" + ], + [ + 1783068886, + 2400020480, + 63.7, + "0x0" + ], + [ + 1783068887, + 2400020480, + 63.1, + "0x0" + ], + [ + 1783068888, + 2400017408, + 63.1, + "0x0" + ] + ], + "temp_c": { + "min": 54.9, + "max": 68.6, + "mean": 63.588, + "samples": 1281 + }, + "arm_clock_hz": { + "min": 2400017408, + "max": 2400037120, + "mean": 2400025901.165, + "samples": 1281, + "spread_frac": 0.0 + }, + "throttling_detected": false + }, + "warnings": [], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 880, + "timed_iters": 4400, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56821.38, + "samples": 22000, + "median": 56703.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 56667.0, + "q3": 56759.0, + "min": 56592.0, + "max": 583274.0, + "mean": 56842.29, + "stddev": 4792.54, + "ops_per_sec": 17635.75, + "per_rep_median": [ + 56704.0, + 56685.0, + 56685.0, + 56703.0, + 56704.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 302, + "timed_iters": 1511, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 165478.64, + "samples": 7555, + "median": 165388.0, + "mad": 92.0, + "iqr": 185.0, + "q1": 165295.0, + "q3": 165480.0, + "min": 164443.0, + "max": 188665.0, + "mean": 165460.79, + "stddev": 780.64, + "ops_per_sec": 6046.39, + "per_rep_median": [ + 165388.0, + 165388.0, + 165351.0, + 165406.0, + 165388.0 + ] + } + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2720, + "timed_iters": 13601, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18380.75, + "samples": 68005, + "median": 18259.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 18241.0, + "q3": 18278.0, + "min": 18166.0, + "max": 162944.0, + "mean": 18345.51, + "stddev": 788.54, + "ops_per_sec": 54767.51, + "per_rep_median": [ + 18278.0, + 18259.0, + 18259.0, + 18259.0, + 18259.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2425, + "timed_iters": 12126, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20616.85, + "samples": 60630, + "median": 20574.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 20574.0, + "q3": 20593.0, + "min": 20500.0, + "max": 51463.0, + "mean": 20600.87, + "stddev": 309.87, + "ops_per_sec": 48605.04, + "per_rep_median": [ + 20574.0, + 20574.0, + 20574.0, + 20592.0, + 20574.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2083, + "timed_iters": 10416, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24001.4, + "samples": 52080, + "median": 23981.0, + "mad": 18.0, + "iqr": 36.0, + "q1": 23963.0, + "q3": 23999.0, + "min": 23907.0, + "max": 144851.0, + "mean": 24002.29, + "stddev": 669.57, + "ops_per_sec": 41699.68, + "per_rep_median": [ + 23981.0, + 23981.0, + 23981.0, + 23981.0, + 23981.0 + ] + } + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1645, + "timed_iters": 8225, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30394.22, + "samples": 41125, + "median": 30111.0, + "mad": 36.0, + "iqr": 56.0, + "q1": 30092.0, + "q3": 30148.0, + "min": 29981.0, + "max": 54722.0, + "mean": 30282.52, + "stddev": 652.91, + "ops_per_sec": 33210.45, + "per_rep_median": [ + 30111.0, + 30111.0, + 30111.0, + 30111.0, + 30129.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1555, + "timed_iters": 7776, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32150.86, + "samples": 38880, + "median": 32130.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 32111.0, + "q3": 32148.0, + "min": 32036.0, + "max": 55166.0, + "mean": 32169.3, + "stddev": 435.08, + "ops_per_sec": 31123.56, + "per_rep_median": [ + 32130.0, + 32129.0, + 32148.0, + 32130.0, + 32130.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1336, + "timed_iters": 6681, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37419.71, + "samples": 33405, + "median": 37444.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 37407.0, + "q3": 37481.0, + "min": 37314.0, + "max": 66703.0, + "mean": 37474.04, + "stddev": 431.24, + "ops_per_sec": 26706.55, + "per_rep_median": [ + 37407.0, + 37407.0, + 37407.0, + 37499.0, + 37482.0 + ] + } + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1127, + "timed_iters": 5633, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44380.01, + "samples": 28165, + "median": 44000.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 43981.0, + "q3": 44055.0, + "min": 43833.0, + "max": 67425.0, + "mean": 44294.47, + "stddev": 808.18, + "ops_per_sec": 22727.27, + "per_rep_median": [ + 44018.0, + 44000.0, + 44000.0, + 44000.0, + 44000.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1048, + "timed_iters": 5242, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47687.6, + "samples": 26210, + "median": 47666.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 47630.0, + "q3": 47685.0, + "min": 47537.0, + "max": 69685.0, + "mean": 47712.22, + "stddev": 544.58, + "ops_per_sec": 20979.31, + "per_rep_median": [ + 47648.0, + 47666.0, + 47666.0, + 47648.0, + 47666.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 902, + "timed_iters": 4512, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55408.8, + "samples": 22560, + "median": 55397.5, + "mad": 27.0, + "iqr": 55.0, + "q1": 55370.0, + "q3": 55425.0, + "min": 55277.0, + "max": 87925.0, + "mean": 55440.66, + "stddev": 515.33, + "ops_per_sec": 18051.36, + "per_rep_median": [ + 55407.0, + 55389.0, + 55407.0, + 55389.0, + 55389.0 + ] + } + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "backend": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 149371322.0, + "samples": 150, + "median": 115249003.5, + "mad": 36796785.0, + "iqr": 106239666.25, + "q1": 78653764.5, + "q3": 184893430.75, + "min": 78381221.0, + "max": 539477289.0, + "mean": 164787465.96, + "stddev": 103328703.52, + "ops_per_sec": 8.68, + "per_rep_median": [ + 114133760.0, + 149236231.0, + 149124937.0, + 113855127.0, + 131596140.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 715, + "timed_iters": 3577, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 69892.13, + "samples": 17885, + "median": 65981.0, + "mad": 352.0, + "iqr": 5666.0, + "q1": 65778.0, + "q3": 71444.0, + "min": 65407.0, + "max": 126851.0, + "mean": 70257.71, + "stddev": 6648.29, + "ops_per_sec": 15155.88, + "per_rep_median": [ + 66037.0, + 65999.0, + 65925.0, + 65888.0, + 65888.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25698623.67, + "samples": 150, + "median": 25693951.5, + "mad": 2083.0, + "iqr": 4974.0, + "q1": 25692257.75, + "q3": 25697231.75, + "min": 25688962.0, + "max": 25824796.0, + "mean": 25699658.96, + "stddev": 17940.68, + "ops_per_sec": 38.92, + "per_rep_median": [ + 25693556.0, + 25693861.0, + 25694527.0, + 25694072.5, + 25693700.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 231602876.0, + "samples": 150, + "median": 455461324.5, + "mad": 223119813.5, + "iqr": 446011389.5, + "q1": 232758897.5, + "q3": 678770287.0, + "min": 231433861.0, + "max": 2691681812.0, + "mean": 539165732.28, + "stddev": 362514042.24, + "ops_per_sec": 2.2, + "per_rep_median": [ + 343405113.0, + 399557004.0, + 567459320.0, + 399774096.5, + 455434836.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 371, + "timed_iters": 1857, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 134646.82, + "samples": 9285, + "median": 127498.0, + "mad": 11203.0, + "iqr": 32833.0, + "q1": 116388.0, + "q3": 149221.0, + "min": 115666.0, + "max": 353903.0, + "mean": 135978.39, + "stddev": 24272.88, + "ops_per_sec": 7843.26, + "per_rep_median": [ + 127517.0, + 127498.0, + 127443.0, + 127498.0, + 127498.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 59416704.0, + "samples": 150, + "median": 58761274.0, + "mad": 279215.5, + "iqr": 538227.0, + "q1": 58480809.75, + "q3": 59019036.75, + "min": 58015303.0, + "max": 59502719.0, + "mean": 58761278.54, + "stddev": 416995.73, + "ops_per_sec": 17.02, + "per_rep_median": [ + 59131558.5, + 58749994.0, + 58751760.5, + 58804635.0, + 58751697.5 + ] + } + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 229628386.0, + "samples": 150, + "median": 228812215.0, + "mad": 132072.0, + "iqr": 666878.5, + "q1": 228710043.25, + "q3": 229376921.75, + "min": 228617004.0, + "max": 230640533.0, + "mean": 229043616.09, + "stddev": 462684.12, + "ops_per_sec": 4.37, + "per_rep_median": [ + 228868387.0, + 228816259.0, + 228774956.0, + 228817794.0, + 228798995.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 370, + "timed_iters": 1851, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 135092.18, + "samples": 9255, + "median": 127202.0, + "mad": 11167.0, + "iqr": 32629.0, + "q1": 116147.0, + "q3": 148776.0, + "min": 115350.0, + "max": 377477.0, + "mean": 135573.02, + "stddev": 24351.54, + "ops_per_sec": 7861.51, + "per_rep_median": [ + 127221.0, + 127017.0, + 127109.0, + 127239.0, + 127516.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58633230.0, + "samples": 150, + "median": 58508297.0, + "mad": 59764.5, + "iqr": 130316.5, + "q1": 58470755.0, + "q3": 58601071.5, + "min": 58381835.0, + "max": 58770753.0, + "mean": 58537198.68, + "stddev": 88887.36, + "ops_per_sec": 17.09, + "per_rep_median": [ + 58495295.5, + 58524033.0, + 58501558.5, + 58524092.5, + 58531136.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1597176322.0, + "samples": 150, + "median": 1003847976.0, + "mad": 295231169.5, + "iqr": 808974887.75, + "q1": 490068049.25, + "q3": 1299042937.0, + "min": 414411190.0, + "max": 5136737057.0, + "mean": 1095087429.08, + "stddev": 822343843.56, + "ops_per_sec": 1.0, + "per_rep_median": [ + 711306661.0, + 1004868326.0, + 711779533.5, + 1005173600.0, + 1004750792.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 199, + "timed_iters": 994, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 251627.58, + "samples": 4970, + "median": 228292.5, + "mad": 20258.0, + "iqr": 67230.25, + "q1": 208311.0, + "q3": 275541.25, + "min": 207496.0, + "max": 633879.0, + "mean": 248607.19, + "stddev": 47413.58, + "ops_per_sec": 4380.35, + "per_rep_median": [ + 225413.0, + 241764.0, + 225792.5, + 241867.0, + 230200.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 112533936.0, + "samples": 150, + "median": 112705007.0, + "mad": 238941.5, + "iqr": 467257.5, + "q1": 112472246.75, + "q3": 112939504.25, + "min": 111257795.0, + "max": 114091065.0, + "mean": 112691585.63, + "stddev": 637901.42, + "ops_per_sec": 8.87, + "per_rep_median": [ + 112707475.0, + 112763593.5, + 112877994.5, + 112682934.5, + 112728379.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1914830437.0, + "samples": 150, + "median": 718615836.5, + "mad": 300150384.5, + "iqr": 1196597505.5, + "q1": 419837405.25, + "q3": 1616434910.75, + "min": 417972396.0, + "max": 4005618372.0, + "mean": 1169497634.85, + "stddev": 842327416.06, + "ops_per_sec": 1.39, + "per_rep_median": [ + 1017433380.5, + 717557250.0, + 866842231.5, + 717778896.5, + 717346155.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 136, + "timed_iters": 681, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 366936.25, + "samples": 3405, + "median": 356956.0, + "mad": 15111.0, + "iqr": 44536.0, + "q1": 342031.0, + "q3": 386567.0, + "min": 340956.0, + "max": 620635.0, + "mean": 369059.93, + "stddev": 33227.19, + "ops_per_sec": 2801.47, + "per_rep_median": [ + 357085.0, + 356918.0, + 356993.0, + 356956.0, + 356937.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 109259358.0, + "samples": 150, + "median": 109157121.5, + "mad": 350064.0, + "iqr": 749869.0, + "q1": 108728896.5, + "q3": 109478765.5, + "min": 107749627.0, + "max": 110193023.0, + "mean": 109057856.1, + "stddev": 513405.27, + "ops_per_sec": 9.16, + "per_rep_median": [ + 109044695.0, + 109389088.5, + 109204801.5, + 108832779.0, + 109093110.0 + ] + } + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1102894437.0, + "samples": 150, + "median": 777508771.5, + "mad": 329836939.5, + "iqr": 983261101.25, + "q1": 448454510.25, + "q3": 1431715611.5, + "min": 447044301.0, + "max": 6016750933.0, + "mean": 1146751617.95, + "stddev": 848752866.85, + "ops_per_sec": 1.29, + "per_rep_median": [ + 612416324.0, + 939166423.5, + 1103809577.0, + 939542028.5, + 1103020963.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 185, + "timed_iters": 927, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 269818.5, + "samples": 4635, + "median": 261031.0, + "mad": 16277.0, + "iqr": 48035.5, + "q1": 244920.5, + "q3": 292956.0, + "min": 243679.0, + "max": 556580.0, + "mean": 273080.82, + "stddev": 35003.23, + "ops_per_sec": 3830.96, + "per_rep_median": [ + 260735.0, + 260828.0, + 261032.0, + 261087.0, + 261254.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 137769769.0, + "samples": 150, + "median": 136258092.0, + "mad": 212415.5, + "iqr": 460537.5, + "q1": 136057255.0, + "q3": 136517792.5, + "min": 136008578.0, + "max": 137862094.0, + "mean": 136505816.17, + "stddev": 600627.1, + "ops_per_sec": 7.34, + "per_rep_median": [ + 136059509.0, + 136438496.0, + 136137162.0, + 136482827.0, + 136273918.5 + ] + } + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 64, + "timed_iters": 318, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 787361.44, + "samples": 1590, + "median": 785649.0, + "mad": 223.0, + "iqr": 592.75, + "q1": 785464.0, + "q3": 786056.75, + "min": 784649.0, + "max": 869851.0, + "mean": 786206.89, + "stddev": 3121.58, + "ops_per_sec": 1272.83, + "per_rep_median": [ + 785668.0, + 785649.0, + 785621.5, + 785649.0, + 785612.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 54, + "timed_iters": 270, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 926097.03, + "samples": 1350, + "median": 925498.0, + "mad": 259.0, + "iqr": 631.0, + "q1": 925312.0, + "q3": 925943.0, + "min": 923868.0, + "max": 1010256.0, + "mean": 926021.98, + "stddev": 3626.63, + "ops_per_sec": 1080.5, + "per_rep_median": [ + 925461.0, + 925507.0, + 925535.0, + 925480.0, + 925535.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 277, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 902612.86, + "samples": 1385, + "median": 903387.0, + "mad": 796.0, + "iqr": 1555.0, + "q1": 902313.0, + "q3": 903868.0, + "min": 901666.0, + "max": 987626.0, + "mean": 903865.82, + "stddev": 3854.96, + "ops_per_sec": 1106.95, + "per_rep_median": [ + 903461.0, + 903332.0, + 902239.0, + 903387.0, + 903443.0 + ] + } + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 30, + "timed_iters": 148, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1693776.61, + "samples": 740, + "median": 1691638.0, + "mad": 1537.5, + "iqr": 2671.5, + "q1": 1689883.5, + "q3": 1692555.0, + "min": 1689073.0, + "max": 1771424.0, + "mean": 1691958.13, + "stddev": 4555.06, + "ops_per_sec": 591.14, + "per_rep_median": [ + 1691434.5, + 1691814.0, + 1692018.0, + 1691656.5, + 1691647.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 26, + "timed_iters": 130, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1929833.48, + "samples": 650, + "median": 1929549.0, + "mad": 944.5, + "iqr": 1977.25, + "q1": 1928771.25, + "q3": 1930748.5, + "min": 1925883.0, + "max": 2004992.0, + "mean": 1930641.86, + "stddev": 6547.32, + "ops_per_sec": 518.26, + "per_rep_median": [ + 1929614.5, + 1929364.5, + 1929327.5, + 1930021.5, + 1929494.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1886064.42, + "samples": 665, + "median": 1885496.0, + "mad": 815.0, + "iqr": 1925.0, + "q1": 1884273.0, + "q3": 1886198.0, + "min": 1881403.0, + "max": 1962567.0, + "mean": 1885601.3, + "stddev": 3467.5, + "ops_per_sec": 530.36, + "per_rep_median": [ + 1885514.0, + 1885754.0, + 1885606.0, + 1885476.0, + 1885180.0 + ] + } + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 81, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3077352.53, + "samples": 405, + "median": 3073562.0, + "mad": 1685.0, + "iqr": 3333.0, + "q1": 3072043.0, + "q3": 3075376.0, + "min": 3068431.0, + "max": 3155300.0, + "mean": 3075318.58, + "stddev": 10301.66, + "ops_per_sec": 325.36, + "per_rep_median": [ + 3074636.0, + 3072876.0, + 3073691.0, + 3073746.0, + 3073043.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3469969.73, + "samples": 360, + "median": 3469136.0, + "mad": 1046.0, + "iqr": 2398.0, + "q1": 3468362.5, + "q3": 3470760.5, + "min": 3464868.0, + "max": 3566828.0, + "mean": 3470431.32, + "stddev": 7904.11, + "ops_per_sec": 288.26, + "per_rep_median": [ + 3469173.0, + 3469136.0, + 3469386.0, + 3469061.0, + 3468987.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3414499.27, + "samples": 365, + "median": 3413720.0, + "mad": 1149.0, + "iqr": 2260.0, + "q1": 3412701.0, + "q3": 3414961.0, + "min": 3409998.0, + "max": 3524607.0, + "mean": 3415818.0, + "stddev": 12413.14, + "ops_per_sec": 292.94, + "per_rep_median": [ + 3415498.0, + 3413498.0, + 3413498.0, + 3414276.0, + 3413146.0 + ] + } + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "backend": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 860, + "timed_iters": 4301, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58132.41, + "samples": 21505, + "median": 57999.0, + "mad": 36.0, + "iqr": 56.0, + "q1": 57980.0, + "q3": 58036.0, + "min": 57906.0, + "max": 98239.0, + "mean": 58064.55, + "stddev": 627.5, + "ops_per_sec": 17241.68, + "per_rep_median": [ + 57998.0, + 57999.0, + 57999.0, + 57981.0, + 57999.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 864, + "timed_iters": 4320, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57876.1, + "samples": 21600, + "median": 57647.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 57628.0, + "q3": 57683.0, + "min": 57554.0, + "max": 89183.0, + "mean": 57712.79, + "stddev": 584.84, + "ops_per_sec": 17346.96, + "per_rep_median": [ + 57656.0, + 57665.0, + 57647.0, + 57647.0, + 57647.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 350, + "timed_iters": 1748, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 142992.89, + "samples": 8740, + "median": 142756.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 142701.0, + "q3": 142793.0, + "min": 142422.0, + "max": 178218.0, + "mean": 142870.78, + "stddev": 902.37, + "ops_per_sec": 7004.96, + "per_rep_median": [ + 142811.0, + 142756.0, + 142756.0, + 142737.0, + 142701.0 + ] + } + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 465, + "timed_iters": 2326, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107497.1, + "samples": 11630, + "median": 107516.0, + "mad": 630.0, + "iqr": 1290.75, + "q1": 106887.0, + "q3": 108177.75, + "min": 104720.0, + "max": 192014.0, + "mean": 107595.65, + "stddev": 1345.31, + "ops_per_sec": 9300.94, + "per_rep_median": [ + 107340.0, + 107480.0, + 107590.0, + 107535.0, + 107701.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 95, + "timed_iters": 477, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 524426.3, + "samples": 2385, + "median": 399640.0, + "mad": 181626.0, + "iqr": 344696.0, + "q1": 297216.0, + "q3": 641912.0, + "min": 215902.0, + "max": 2292837.0, + "mean": 509958.18, + "stddev": 330983.88, + "ops_per_sec": 2502.25, + "per_rep_median": [ + 379584.0, + 400510.0, + 399195.0, + 460564.0, + 398177.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 419, + "timed_iters": 2093, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 119456.44, + "samples": 10465, + "median": 119405.0, + "mad": 167.0, + "iqr": 981.0, + "q1": 119276.0, + "q3": 120257.0, + "min": 118923.0, + "max": 146793.0, + "mean": 119713.37, + "stddev": 901.01, + "ops_per_sec": 8374.86, + "per_rep_median": [ + 119293.0, + 119331.0, + 119349.0, + 119572.0, + 120331.0 + ] + } + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 261, + "timed_iters": 1304, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 191680.1, + "samples": 6520, + "median": 191292.0, + "mad": 574.0, + "iqr": 1722.0, + "q1": 190848.0, + "q3": 192570.0, + "min": 189329.0, + "max": 222847.0, + "mean": 191728.94, + "stddev": 1512.23, + "ops_per_sec": 5227.61, + "per_rep_median": [ + 191311.0, + 191366.0, + 191199.0, + 191644.0, + 191200.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 45, + "timed_iters": 225, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1109475.81, + "samples": 1125, + "median": 675188.0, + "mad": 274939.0, + "iqr": 625597.0, + "q1": 431139.0, + "q3": 1056736.0, + "min": 320141.0, + "max": 5348103.0, + "mean": 832616.24, + "stddev": 578221.86, + "ops_per_sec": 1481.07, + "per_rep_median": [ + 703577.0, + 645856.0, + 705484.0, + 702854.0, + 597172.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 263, + "timed_iters": 1314, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 190190.38, + "samples": 6570, + "median": 189107.0, + "mad": 334.0, + "iqr": 2018.0, + "q1": 188866.0, + "q3": 190884.0, + "min": 188403.0, + "max": 207810.0, + "mean": 189723.72, + "stddev": 1228.97, + "ops_per_sec": 5288.01, + "per_rep_median": [ + 188959.0, + 188922.0, + 190680.5, + 189088.0, + 188978.0 + ] + } + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 173, + "timed_iters": 865, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 289000.83, + "samples": 4325, + "median": 288457.0, + "mad": 1296.0, + "iqr": 3204.0, + "q1": 287438.0, + "q3": 290642.0, + "min": 284309.0, + "max": 331029.0, + "mean": 289092.69, + "stddev": 2542.51, + "ops_per_sec": 3466.72, + "per_rep_median": [ + 288457.0, + 288457.0, + 288272.0, + 288512.0, + 288624.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 48, + "timed_iters": 240, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1040036.48, + "samples": 1200, + "median": 835648.0, + "mad": 346899.5, + "iqr": 718516.25, + "q1": 505373.25, + "q3": 1223889.5, + "min": 484415.0, + "max": 6525520.0, + "mean": 1042901.71, + "stddev": 654099.86, + "ops_per_sec": 1196.68, + "per_rep_median": [ + 833815.0, + 835240.5, + 873656.0, + 833111.0, + 838777.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 163, + "timed_iters": 817, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 306058.04, + "samples": 4085, + "median": 305438.0, + "mad": 537.0, + "iqr": 2740.0, + "q1": 304993.0, + "q3": 307733.0, + "min": 304419.0, + "max": 365659.0, + "mean": 306354.63, + "stddev": 2344.41, + "ops_per_sec": 3273.99, + "per_rep_median": [ + 305196.0, + 305308.0, + 305512.0, + 305789.0, + 305197.0 + ] + } + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10033553.33, + "samples": 150, + "median": 9191136.5, + "mad": 1410144.0, + "iqr": 2978391.5, + "q1": 7787561.25, + "q3": 10765952.75, + "min": 7266930.0, + "max": 21578924.0, + "mean": 9760344.21, + "stddev": 2525850.1, + "ops_per_sec": 108.8, + "per_rep_median": [ + 8657472.5, + 9196812.0, + 9319235.5, + 8548567.5, + 9589757.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 169, + "timed_iters": 847, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 295100.99, + "samples": 4235, + "median": 293882.0, + "mad": 2223.0, + "iqr": 4185.0, + "q1": 292346.0, + "q3": 296531.0, + "min": 282401.0, + "max": 417768.0, + "mean": 294280.61, + "stddev": 4090.8, + "ops_per_sec": 3402.73, + "per_rep_median": [ + 293845.0, + 294049.0, + 293771.0, + 293957.0, + 293790.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 977, + "timed_iters": 4886, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 51169.83, + "samples": 24430, + "median": 50813.0, + "mad": 56.0, + "iqr": 130.0, + "q1": 50758.0, + "q3": 50888.0, + "min": 50592.0, + "max": 66962.0, + "mean": 50882.92, + "stddev": 370.45, + "ops_per_sec": 19680.0, + "per_rep_median": [ + 51091.0, + 50814.0, + 50758.0, + 50758.0, + 50832.0 + ] + } + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 27501759.33, + "samples": 150, + "median": 25124176.0, + "mad": 1845171.5, + "iqr": 4900274.5, + "q1": 23682319.75, + "q3": 28582594.25, + "min": 22842783.0, + "max": 72604833.0, + "mean": 27507265.31, + "stddev": 6791425.16, + "ops_per_sec": 39.8, + "per_rep_median": [ + 24884172.5, + 24703380.5, + 25769328.5, + 25283709.5, + 24489709.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 86, + "timed_iters": 428, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 584104.41, + "samples": 2140, + "median": 583542.0, + "mad": 3018.0, + "iqr": 5781.75, + "q1": 580358.0, + "q3": 586139.75, + "min": 569506.0, + "max": 645745.0, + "mean": 583465.38, + "stddev": 4894.09, + "ops_per_sec": 1713.67, + "per_rep_median": [ + 583653.0, + 583588.5, + 583367.0, + 583089.0, + 583737.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 497, + "timed_iters": 2486, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100568.44, + "samples": 12430, + "median": 99794.0, + "mad": 130.0, + "iqr": 277.0, + "q1": 99665.0, + "q3": 99942.0, + "min": 99276.0, + "max": 131034.0, + "mean": 99885.88, + "stddev": 617.0, + "ops_per_sec": 10020.64, + "per_rep_median": [ + 100183.0, + 99868.0, + 99794.0, + 99720.0, + 99554.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 161, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1557619.68, + "samples": 805, + "median": 1549706.0, + "mad": 4148.0, + "iqr": 13259.0, + "q1": 1539021.0, + "q3": 1552280.0, + "min": 1535169.0, + "max": 1646130.0, + "mean": 1548320.66, + "stddev": 9031.23, + "ops_per_sec": 645.28, + "per_rep_median": [ + 1548113.0, + 1551539.0, + 1546095.0, + 1546892.0, + 1539817.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 36134076.0, + "samples": 150, + "median": 36068215.0, + "mad": 79516.5, + "iqr": 159510.5, + "q1": 35979587.5, + "q3": 36139098.0, + "min": 35807730.0, + "max": 36327237.0, + "mean": 36055134.25, + "stddev": 102056.02, + "ops_per_sec": 27.73, + "per_rep_median": [ + 36135510.5, + 36150620.5, + 36067983.0, + 35992587.0, + 35933486.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 23, + "timed_iters": 115, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2173953.53, + "samples": 575, + "median": 2175525.0, + "mad": 7500.0, + "iqr": 20832.5, + "q1": 2168081.0, + "q3": 2188913.5, + "min": 2165395.0, + "max": 2266671.0, + "mean": 2178043.17, + "stddev": 10418.97, + "ops_per_sec": 459.66, + "per_rep_median": [ + 2179803.0, + 2176414.0, + 2175303.0, + 2169877.0, + 2175525.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100999794.0, + "samples": 150, + "median": 100143137.5, + "mad": 108145.5, + "iqr": 235702.75, + "q1": 100045771.25, + "q3": 100281474.0, + "min": 99866071.0, + "max": 101171475.0, + "mean": 100259261.69, + "stddev": 334118.47, + "ops_per_sec": 9.99, + "per_rep_median": [ + 100886064.0, + 100193308.5, + 100046494.0, + 100062419.0, + 100072915.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 761303060.0, + "samples": 150, + "median": 757564124.0, + "mad": 959986.0, + "iqr": 3322912.25, + "q1": 756729319.0, + "q3": 760052231.25, + "min": 755662966.0, + "max": 761881258.0, + "mean": 758282709.64, + "stddev": 1813535.28, + "ops_per_sec": 1.32, + "per_rep_median": [ + 760648655.0, + 759578397.0, + 756889087.5, + 756668700.5, + 758108414.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 69, + "timed_iters": 343, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 727876.22, + "samples": 1715, + "median": 725631.0, + "mad": 2555.0, + "iqr": 7239.0, + "q1": 724780.0, + "q3": 732019.0, + "min": 723001.0, + "max": 772816.0, + "mean": 727814.9, + "stddev": 4085.92, + "ops_per_sec": 1378.11, + "per_rep_median": [ + 725020.0, + 724297.0, + 728520.0, + 726891.0, + 724853.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 21, + "timed_iters": 107, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2327687.4, + "samples": 535, + "median": 2325501.0, + "mad": 1907.0, + "iqr": 2889.0, + "q1": 2324982.5, + "q3": 2327871.5, + "min": 2314686.0, + "max": 2366796.0, + "mean": 2326015.19, + "stddev": 4195.07, + "ops_per_sec": 430.01, + "per_rep_median": [ + 2327279.0, + 2325334.0, + 2325353.0, + 2325371.0, + 2328057.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 62707492.0, + "samples": 150, + "median": 62673057.0, + "mad": 39675.5, + "iqr": 77531.5, + "q1": 62637894.5, + "q3": 62715426.0, + "min": 62491828.0, + "max": 62819877.0, + "mean": 62674319.02, + "stddev": 54215.74, + "ops_per_sec": 15.96, + "per_rep_median": [ + 62660140.5, + 62641900.0, + 62696277.0, + 62681193.5, + 62685526.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3353086.6, + "samples": 375, + "median": 3354144.0, + "mad": 3277.0, + "iqr": 10517.0, + "q1": 3346570.0, + "q3": 3357087.0, + "min": 3343422.0, + "max": 3428753.0, + "mean": 3352856.61, + "stddev": 7123.95, + "ops_per_sec": 298.14, + "per_rep_median": [ + 3353421.0, + 3351699.0, + 3354921.0, + 3355328.0, + 3355310.0 + ] + } + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "backend": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 39, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6351993.43, + "samples": 195, + "median": 6323036.0, + "mad": 14055.0, + "iqr": 31832.5, + "q1": 6313870.0, + "q3": 6345702.5, + "min": 6300667.0, + "max": 6437793.0, + "mean": 6330559.97, + "stddev": 20830.89, + "ops_per_sec": 158.15, + "per_rep_median": [ + 6329666.0, + 6330462.0, + 6323036.0, + 6325833.0, + 6318833.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 132590028.0, + "samples": 150, + "median": 131744724.5, + "mad": 128036.5, + "iqr": 257930.5, + "q1": 131625784.0, + "q3": 131883714.5, + "min": 130868443.0, + "max": 132826170.0, + "mean": 131842874.47, + "stddev": 377287.19, + "ops_per_sec": 7.59, + "per_rep_median": [ + 132662063.0, + 131624657.5, + 131748854.5, + 131740103.5, + 131660777.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3430747.27, + "samples": 365, + "median": 3436771.0, + "mad": 13295.0, + "iqr": 28054.0, + "q1": 3421697.0, + "q3": 3449751.0, + "min": 3418327.0, + "max": 3498732.0, + "mean": 3435927.28, + "stddev": 13321.44, + "ops_per_sec": 290.97, + "per_rep_median": [ + 3437326.0, + 3431456.0, + 3438178.0, + 3436715.0, + 3435437.0 + ] + } + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1322645.0, + "p95": 1333301.1, + "min": 1315969.0, + "max": 1712960.0, + "mean": 1326645.6, + "stddev": 25187.9 + }, + "handshakes_per_sec": 756.1, + "bytes_on_wire": { + "client_to_server": 382, + "server_to_client": 1189, + "total": 1571 + }, + "client_hello_bytes": 302, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2671761.0, + "p95": 4364522.8, + "min": 2243113.0, + "max": 8307099.0, + "mean": 2935671.5, + "stddev": 785010.2 + }, + "handshakes_per_sec": 374.3, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 8294, + "total": 9852 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3575924.5, + "p95": 6792905.7, + "min": 2688584.0, + "max": 11448451.0, + "mean": 3939511.0, + "stddev": 1343847.6 + }, + "handshakes_per_sec": 279.6, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 10712, + "total": 12270 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4221002.0, + "p95": 7980916.0, + "min": 3373716.0, + "max": 13873152.0, + "mean": 4648594.0, + "stddev": 1481365.8 + }, + "handshakes_per_sec": 236.9, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 13988, + "total": 15546 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3156573.0, + "p95": 3187115.5, + "min": 3131648.0, + "max": 4184252.0, + "mean": 3166998.6, + "stddev": 78135.1 + }, + "handshakes_per_sec": 316.8, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 4341, + "total": 5899 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43805065.5, + "p95": 44166974.5, + "min": 43320134.0, + "max": 44602121.0, + "mean": 43825783.2, + "stddev": 183763.5 + }, + "handshakes_per_sec": 22.8, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 36394, + "total": 37952 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2735731.0, + "p95": 4603223.0, + "min": 2288241.0, + "max": 7109812.0, + "mean": 3039276.4, + "stddev": 784966.2 + }, + "handshakes_per_sec": 365.5, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 8327, + "total": 9918 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3617682.0, + "p95": 6555723.7, + "min": 2737156.0, + "max": 10958144.0, + "mean": 3953612.9, + "stddev": 1355995.7 + }, + "handshakes_per_sec": 276.4, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 10745, + "total": 12336 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4258740.0, + "p95": 7200016.2, + "min": 3411658.0, + "max": 12621308.0, + "mean": 4597842.9, + "stddev": 1324560.9 + }, + "handshakes_per_sec": 234.8, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 14021, + "total": 15612 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3224792.5, + "p95": 3252230.5, + "min": 3201423.0, + "max": 4179918.0, + "mean": 3235737.1, + "stddev": 79311.9 + }, + "handshakes_per_sec": 310.1, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 4374, + "total": 5965 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44188463.0, + "p95": 44566263.3, + "min": 43551390.0, + "max": 45579754.0, + "mean": 44199754.6, + "stddev": 231554.9 + }, + "handshakes_per_sec": 22.6, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 36427, + "total": 38018 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2094125.5, + "p95": 3966721.9, + "min": 1666311.0, + "max": 8994320.0, + "mean": 2357367.9, + "stddev": 785261.5 + }, + "handshakes_per_sec": 477.5, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 7942, + "total": 9084 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3004445.5, + "p95": 5934346.3, + "min": 2124356.0, + "max": 12081318.0, + "mean": 3287913.1, + "stddev": 1267634.1 + }, + "handshakes_per_sec": 332.8, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 10360, + "total": 11502 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3642930.0, + "p95": 6772035.7, + "min": 2796895.0, + "max": 14074325.0, + "mean": 4011431.0, + "stddev": 1408790.1 + }, + "handshakes_per_sec": 274.5, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 13636, + "total": 14778 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2640093.5, + "p95": 2668171.4, + "min": 2616788.0, + "max": 3717132.0, + "mean": 2650375.6, + "stddev": 77865.2 + }, + "handshakes_per_sec": 378.8, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 3987, + "total": 5129 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43658389.5, + "p95": 43976399.5, + "min": 43109136.0, + "max": 44627711.0, + "mean": 43679970.9, + "stddev": 183797.9 + }, + "handshakes_per_sec": 22.9, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 36042, + "total": 37184 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2198585.0, + "p95": 4279321.5, + "min": 1766457.0, + "max": 6589598.0, + "mean": 2508422.0, + "stddev": 824858.9 + }, + "handshakes_per_sec": 454.8, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 8262, + "total": 9788 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3118849.5, + "p95": 6327907.5, + "min": 2233612.0, + "max": 10992620.0, + "mean": 3498360.7, + "stddev": 1372868.5 + }, + "handshakes_per_sec": 320.6, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 10680, + "total": 12206 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3746195.5, + "p95": 7079858.1, + "min": 2899132.0, + "max": 12131684.0, + "mean": 4153004.0, + "stddev": 1376244.0 + }, + "handshakes_per_sec": 266.9, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 13956, + "total": 15482 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2673231.0, + "p95": 2696151.9, + "min": 2648695.0, + "max": 3547210.0, + "mean": 2679716.2, + "stddev": 52595.6 + }, + "handshakes_per_sec": 374.1, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 4305, + "total": 5831 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43410480.5, + "p95": 43826873.5, + "min": 42962388.0, + "max": 44616478.0, + "mean": 43437559.6, + "stddev": 205174.0 + }, + "handshakes_per_sec": 23.0, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 36362, + "total": 37888 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2314729.5, + "p95": 4193902.5, + "min": 1886824.0, + "max": 7106251.0, + "mean": 2602229.0, + "stddev": 830551.4 + }, + "handshakes_per_sec": 432.0, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 8742, + "total": 10652 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3227994.5, + "p95": 6155838.8, + "min": 2341923.0, + "max": 10523463.0, + "mean": 3551842.4, + "stddev": 1343845.1 + }, + "handshakes_per_sec": 309.8, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 11160, + "total": 13070 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3872136.0, + "p95": 7218468.8, + "min": 3023721.0, + "max": 16403262.0, + "mean": 4292413.4, + "stddev": 1442053.4 + }, + "handshakes_per_sec": 258.3, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 14436, + "total": 16346 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2823958.0, + "p95": 2853301.9, + "min": 2801376.0, + "max": 3670909.0, + "mean": 2832083.8, + "stddev": 58434.4 + }, + "handshakes_per_sec": 354.1, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 4790, + "total": 6700 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43571912.0, + "p95": 43915774.1, + "min": 43110120.0, + "max": 44724673.0, + "mean": 43587041.1, + "stddev": 191997.4 + }, + "handshakes_per_sec": 23.0, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 36842, + "total": 38752 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400 + } + ] + } +} \ No newline at end of file diff --git a/tools/benchmarks/pqc/run.sh b/tools/benchmarks/pqc/run.sh new file mode 100755 index 0000000..c8fe6a9 --- /dev/null +++ b/tools/benchmarks/pqc/run.sh @@ -0,0 +1,377 @@ +#!/usr/bin/env bash +# ============================================================================= +# run.sh — measurement wrapper + orchestrator. +# +# Does the things that make a number credible: +# * sets the CPU governor to `performance` (Linux; warns elsewhere) +# * pins the benchmark to a single isolated core via taskset (core 3 on RPi5; +# core 3 stays clear of CPU0 where the kernel steers IRQs/RPS) +# * logs ARM clock + SoC temperature throughout, embeds the trace in results, +# and warns on thermal throttling +# * runs every candidate from config.yaml, then assembles one results JSON +# stamped with full host + toolchain provenance. +# +# Usage: +# ./run.sh # full run using config.yaml knobs +# ./run.sh --smoke # tiny iteration counts: pipeline smoke test +# ./run.sh --kemsig-only # skip the TLS layer +# ./run.sh --tls-only # only the TLS layer +# ./run.sh --iters N --warmup N --reps N # override measurement knobs +# +# Prefer `make run` / `make smoke`: on Linux they cache sudo credentials once +# so the CPU-governor step (the ONLY privileged operation) can escalate via +# `sudo -n`, while the measurement itself runs as your user. NOSUDO=1 (or +# declining sudo) still completes the run with the governor demerit recorded. +# ============================================================================= +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +TOOL_VERSION="0.2.0" +# shellcheck source=setup/lib_platform.sh +source "$ROOT/setup/lib_platform.sh" +# shellcheck source=setup/versions.env +source "$ROOT/setup/versions.env" +LOCK="$ROOT/setup/versions.lock" +[ -f "$LOCK" ] && source "$LOCK" || pqb_warn "no versions.lock — run ./setup/setup.sh first" + +pqb_detect_platform + +# `set -e` deaths must never be silent: report the failing command and line. +# (A generic-x86 run previously exited 1 with no output at all when a +# platform probe failed mid-run — this trap makes that class of failure +# diagnosable wherever it happens next.) +set -E # errtrace: without it the ERR trap does not fire inside functions +trap 'pqb_err "run.sh aborted at line $LINENO while running: $BASH_COMMAND"' ERR + +# Rust flag parity with the C side (recorded in the Rust provenance blocks): +# the same host-tuning the C builds got, expressed as target-cpu. +case "${CFLAGS_TARGET:-}" in + cortex-a76) export RUSTFLAGS="-C target-cpu=cortex-a76" ;; + apple-m*|apple-silicon) export RUSTFLAGS="-C target-cpu=native" ;; +esac + +# ---- args ------------------------------------------------------------------ +SMOKE=0; DO_KEMSIG=1; DO_TLS=1 +OVR_ITERS=""; OVR_WARMUP=""; OVR_REPS="" +while [ $# -gt 0 ]; do + case "$1" in + --smoke) SMOKE=1 ;; + --kemsig-only) DO_TLS=0 ;; + --tls-only) DO_KEMSIG=0 ;; + --no-tls) DO_TLS=0 ;; + --iters) OVR_ITERS="$2"; shift ;; + --warmup) OVR_WARMUP="$2"; shift ;; + --reps) OVR_REPS="$2"; shift ;; + -h|--help) grep '^#' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; + *) pqb_err "unknown arg: $1"; exit 2 ;; + esac + shift +done + +# ---- measurement knobs (config.yaml, overridable) -------------------------- +# Sets TARGET_TIME_MS MIN_SAMPLES MAX_ITERS REPS CYCLES_MODE (auto-calibration, +# the default path) plus WARMUP ITERS (the fixed-count fallback). +eval "$(python3 "$ROOT/bench/lib/list_algs.py" measurement "$ROOT/config.yaml")" + +# Mode: auto-calibrate per op (default) unless --iters forces a fixed count. +CALIB_MODE="auto" +if [ -n "$OVR_ITERS" ]; then CALIB_MODE="fixed"; ITERS="$OVR_ITERS"; fi +[ -n "$OVR_WARMUP" ] && WARMUP="$OVR_WARMUP" +[ -n "$OVR_REPS" ] && REPS="$OVR_REPS" +if [ "$SMOKE" = 1 ]; then + # Keep auto-calibration (so each op still reaches target) but a single rep, so + # the sweep stays short. This is a pipeline test, NOT measurement data. + REPS=1 + pqb_warn "SMOKE MODE: reps=1 — pipeline test only, NOT measurement data" +fi + +# Assemble the per-op sizing args passed to every bench_pq invocation. +if [ "$CALIB_MODE" = "fixed" ]; then + BENCH_SIZE_ARGS=(--warmup "$WARMUP" --iters "$ITERS" --reps "$REPS") + pqb_log "sizing: FIXED-count warmup=$WARMUP iters=$ITERS reps=$REPS" +else + BENCH_SIZE_ARGS=(--target-time-ms "$TARGET_TIME_MS" --min-samples "$MIN_SAMPLES" \ + --max-iters "$MAX_ITERS" --reps "$REPS") + pqb_log "sizing: AUTO-calibrate target=${TARGET_TIME_MS}ms min_samples=$MIN_SAMPLES max_iters=$MAX_ITERS reps=$REPS" +fi +BENCH_CORE="${BENCH_CORE:-3}" +export PQB_BENCH_CORE="$BENCH_CORE" + +# ---- work directory -------------------------------------------------------- +HOST="$(pqb_resolve_hostname)" +TS="$(date -u +%Y%m%dT%H%M%SZ)" +WORK="$ROOT/results/.work-$HOST-$TS" +mkdir -p "$WORK" "$ROOT/results" +KEMSIG_OUT="$WORK/kemsig.jsonl"; : > "$KEMSIG_OUT" +TLS_OUT="$WORK/tls.json" +RUST_TLS_PROV="" # set when the TLS layer runs (rustls provenance path) +THERMAL="$WORK/thermal.csv"; : > "$THERMAL" +META="$WORK/meta.env" +FEATURES="$WORK/cpu_features.json" +WARN_ACC="" + +add_warn() { WARN_ACC="${WARN_ACC:+$WARN_ACC||}$1"; pqb_warn "$1"; } + +# ---- governor -------------------------------------------------------------- +GOV_BEFORE="$(pqb_get_governor)" +GOV_AFTER="$(pqb_set_governor_performance || true)" +GOV_REQUESTED="performance" +if [ "$GOV_AFTER" != "performance" ]; then + add_warn "governor is '$GOV_AFTER', not 'performance' (on Linux run via 'make run' so the governor step can escalate; no governor control on macOS)" +fi + +# ---- core pinning ---------------------------------------------------------- +TASKSET="$(pqb_taskset_prefix "$BENCH_CORE")" +if [ -n "$TASKSET" ]; then + PINNED=1; pqb_log "pinning to core $BENCH_CORE via: $TASKSET" +else + PINNED=0; add_warn "core pinning unavailable (no taskset/numactl) — results will be noisier" +fi + +# ---- thermal sampler (background) ------------------------------------------ +SAMPLE_INTERVAL="${SAMPLE_INTERVAL:-1}" +pqb_log "starting thermal/clock sampler (every ${SAMPLE_INTERVAL}s) -> $THERMAL" +( while :; do pqb_sample_thermal >> "$THERMAL" 2>/dev/null; sleep "$SAMPLE_INTERVAL"; done ) & +SAMPLER_PID=$! +disown "$SAMPLER_PID" 2>/dev/null || true # suppress job-control "Terminated" noise on kill +# shellcheck disable=SC2064 +trap "kill $SAMPLER_PID 2>/dev/null || true" EXIT +pqb_sample_thermal >> "$THERMAL" 2>/dev/null || true # one immediate sample +# (|| true: on machines with no thermal telemetry the sampler records empty +# fields; a sampler hiccup must never abort a measurement run — temperature +# is then honestly reported unavailable, as on macOS) + +# ---- CPU features ---------------------------------------------------------- +pqb_cpu_features_json > "$FEATURES" +pqb_log "cpu features: $(cat "$FEATURES")" +# Report whether Keccak/SHA3 *instruction* acceleration is available + compiled. +SHA3_HW="$(python3 -c "import json;print(json.load(open('$FEATURES'))['sha3'])" 2>/dev/null || echo unknown)" +case "${LIBOQS_OPT_DEFINES:-}" in + *"OQS_USE_ARM_SHA3_INSTRUCTIONS 1"*) SHA3_COMPILED=1 ;; + *) SHA3_COMPILED=0 ;; +esac +pqb_log "Keccak/SHA3: hw_instructions=$SHA3_HW liboqs_compiled_sha3=$SHA3_COMPILED (A76 has no SHA3 ext; Keccak runs on NEON there)" + +TS_START="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +START_EPOCH="$(date +%s)" + +# ---- build harness if needed ----------------------------------------------- +OSSL_PREFIX_FOR_BUILD="${OPENSSL_PREFIX:-$(brew --prefix openssl@3.5 2>/dev/null || echo /usr)}" +if [ ! -x "$ROOT/bench/kem_sig/bench_pq" ] || [ "$ROOT/bench/kem_sig/bench_pq.c" -nt "$ROOT/bench/kem_sig/bench_pq" ]; then + pqb_log "building bench_pq harness" + make -C "$ROOT/bench/kem_sig" \ + LIBOQS_PREFIX="${PREFIX:-$ROOT/vendor/install}" \ + OPENSSL_PREFIX="$OSSL_PREFIX_FOR_BUILD" \ + BENCH_CFLAGS="${BENCH_CFLAGS:--O3}" >/dev/null +fi + +# ---- KEM/sig sweep --------------------------------------------------------- +CYCLES_AVAILABLE=0; CYCLES_REASON="not probed" +if [ "$DO_KEMSIG" = 1 ]; then + if [ "$CALIB_MODE" = "fixed" ]; then + pqb_log "running KEM/sig sweep (fixed: warmup=$WARMUP iters=$ITERS reps=$REPS)" + else + pqb_log "running KEM/sig sweep (auto-calibrate: target=${TARGET_TIME_MS}ms min_samples=$MIN_SAMPLES max_iters=$MAX_ITERS reps=$REPS)" + fi + while IFS=$'\t' read -r kind alg classical; do + [ -z "$alg" ] && continue + pqb_log " $kind $alg" + ERRF="$WORK/err.$kind.$alg.txt" + # shellcheck disable=SC2086 + if $TASKSET "$ROOT/bench/kem_sig/bench_pq" --kind "$kind" --alg "$alg" \ + "${BENCH_SIZE_ARGS[@]}" >> "$KEMSIG_OUT" 2>"$ERRF"; then + : + else + add_warn "harness failed for $kind $alg (see $ERRF)" + fi + # capture PMU availability from the harness's stderr (first occurrence) + if grep -q 'cycles_available=1' "$ERRF" 2>/dev/null; then + CYCLES_AVAILABLE=1; CYCLES_REASON="$(sed -n 's/.*cycles_available=1 (\(.*\))/\1/p' "$ERRF" | head -1)" + elif [ "$CYCLES_AVAILABLE" = 0 ] && grep -q 'cycles_available=0' "$ERRF" 2>/dev/null; then + CYCLES_REASON="$(sed -n 's/.*cycles_available=0 (\(.*\))/\1/p' "$ERRF" | head -1)" + fi + done < <(python3 "$ROOT/bench/lib/list_algs.py" kemsig "$ROOT/config.yaml") +fi + +# ---- Rust (RustCrypto) KEM/sig sweep --------------------------------------- +# Second, independent measurement group: pure-Rust implementations, same +# methodology (pqb-rust replicates bench_pq.c's calibration/stats), same +# kemsig.jsonl, rows tagged implementation:"rustcrypto". If the Rust toolchain +# is absent the group is SKIPPED and the reason recorded — never faked. +RUST_PROV="$WORK/rust_provenance.json" +if [ "$DO_KEMSIG" = 1 ]; then + if command -v cargo >/dev/null 2>&1; then + pqb_log "building Rust harness (cargo build --release --locked)" + if (cd "$ROOT/bench/rust" && cargo build --release --locked) >"$WORK/rust_build.log" 2>&1; then + RBIN="$ROOT/bench/rust/target/release/pqb-rust" + "$RBIN" --provenance > "$RUST_PROV" + pqb_log "running RustCrypto KEM/sig sweep" + while IFS=$'\t' read -r kind alg; do + [ -z "$alg" ] && continue + pqb_log " rust $kind $alg" + ERRF="$WORK/err.rust.$kind.$alg.txt" + # shellcheck disable=SC2086 + if $TASKSET "$RBIN" --kind "$kind" --alg "$alg" \ + "${BENCH_SIZE_ARGS[@]}" >> "$KEMSIG_OUT" 2>"$ERRF"; then + : + else + add_warn "rust harness failed for $kind $alg (see $ERRF)" + fi + done < <("$RBIN" --list) + else + add_warn "rust harness build failed (see $WORK/rust_build.log) — rustcrypto group skipped" + echo '{"available":false,"reason":"cargo build failed (see rust_build.log in the run work dir)"}' > "$RUST_PROV" + fi + else + add_warn "cargo not installed — rustcrypto measurement group skipped" + echo '{"available":false,"reason":"Rust toolchain (cargo) not installed on this host"}' > "$RUST_PROV" + fi + + # ---- aws-lc-rs primitive PRICING rows ----------------------------------- + # The primitives the rustls-awslc TLS handshakes actually execute + # (implementation:"aws-lc-rs"). NOT an independent implementation — it + # wraps the AWS-LC C library — measured solely so the rustls handshake + # primitive sums are priced from the right code. + if command -v cargo >/dev/null 2>&1; then + pqb_log "building rustls harness for aws-lc-rs pricing rows" + if (cd "$ROOT/bench/rust-tls" && cargo build --release --locked) >"$WORK/rust_tls_build.log" 2>&1; then + RTBIN="$ROOT/bench/rust-tls/target/release/pqb-rust-tls" + pqb_log "running aws-lc-rs primitive sweep" + while IFS=$'\t' read -r kind alg; do + [ -z "$alg" ] && continue + pqb_log " aws-lc-rs $kind $alg" + ERRF="$WORK/err.awslc.$kind.$alg.txt" + # shellcheck disable=SC2086 + if $TASKSET "$RTBIN" --kind "$kind" --alg "$alg" \ + "${BENCH_SIZE_ARGS[@]}" >> "$KEMSIG_OUT" 2>"$ERRF"; then + : + else + add_warn "aws-lc-rs pricing row failed for $kind $alg (see $ERRF)" + fi + done < <("$RTBIN" --list-primitives) + else + add_warn "rust-tls build failed (see $WORK/rust_tls_build.log) — aws-lc-rs pricing rows skipped" + fi + fi +fi + +# ---- TLS layer ------------------------------------------------------------- +if [ "$DO_TLS" = 1 ]; then + if [ -x "$ROOT/bench/tls/run_tls.sh" ]; then + TLS_CONNS="$(python3 -c "import json,sys;print(json.loads(sys.argv[1]).get('connections',1000))" \ + "$(python3 "$ROOT/bench/lib/list_algs.py" tls "$ROOT/config.yaml")")" + [ "$SMOKE" = 1 ] && TLS_CONNS=50 + pqb_log "running TLS handshake matrix ($TLS_CONNS handshakes/cell)" + RUST_TLS_PROV="$WORK/rust_tls_provenance.json" + if PQB_TASKSET="$TASKSET" PQB_RUSTLS_PROV="$RUST_TLS_PROV" "$ROOT/bench/tls/run_tls.sh" \ + --out "$TLS_OUT" --connections "$TLS_CONNS" >"$WORK/tls.log" 2>&1; then + pqb_log "TLS layer done ($(grep -c '"label"' "$TLS_OUT" 2>/dev/null || echo 0) cells)" + else + add_warn "TLS layer failed or unavailable (see $WORK/tls.log) — continuing without it" + TLS_OUT="" + fi + else + pqb_warn "TLS harness not present yet — skipping (will be added)" + TLS_OUT="" + fi +fi + +# ---- stop sampler, gather timing ------------------------------------------- +kill "$SAMPLER_PID" 2>/dev/null || true +trap - EXIT +TS_END="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +DURATION=$(( $(date +%s) - START_EPOCH )) +GOV_AFTER_END="$(pqb_get_governor)" + +# ---- host facts ------------------------------------------------------------ +collect_host_facts() { + local cpu_brand="" ncpu="" ram="" os_pretty="" kernel + kernel="$(uname -r)" + if [ "$PQB_OS" = "macos" ]; then + cpu_brand="$(sysctl -n machdep.cpu.brand_string 2>/dev/null)" + ncpu="$(sysctl -n hw.ncpu 2>/dev/null)" + ram="$(sysctl -n hw.memsize 2>/dev/null)" + os_pretty="macOS $(sw_vers -productVersion 2>/dev/null) ($(sw_vers -buildVersion 2>/dev/null))" + else + # aarch64 /proc/cpuinfo has no 'model name' line, so this grep misses; the + # trailing `|| true` keeps `set -o pipefail` from aborting the run (errexit) + # before the PQB_RPI_MODEL fallback below can supply the brand. + cpu_brand="$(grep -m1 'model name' /proc/cpuinfo 2>/dev/null | sed 's/.*: //' || true)" + [ -z "$cpu_brand" ] && cpu_brand="$PQB_RPI_MODEL" + ncpu="$( (command -v nproc >/dev/null && nproc) || grep -c ^processor /proc/cpuinfo)" + ram="$(( $(grep -m1 MemTotal /proc/meminfo 2>/dev/null | awk '{print $2}') * 1024 ))" + os_pretty="$(. /etc/os-release 2>/dev/null; echo "$PRETTY_NAME")" + fi + { + echo "TOOL_VERSION=$TOOL_VERSION" + echo "HOSTNAME=$HOST" + echo "OS=$PQB_OS" + echo "ARCH=$PQB_ARCH" + echo "KERNEL=$kernel" + echo "OS_PRETTY=\"$os_pretty\"" + echo "IS_RPI=$PQB_IS_RPI" + echo "RPI_MODEL=\"$PQB_RPI_MODEL\"" + echo "CPU_BRAND=\"$cpu_brand\"" + echo "NCPU=$ncpu" + echo "RAM_BYTES=$ram" + echo "GOVERNOR_REQUESTED=$GOV_REQUESTED" + echo "GOVERNOR_BEFORE=$GOV_BEFORE" + echo "GOVERNOR_AFTER=$GOV_AFTER_END" + echo "BENCH_CORE=$BENCH_CORE" + echo "PINNED=$PINNED" + echo "TASKSET_CMD=\"$TASKSET\"" + echo "CALIB_MODE=$CALIB_MODE" + echo "TARGET_TIME_MS=$TARGET_TIME_MS" + echo "MIN_SAMPLES=$MIN_SAMPLES" + echo "MAX_ITERS=$MAX_ITERS" + echo "REPS=$REPS" + # warmup/timed_iters are single values only in fixed-count mode; in auto mode + # they are chosen per-op and recorded in each operation's JSON instead. + if [ "$CALIB_MODE" = "fixed" ]; then + echo "WARMUP=$WARMUP" + echo "ITERS=$ITERS" + else + echo "WARMUP=" + echo "ITERS=" + fi + echo "CYCLES_MODE=$CYCLES_MODE" + echo "CYCLES_AVAILABLE=$CYCLES_AVAILABLE" + echo "CYCLES_REASON=\"$CYCLES_REASON\"" + echo "TS_START_UTC=$TS_START" + echo "TS_END_UTC=$TS_END" + echo "DURATION_S=$DURATION" + echo "WARNINGS=\"$WARN_ACC\"" + } > "$META" +} +collect_host_facts + +# ---- assemble final results JSON ------------------------------------------- +OUT="$ROOT/results/${HOST}-${TS}.json" +python3 "$ROOT/bench/lib/assemble.py" \ + --meta "$META" --lock "$LOCK" --features "$FEATURES" \ + --kemsig "$KEMSIG_OUT" ${TLS_OUT:+--tls "$TLS_OUT"} \ + ${RUST_PROV:+--rust-provenance "$RUST_PROV"} \ + ${RUST_TLS_PROV:+--rust-tls-provenance "$RUST_TLS_PROV"} \ + --thermal "$THERMAL" --config "$ROOT/config.yaml" \ + --out "$OUT" >/dev/null + +# ---- summary --------------------------------------------------------------- +echo +pqb_log "================ RUN COMPLETE ================" +python3 - "$OUT" <<'PY' +import json,sys +d=json.load(open(sys.argv[1])) +g=d["is_baseline_grade"] +print(f" results: {sys.argv[1]}") +print(f" host: {d['host']['cpu_brand']} ({d['host']['os_pretty']})") +print(f" baseline-grade (reference platform: RPi5): {g}") +if not g: + for r in d['baseline_grade_reasons']: + print(f" - {r}") +tt=d['thermal_trace'] +print(f" thermal: {tt.get('temp_c')} throttling={tt.get('throttling_detected')}") +print(f" kem algos: {sum(1 for x in d['kem'] if x.get('enabled'))} enabled / {len(d['kem'])}") +print(f" sig algos: {sum(1 for x in d['sig'] if x.get('enabled'))} enabled / {len(d['sig'])}") +print(f" cycles available: {d['run']['cycles_available']}") +PY +pqb_log "keep raw work dir? -> $WORK (safe to delete)" diff --git a/tools/benchmarks/pqc/scripts/bench-run.sh b/tools/benchmarks/pqc/scripts/bench-run.sh new file mode 100755 index 0000000..d045cd9 --- /dev/null +++ b/tools/benchmarks/pqc/scripts/bench-run.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# ============================================================================= +# make smoke / make run — platform-aware benchmark invocation. +# +# The run needs root for exactly ONE step: writing 'performance' into the +# sysfs CPU-governor files (see pqb_set_governor_performance). Everything +# else — cargo builds, the benchmarks, results — runs as the invoking user. +# Running the whole script under sudo (the old design) bit us three times: +# root-owned results/.work-* dirs, cargo-as-root (rustup cannot resolve a +# toolchain under root's HOME), and root-owned bench/*/target artifacts. +# +# So: on Linux, cache sudo credentials up front (sudo -v — one password +# prompt, before any measurement starts) and let the governor step escalate +# per-write with non-interactive `sudo -n`. If sudo is unavailable or +# declined, the run still completes and the governor demerit is recorded +# honestly (NOSUDO=1 skips the attempt entirely; same behavior). +# +# macOS: no governor to set — no escalation of any kind. +# ============================================================================= +set -euo pipefail +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$HERE" + +if [ "$(uname -s)" = "Darwin" ] || [ "${NOSUDO:-0}" = "1" ] || [ "$(id -u)" -eq 0 ]; then + exec ./run.sh "$@" +fi + +if command -v sudo >/dev/null 2>&1 && sudo -v; then + export PQB_GOV_SUDO=1 +else + echo "[bench-run] no sudo — running fully unprivileged; the governor demerit will be recorded" >&2 +fi +exec ./run.sh "$@" diff --git a/tools/benchmarks/pqc/scripts/build-toolchain.sh b/tools/benchmarks/pqc/scripts/build-toolchain.sh new file mode 100755 index 0000000..42e547b --- /dev/null +++ b/tools/benchmarks/pqc/scripts/build-toolchain.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# ============================================================================= +# make build — C toolchain + bench binaries + both Rust harnesses. +# +# Skip decisions use REAL checks, never stamp files: the C toolchain rebuild +# is skipped only when versions.lock exists AND the liboqs library AND the +# oqs-provider module it records are on disk AND the OpenSSL binary it records +# still exists and still reports the recorded version (so upgrading/removing +# OpenSSL forces a rebuild instead of being silently masked). Bench binaries +# use their Makefiles' own file-based dependency tracking; cargo tracks its +# own inputs. +# +# The Rust harnesses are ALWAYS built as the invoking (non-root) user: cargo +# under root leaves root-owned target/ trees, so we refuse. +# ============================================================================= +set -euo pipefail +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$HERE" +# shellcheck source=setup/lib_platform.sh +source "$HERE/setup/lib_platform.sh" +pqb_detect_platform + +LOCK="$HERE/setup/versions.lock" + +toolchain_ok() { + [ -f "$LOCK" ] || { echo "no versions.lock"; return 1; } + # shellcheck disable=SC1090 + source "$LOCK" + ls "$HERE"/vendor/install/lib/liboqs.* >/dev/null 2>&1 || { echo "liboqs library missing"; return 1; } + [ -n "${OQSPROVIDER_MODULE:-}" ] && [ -f "$OQSPROVIDER_MODULE" ] || { echo "oqs-provider module missing"; return 1; } + [ -n "${OPENSSL_BIN:-}" ] && [ -x "$OPENSSL_BIN" ] || { echo "recorded OpenSSL binary gone"; return 1; } + local live="system:$("$OPENSSL_BIN" version 2>/dev/null | awk '{print $2}')" + case "${OPENSSL_COMMIT:-}" in + system:*) [ "$live" = "$OPENSSL_COMMIT" ] || { echo "OpenSSL changed: lock=$OPENSSL_COMMIT live=$live"; return 1; } ;; + esac + return 0 +} + +if reason="$(toolchain_ok)"; then + pqb_log "C toolchain present and consistent with versions.lock — skipping setup.sh (delete vendor/ or versions.lock to force)" +else + pqb_log "building C toolchain (${reason:-first build})" + if ! ./setup/setup.sh all; then + pqb_err "C toolchain build FAILED — stopping here. Fix the error above" + pqb_err "(commonly: missing OpenSSL DEVELOPMENT files — run 'make check')." + pqb_err "Nothing further was attempted, so any later error you may have" + pqb_err "seen previously (e.g. 'cannot find -loqs') was a symptom of this." + exit 1 + fi +fi + +# ---- HARD GUARD: only the vendored, pinned liboqs/oqs-provider may be used -- +# A system liboqs (e.g. a distro liboqs-devel) could build SILENTLY and every +# measurement would then run against an unpinned library — destroying the +# comparability the vendoring exists to guarantee. Refuse before any bench +# binary is compiled. (bench/kem_sig/Makefile enforces the same guard, so the +# direct `run.sh` path is protected too.) +if ! ls "$HERE"/vendor/install/lib/liboqs.* >/dev/null 2>&1 \ + || [ ! -f "$HERE/vendor/install/include/oqs/oqs.h" ]; then + pqb_err "pinned vendored liboqs not found. Looked for BOTH of:" + pqb_err " $HERE/vendor/install/include/oqs/oqs.h" + pqb_err " $HERE/vendor/install/lib/liboqs.*" + pqb_err "Inspect the actual layout: ls $HERE/vendor/install" + pqb_err "- nothing there: the toolchain build failed — scroll up for the original error" + pqb_err "- a lib64/ directory: built before the layout was pinned" + pqb_err " (-DCMAKE_INSTALL_LIBDIR=lib) — run 'make distclean && make build'" + pqb_err "Do NOT install a distro liboqs to work around this: linking a system" + pqb_err "liboqs is refused — unpinned versions are not comparable with the" + pqb_err "published baselines, and the pinned oqs-provider expects exactly the" + pqb_err "pinned liboqs' headers." + exit 1 +fi +# shellcheck disable=SC1090 +source "$LOCK" +case "${OQSPROVIDER_MODULE:-}" in + "$HERE"/vendor/*) [ -f "$OQSPROVIDER_MODULE" ] || { pqb_err "oqs-provider module recorded in versions.lock is missing ($OQSPROVIDER_MODULE) — run 'make build'"; exit 1; } ;; + "") pqb_err "versions.lock records no oqs-provider module — run 'make build'"; exit 1 ;; + *) pqb_err "versions.lock points at a NON-VENDORED oqs-provider ($OQSPROVIDER_MODULE) — refusing: only the pinned, vendored provider may be used"; exit 1 ;; +esac + +pqb_log "building bench_pq / bench_tls" +make -C bench/kem_sig \ + LIBOQS_PREFIX="${PREFIX:-$HERE/vendor/install}" \ + OPENSSL_PREFIX="${OPENSSL_PREFIX:-/usr}" \ + BENCH_CFLAGS="${BENCH_CFLAGS:--O3}" +make -C bench/tls OPENSSL_PREFIX="${OPENSSL_PREFIX:-/usr}" + +if cargo --version >/dev/null 2>&1; then + if [ "$(id -u)" -eq 0 ]; then + pqb_err "refusing to run cargo as root (root-owned target/ trees break later user builds)." + pqb_err "Run 'make build' as your normal user; sudo is only needed for the run itself." + exit 1 + fi + pqb_log "building Rust harnesses (cargo --release --locked, as $(id -un))" + (cd bench/rust && cargo build --release --locked) + (cd bench/rust-tls && cargo build --release --locked) +else + pqb_warn "cargo not available — Rust harnesses not built; the rustcrypto/aws-lc-rs/rustls-awslc groups will be skipped (recorded in results)" +fi +pqb_log "build complete" diff --git a/tools/benchmarks/pqc/scripts/check-env.sh b/tools/benchmarks/pqc/scripts/check-env.sh new file mode 100755 index 0000000..8fbaa1e --- /dev/null +++ b/tools/benchmarks/pqc/scripts/check-env.sh @@ -0,0 +1,177 @@ +#!/usr/bin/env bash +# ============================================================================= +# make check — READ-ONLY environment verification. Changes nothing; prints a +# per-platform install command for anything missing (never runs it — that is +# the opt-in `make deps`). Live probes only (openssl version, cargo --version): +# no stamp files, so an upgraded/removed tool can never be masked by a stale +# "installed" marker. +# +# Exit: 1 if a HARD requirement is missing (compiler, cmake, git, python3), +# 0 otherwise — warnings (old OpenSSL, missing Rust, missing Pi tools) +# are loud but not fatal, because the harness degrades exactly as the +# README documents (source-build fallback / skipped groups / non- +# baseline-grade stamp). +# ============================================================================= +set -uo pipefail +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +# shellcheck source=setup/lib_platform.sh +source "$HERE/setup/lib_platform.sh" +pqb_detect_platform +# test hooks (see also PQB_CHECK_FORCE_OPENSSL / PQB_TEST_OS_RELEASE): let the +# per-platform failure output be exercised on machines where it can't occur +[ -n "${PQB_TEST_OS:-}" ] && PQB_OS="$PQB_TEST_OS" + +MISSING=0 WARNINGS=0 + +remedy() { # -> platform-appropriate install hint + case "$PQB_OS" in + macos) echo "brew install $1" ;; + linux) if command -v apt-get >/dev/null 2>&1; then echo "sudo apt-get install -y $1" + else echo "install '$1' via your distribution's package manager"; fi ;; + *) echo "install '$1' for your platform" ;; + esac +} + +ok() { printf '[check] %-9s ok %s\n' "$1" "$2"; } +warn() { printf '[check] %-9s WARN %s\n' "$1" "$2"; WARNINGS=$((WARNINGS+1)); } +miss() { printf '[check] %-9s MISSING -> %s\n' "$1" "$2"; MISSING=$((MISSING+1)); } + +# ---- hard requirements ------------------------------------------------------ +if command -v cc >/dev/null 2>&1; then + ok cc "$(cc --version 2>/dev/null | head -1)" +else + miss cc "$(remedy "build-essential (Linux) / Xcode command-line tools (macOS)")" +fi +if command -v cmake >/dev/null 2>&1; then + ok cmake "$(cmake --version | head -1)" +else + miss cmake "$(remedy cmake)" +fi +if command -v git >/dev/null 2>&1; then + ok git "$(git --version)" +else + miss git "$(remedy git)" +fi +if command -v python3 >/dev/null 2>&1; then + ok python3 "$(python3 --version 2>&1)" +else + miss python3 "$(remedy python3)" +fi + +# ---- OpenSSL -------------------------------------------------------------- +# Two distinct requirements that MUST NOT be conflated (the Fedora lesson: +# the openssl BINARY was present, `openssl version` passed, and the liboqs +# cmake build then failed with 'Could NOT find OpenSSL' because the +# DEVELOPMENT FILES — headers + linkable libcrypto — are a separate package): +# 1. which OpenSSL the build will use: the SAME candidate walk setup.sh +# uses (keg -> PATH -> system). We probe that resolution, not an +# independent search — a check that passes while the build links a +# different OpenSSL is worse than no check. (This is also why we don't +# use plain pkg-config: the pinned keg-only openssl@3.5 on macOS is +# deliberately NOT in the pkgconfig path.) +# 2. whether that candidate's prefix has the dev files: verified by an +# actual compile-and-link probe against the prefix, exactly what the +# cmake build will attempt. +# PQB_CHECK_FORCE_OPENSSL forces the candidate (test hook, used to exercise +# these failure paths on machines where a real one can't occur). +dev_pkg_hint() { + case "$PQB_OS" in + macos) echo "brew install openssl@3.5" ;; + linux) case "$(pqb_linux_family)" in + debian) echo "sudo apt-get install -y libssl-dev" ;; + fedora) echo "sudo dnf install -y openssl-devel" ;; + arch) echo "sudo pacman -S openssl" ;; + suse) echo "sudo zypper install libopenssl-devel" ;; + *) echo "install your distribution's OpenSSL development package (headers + libcrypto)" ;; + esac ;; + *) echo "install OpenSSL development files for your platform" ;; + esac +} +probe_openssl_dev() { # -> 0 if headers + libcrypto link at that prefix + local prefix="$1" t; t="$(mktemp -d)" + cat > "$t/p.c" <<'EOF' +#include +int main(void) { return EVP_MD_fetch ? 0 : 1; } +EOF + cc "$t/p.c" -I"$prefix/include" -L"$prefix/lib" -L"$prefix/lib64" \ + -lcrypto -o "$t/p" 2>"$t/err" + local rc=$? + rm -rf "$t" + return $rc +} + +OSSL_FOUND="" OSSL_VER="" OSSL_NOTE="" +if [ -n "${PQB_CHECK_FORCE_OPENSSL:-}" ]; then + CANDS=("$PQB_CHECK_FORCE_OPENSSL") +else + CANDS=(/opt/homebrew/opt/openssl@3.5/bin/openssl + "$(command -v openssl || true)" + /opt/homebrew/opt/openssl@3/bin/openssl /usr/bin/openssl) +fi +for cand in "${CANDS[@]}"; do + [ -n "$cand" ] && [ -x "$cand" ] || continue + v="$("$cand" version 2>/dev/null || true)" + case "$v" in + OpenSSL\ 3.5.*) OSSL_FOUND="$cand"; OSSL_VER="$v"; OSSL_NOTE="pinned 3.5.x line"; break ;; + OpenSSL\ *) if [ -z "$OSSL_FOUND" ]; then OSSL_FOUND="$cand"; OSSL_VER="$v"; OSSL_NOTE="not the pinned 3.5.x line"; fi ;; + LibreSSL*) : ;; # LibreSSL masquerading as openssl (macOS /usr/bin) — skip + esac +done + +if [ -n "$OSSL_FOUND" ]; then + maj="${OSSL_VER#OpenSSL }"; maj="${maj%% *}" + OSSL_PREFIX_GUESS="$(dirname "$(dirname "$OSSL_FOUND")")" + case "$maj" in + 3.5.*|3.[6-9].*|[4-9].*) + # the build will use this prefix -> its dev files are REQUIRED + if probe_openssl_dev "$OSSL_PREFIX_GUESS"; then + case "$maj" in + 3.5.*) ok openssl "$OSSL_VER ($OSSL_NOTE) at $OSSL_FOUND — headers + libcrypto link OK" ;; + *) warn openssl "$OSSL_VER at $OSSL_FOUND (dev files OK) — usable but $OSSL_NOTE; cross-machine TLS comparisons should stay on 3.5.x" ;; + esac + else + miss "openssl-dev" "$(dev_pkg_hint) [the build will use $OSSL_PREFIX_GUESS ($OSSL_VER) and needs its DEVELOPMENT files — the binary alone is not enough: liboqs/oqs-provider compile and link against libcrypto]" + fi + ;; + *) + warn openssl "$OSSL_VER at $OSSL_FOUND — older than 3.5: setup will SOURCE-BUILD the pinned OpenSSL 3.5.x into vendor/ (+15-30 min; needs perl). The native TLS phase matrix then still runs — it degrades only if the source build is skipped." + command -v perl >/dev/null 2>&1 || miss perl "$(remedy perl) [required for the OpenSSL source build]" + ;; + esac +else + warn openssl "no real OpenSSL found (only LibreSSL or nothing) — setup will SOURCE-BUILD the pinned 3.5.x (+15-30 min; needs perl). Faster: $(dev_pkg_hint)" + command -v perl >/dev/null 2>&1 || miss perl "$(remedy perl) [required for the OpenSSL source build]" +fi + +# ---- Rust: run cargo for real — this exercises rustup toolchain RESOLUTION, +# ---- the exact thing that silently broke under sudo on the Pi -------------- +if cargo --version >/dev/null 2>&1; then + ok rust "$(cargo --version) (toolchain resolves)" +else + warn rust "cargo not found or toolchain does not resolve — the RustCrypto and rustls groups (2 of 4) will be SKIPPED. Install: https://rustup.rs (or 'make deps RUST=1')" +fi + +# ---- Linux / Pi niceties (baseline-grade prerequisites) --------------------- +if [ "$PQB_OS" = "linux" ]; then + command -v taskset >/dev/null 2>&1 && ok taskset "core pinning available" \ + || warn taskset "no taskset — runs will be unpinned (not baseline-grade). $(remedy util-linux)" + CPUPOWER_PKG=linux-cpupower + [ "$(pqb_linux_family)" = fedora ] && CPUPOWER_PKG=kernel-tools + command -v cpupower >/dev/null 2>&1 && ok cpupower "governor control available" \ + || warn cpupower "no cpupower — performance governor cannot be set. $(remedy "$CPUPOWER_PKG")" + if [ "$PQB_IS_RPI" = 1 ]; then + command -v vcgencmd >/dev/null 2>&1 && ok vcgencmd "thermal/throttle telemetry available" \ + || warn vcgencmd "no vcgencmd — thermal trace and throttle detection unavailable on this Pi" + fi +fi + +echo +if [ "$MISSING" -gt 0 ]; then + echo "[check] $MISSING required item(s) missing — run the commands above, or 'make deps'." + exit 1 +fi +if [ "$WARNINGS" -gt 0 ]; then + echo "[check] environment usable with $WARNINGS warning(s) above (degradations are recorded in the results JSON)." +else + echo "[check] environment fully ready." +fi diff --git a/tools/benchmarks/pqc/scripts/install-deps.sh b/tools/benchmarks/pqc/scripts/install-deps.sh new file mode 100755 index 0000000..4b7d648 --- /dev/null +++ b/tools/benchmarks/pqc/scripts/install-deps.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# ============================================================================= +# make deps — the OPT-IN installer (make check never installs anything). +# macOS: brew install of the missing formulae only +# Debian-family: the apt package set (via lib_platform.sh) +# generic Linux: prints the list and exits 1 — we won't guess your package +# manager +# Rust is only installed with explicit consent: make deps RUST=1 +# ============================================================================= +set -euo pipefail +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +# shellcheck source=setup/lib_platform.sh +source "$HERE/setup/lib_platform.sh" +pqb_detect_platform + +case "$PQB_OS" in + macos) + command -v brew >/dev/null 2>&1 || { pqb_err "Homebrew required on macOS: https://brew.sh"; exit 1; } + NEED=() + command -v cmake >/dev/null 2>&1 || NEED+=(cmake) + command -v ninja >/dev/null 2>&1 || NEED+=(ninja) + command -v git >/dev/null 2>&1 || NEED+=(git) + /opt/homebrew/opt/openssl@3.5/bin/openssl version >/dev/null 2>&1 || NEED+=(openssl@3.5) + if [ "${#NEED[@]}" -gt 0 ]; then + pqb_log "brew install ${NEED[*]}" + brew install "${NEED[@]}" + else + pqb_log "all Homebrew deps already present" + fi + ;; + linux) + if command -v apt-get >/dev/null 2>&1; then + pqb_install_build_deps + else + pqb_err "no apt-get on this system — install these with your package manager:" + echo " build-essential cmake ninja-build git python3 perl libssl-dev pkg-config util-linux linux-cpupower" >&2 + exit 1 + fi + ;; + *) pqb_err "unsupported platform '$PQB_OS'"; exit 1 ;; +esac + +if [ "${RUST:-0}" = "1" ]; then + if cargo --version >/dev/null 2>&1; then + pqb_log "Rust already installed: $(cargo --version)" + else + pqb_log "installing Rust via the official rustup installer (https://rustup.rs)" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + pqb_log "done — open a new shell or 'source \$HOME/.cargo/env' before make build" + fi +else + cargo --version >/dev/null 2>&1 || \ + pqb_warn "Rust not installed (2 of 4 measurement groups need it) — rerun as 'make deps RUST=1' to install via rustup" +fi diff --git a/tools/benchmarks/pqc/scripts/selftest.sh b/tools/benchmarks/pqc/scripts/selftest.sh new file mode 100755 index 0000000..87612a2 --- /dev/null +++ b/tools/benchmarks/pqc/scripts/selftest.sh @@ -0,0 +1,242 @@ +#!/usr/bin/env bash +# ============================================================================= +# make test — the consolidated fast verification gate (~1-2 min). +# +# CORRECTNESS tests (1-4) exercise the measurement pipeline and BLOCK (nonzero +# exit): harness micro-runs + correctness gates, cross-implementation size +# agreement, the three TLS stacks incl. the native no-OQS-provider negative +# control, and a schema round-trip through assemble.py. +# +# HYGIENE tests (5-7) check repo consistency (v1-compat merge fixture, the +# published_runs manifest, absence-array propagation) and only WARN — a +# hygiene failure must never block a 30-minute measurement run. +# +# EVERYTHING this script produces lives under one mktemp dir: it never writes +# into results/ or bench/tls/pki/ (a test must not be able to leak into the +# published set or clobber certs a real run depends on). +# +# Fixture note: hygiene test 5 reads results/rasberrypi5-20260614T205226Z.json +# as the schema-1.0.0 COMPATIBILITY FIXTURE (see analyze/published_runs.txt) — +# retired from the published set, but load-bearing here; do not delete it. +# ============================================================================= +set -uo pipefail +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$HERE" +LOCK="$HERE/setup/versions.lock" +# shellcheck disable=SC1090 +[ -f "$LOCK" ] && source "$LOCK" +OSSL="${OPENSSL_BIN:-openssl}" + +T="$(mktemp -d /tmp/pqb-selftest.XXXXXX)" +trap 'rm -rf "$T"' EXIT + +PASS=0; FAIL=0; WARN=0; SKIP=0 +pass() { printf ' PASS %s\n' "$1"; PASS=$((PASS+1)); } +fail() { printf ' FAIL %s\n' "$1"; FAIL=$((FAIL+1)); } +warnf(){ printf ' WARN %s\n' "$1"; WARN=$((WARN+1)); } +skip() { printf ' SKIP %s\n' "$1"; SKIP=$((SKIP+1)); } + +HAVE_CARGO=0 +cargo --version >/dev/null 2>&1 && [ -x bench/rust/target/release/pqb-rust ] \ + && [ -x bench/rust-tls/target/release/pqb-rust-tls ] && HAVE_CARGO=1 + +KEMSIG="$T/kemsig.jsonl"; : > "$KEMSIG" +MICRO=(--iters 20 --warmup 5 --reps 1) + +echo "== correctness 1: C harness micro-runs (correctness gate + row shape) ==" +for spec in "kem ML-KEM-768" "sig ML-DSA-65" "kem X25519" "sig Ed25519"; do + kind="${spec%% *}"; alg="${spec#* }" + if ./bench/kem_sig/bench_pq --kind "$kind" --alg "$alg" "${MICRO[@]}" \ + >> "$KEMSIG" 2>"$T/err.txt"; then + pass "bench_pq $alg (exit 0 — correctness gate passed)" + else + fail "bench_pq $alg exited $? ($(tail -1 "$T/err.txt" 2>/dev/null))" + fi +done +python3 - "$KEMSIG" <<'PY' && pass "C rows: valid JSON, enabled, implementation field" || fail "C row shape" +import json,sys +rows=[json.loads(l) for l in open(sys.argv[1])] +assert len(rows)==4 and all(r["enabled"] for r in rows) +assert {r["implementation"] for r in rows} == {"liboqs","openssl"} +PY + +echo "== correctness 1b: link targets (vendored liboqs, pinned OpenSSL) ==" +# A successful build is not evidence — the failure mode that matters is +# building fine while linking the WRONG library (a system liboqs / another +# OpenSSL). Verify the actual link targets of the built binary. +if [ "$(uname -s)" = "Darwin" ]; then + if otool -l bench/kem_sig/bench_pq | grep -A2 LC_RPATH | grep -q "$HERE/vendor/install/lib" \ + && otool -L bench/kem_sig/bench_pq | grep -q '@rpath/liboqs'; then + pass "bench_pq links the VENDORED liboqs (rpath -> vendor/install/lib)" + else + fail "bench_pq rpath does not include $HERE/vendor/install/lib (pinned layout) — rebuild with 'make build'; if it persists, a wrong liboqs may be linked" + fi + if [ -n "${OPENSSL_PREFIX:-}" ] && otool -L bench/kem_sig/bench_pq | grep -q "$OPENSSL_PREFIX/lib/libcrypto"; then + pass "bench_pq links the pinned OpenSSL ($OPENSSL_PREFIX)" + else + fail "bench_pq libcrypto is not the pinned OpenSSL ($(otool -L bench/kem_sig/bench_pq | grep libcrypto | head -1))" + fi +else + LIBOQS_RESOLVED="$(ldd bench/kem_sig/bench_pq 2>/dev/null | awk '/liboqs/{print $3}')" + case "$LIBOQS_RESOLVED" in + "$HERE"/vendor/install/lib/*) pass "bench_pq links the VENDORED liboqs ($LIBOQS_RESOLVED)" ;; + *) fail "bench_pq resolves liboqs to '$LIBOQS_RESOLVED' — NOT the vendored build" ;; + esac + CRYPTO_RESOLVED="$(ldd bench/kem_sig/bench_pq 2>/dev/null | awk '/libcrypto/{print $3}')" + if [ "${OPENSSL_PREFIX:-/usr}" = "/usr" ]; then + [ -n "$CRYPTO_RESOLVED" ] && pass "bench_pq libcrypto: $CRYPTO_RESOLVED (system prefix, as locked)" \ + || fail "bench_pq has no resolvable libcrypto" + else + case "$CRYPTO_RESOLVED" in + "$OPENSSL_PREFIX"/*) pass "bench_pq links the pinned OpenSSL ($CRYPTO_RESOLVED)" ;; + *) fail "bench_pq libcrypto '$CRYPTO_RESOLVED' is not the locked prefix $OPENSSL_PREFIX" ;; + esac + fi +fi +case "${OQSPROVIDER_MODULE:-}" in + "$HERE"/vendor/*) [ -f "$OQSPROVIDER_MODULE" ] && pass "oqs-provider module is the vendored one" \ + || fail "vendored oqs-provider module missing" ;; + *) fail "oqs-provider module is not under vendor/ (${OQSPROVIDER_MODULE:-unset})" ;; +esac + +echo "== correctness 2: Rust harness micro-runs + cross-implementation sizes ==" +if [ "$HAVE_CARGO" = 1 ]; then + for spec in "kem ML-KEM-768" "sig ML-DSA-65"; do + kind="${spec%% *}"; alg="${spec#* }" + ./bench/rust/target/release/pqb-rust --kind "$kind" --alg "$alg" "${MICRO[@]}" \ + >> "$KEMSIG" 2>/dev/null && pass "pqb-rust $alg" || fail "pqb-rust $alg" + ./bench/rust-tls/target/release/pqb-rust-tls --kind "$kind" --alg "$alg" "${MICRO[@]}" \ + >> "$KEMSIG" 2>/dev/null && pass "pqb-rust-tls (aws-lc-rs) $alg" || fail "aws-lc-rs $alg" + done +else + skip "Rust micro-runs (cargo/harnesses unavailable)" +fi + +echo "== correctness 3: TLS stacks + native no-provider negative control ==" +PKI="$T/pki"; mkdir -p "$PKI" +gen_cert() { # replicates run_tls.sh gen_cert (ed25519, with the SAN webpki needs) + "$OSSL" req -x509 -new -newkey ed25519 -nodes -keyout "$PKI/ca.key" -out "$PKI/ca.pem" \ + -days 30 -subj "/CN=PQB Selftest CA" >/dev/null 2>&1 && + "$OSSL" genpkey -algorithm ed25519 -out "$PKI/sv.key" >/dev/null 2>&1 && + "$OSSL" req -new -key "$PKI/sv.key" -out "$PKI/sv.csr" -subj "/CN=localhost" \ + -addext "subjectAltName = DNS:localhost" >/dev/null 2>&1 && + "$OSSL" x509 -req -in "$PKI/sv.csr" -CA "$PKI/ca.pem" -CAkey "$PKI/ca.key" \ + -copy_extensions copyall -out "$PKI/sv.pem" -days 30 -CAcreateserial >/dev/null 2>&1 +} +gen_cert && pass "test PKI generated (in $T, never bench/tls/pki)" || fail "test PKI generation" +TLSARGS=(--ca "$PKI/ca.pem" --cert "$PKI/sv.pem" --key "$PKI/sv.key" \ + --connections 5 --warmup 2 --sig-alg ed25519) +ROWS="$T/tls_rows.jsonl"; : > "$ROWS" + +./bench/tls/bench_tls --group X25519 "${TLSARGS[@]}" --label "X25519+ed25519" \ + --phase baseline --implementation openssl-native >> "$ROWS" 2>/dev/null +python3 -c "import json,sys; r=json.loads(open(sys.argv[1]).readlines()[-1]); assert r['enabled'] and not r['have_oqs_provider']" "$ROWS" \ + && pass "openssl-native baseline handshakes (no provider loaded)" \ + || fail "openssl-native baseline cell" + +./bench/tls/bench_tls --group frodo640aes "${TLSARGS[@]}" --label negctl \ + --phase phase0 --implementation openssl-native >> "$ROWS" 2>/dev/null +python3 -c "import json,sys; r=json.loads(open(sys.argv[1]).readlines()[-1]); assert not r['enabled'] and 'group-not-supported' in r['reason']" "$ROWS" \ + && pass "negative control: provider-only group REJECTED in native mode" \ + || fail "native-mode isolation (provider algorithm accepted?)" + +if [ -n "${OQSPROVIDER_MODULE:-}" ] && [ -f "$OQSPROVIDER_MODULE" ]; then + OPENSSL_MODULES="$(dirname "$OQSPROVIDER_MODULE")" \ + ./bench/tls/bench_tls --group X25519MLKEM768 "${TLSARGS[@]}" \ + --label "X25519MLKEM768+ed25519" --phase phase0 --implementation oqs-provider \ + >> "$ROWS" 2>/dev/null + python3 -c "import json,sys; r=json.loads(open(sys.argv[1]).readlines()[-1]); assert r['enabled'] and r['have_oqs_provider']" "$ROWS" \ + && pass "oqs-provider phase0 cell (provider loads + negotiates)" \ + || fail "oqs-provider cell" +else + fail "oqs-provider module not found (make build should have produced it)" +fi + +if [ "$HAVE_CARGO" = 1 ]; then + ./bench/rust-tls/target/release/pqb-rust-tls --group X25519 "${TLSARGS[@]}" \ + --label "X25519+ed25519" --phase baseline >> "$ROWS" 2>/dev/null + python3 -c "import json,sys; r=json.loads(open(sys.argv[1]).readlines()[-1]); assert r['enabled'] and r['implementation']=='rustls-awslc'" "$ROWS" \ + && pass "rustls-awslc baseline cell (webpki accepts the SAN certs)" \ + || fail "rustls-awslc cell" +else + skip "rustls-awslc cell (cargo unavailable)" +fi + +echo "== correctness 4: schema round-trip through assemble.py ==" +cat > "$T/meta.env" </dev/null 2>"$T/assemble.err" +python3 - "$T/result.json" $HAVE_CARGO <<'PY' && pass "round-trip: schema 2.0.0, totals, acceleration, phases, sums, sizes agree" || fail "schema round-trip (see above)" +import json,sys +d=json.load(open(sys.argv[1])); have_cargo=sys.argv[2]=="1" +assert d["schema_version"]=="2.0.0", "schema version" +prims=[r for r in d["kem"]+d["sig"] if r.get("enabled")] +assert prims and all(r.get("total",{}).get("sum_of_medians_ns") for r in prims), "totals" +assert all(r.get("acceleration") for r in prims), "acceleration fields" +assert not any("SIZE MISMATCH" in w for w in d["warnings"]), "cross-implementation size mismatch" +cells=[c for c in d["tls"]["matrix"] if c.get("enabled")] +assert cells and all(c.get("phase") and c.get("sig_alg") and c.get("implementation") for c in cells), "tls fields" +for c in cells: # covered cells must have complete, per-stack-priced sums + if c["implementation"]=="openssl-native" and c["phase"]=="baseline": + assert c["handshake_primitive_sum"]["complete"], "native baseline sum incomplete" + assert all(x["implementation"] in ("liboqs","openssl") for x in c["handshake_primitive_sum"]["components"]), "wrong pricing stack" + if have_cargo and c["implementation"]=="rustls-awslc": + assert all(x["implementation"]=="aws-lc-rs" for x in c["handshake_primitive_sum"]["components"]), "rustls cell not priced from aws-lc-rs" +PY + +echo "== hygiene 5: schema-1.0.0 compatibility fixture through merge.py ==" +FIX=results/rasberrypi5-20260614T205226Z.json +if [ -f "$FIX" ]; then + python3 analyze/merge.py "$FIX" -o "$T/merged_v1.json" >/dev/null 2>&1 + python3 - "$FIX" "$T/merged_v1.json" <<'PY' && pass "v1 fixture: rows preserved, implementation/phase/totals injected" || warnf "v1 compatibility regressed" +import json,sys +src=json.load(open(sys.argv[1])); m=json.load(open(sys.argv[2])) +want=sum(len(r.get("operations") or {}) for k in ("kem","sig") for r in src[k] if r.get("enabled")) +got=len(m["kem"])+len(m["sig"]) +assert got==want, f"row count {got}!={want}" +assert all(r.get("implementation") for r in m["kem"]+m["sig"]), "implementation injection" +assert all(r.get("total_sum_of_medians_ns") is not None for r in m["kem"]+m["sig"]), "derived totals" +assert all(r.get("phase") for r in m["tls"]), "phase inference" +PY +else + warnf "fixture $FIX missing — it is the schema-1.0.0 compatibility fixture (see published_runs.txt); restore it" +fi + +echo "== hygiene 6: published_runs manifest vs disk vs committed merged.json ==" +python3 - <<'PY' && pass "manifest entries exist; merged.json matches the published set" || warnf "manifest/merged.json drift — re-run 'make merge'" +import json,os +entries=[l.strip() for l in open("analyze/published_runs.txt") + if l.strip() and not l.startswith("#")] +missing=[e for e in entries if not os.path.isfile("results/"+e)] +assert not missing, f"missing on disk: {missing}" +m=json.load(open("dashboard/data/merged.json")) +assert sorted(r["source_file"] for r in m["runs"])==sorted(entries), "merged.json != manifest" +PY + +echo "== hygiene 7: absence rows propagate (never silently dropped) ==" +python3 - <<'PY' && pass "merged.json carries kem/sig/tls _absent arrays with reasons" || warnf "absence arrays missing from merged.json" +import json +m=json.load(open("dashboard/data/merged.json")) +assert all(k in m for k in ("kem_absent","sig_absent","tls_absent")) +assert m["tls_absent"] and all(a.get("reason") for a in m["tls_absent"]) +PY + +echo +echo "selftest: $PASS passed, $FAIL failed, $WARN hygiene warnings, $SKIP skipped" +[ "$FAIL" -eq 0 ] || { echo "CORRECTNESS FAILURES — do not trust measurement output until fixed."; exit 1; } +[ "$WARN" -gt 0 ] && echo "(hygiene warnings do not block runs — fix when convenient)" +exit 0 diff --git a/tools/benchmarks/pqc/scripts/test-fedora.sh b/tools/benchmarks/pqc/scripts/test-fedora.sh new file mode 100755 index 0000000..d5cc958 --- /dev/null +++ b/tools/benchmarks/pqc/scripts/test-fedora.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# ============================================================================= +# make test-fedora — run check/build/test (and with SMOKE=1 a smoke run) +# inside a Fedora container, from a pristine copy of the CURRENT working tree. +# +# WHAT THIS COVERS: the class of bug that Mac + Pi testing structurally cannot +# catch — Red Hat packaging (openssl-devel), the lib64 install layout, dnf +# paths, and degradation on a machine with no governor control, no vcgencmd +# and no Pi-shaped thermal telemetry (the container has none of these, which +# is exactly the machine shape that has broken in the field). +# +# WHAT THIS DOES NOT COVER: measurements. Timings inside a container/VM are +# meaningless and nothing produced here is a benchmark result; runs are +# NOSUDO and land in the container's copy, never in this tree. On Apple +# Silicon the container is aarch64 Fedora (lib64 reproduces natively); +# ARCH=amd64 forces x86_64 under emulation for compile-and-run checks. +# +# Engine: podman or docker, autodetected. Image: fedora:42. +# ============================================================================= +set -euo pipefail +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +ENGINE="" +for e in podman docker; do + command -v "$e" >/dev/null 2>&1 && "$e" info >/dev/null 2>&1 && { ENGINE="$e"; break; } +done +[ -n "$ENGINE" ] || { echo "no working container engine (podman or docker) — install one, e.g. 'brew install podman && podman machine init --now'" >&2; exit 1; } + +PLATFORM_ARG="" +[ "${ARCH:-}" = "amd64" ] && PLATFORM_ARG="--platform=linux/amd64" + +SMOKE_CMD="" +if [ "${SMOKE:-0}" = "1" ]; then + SMOKE_CMD='echo "===== make smoke (NOSUDO, container) =====" && NOSUDO=1 make smoke' +fi + +echo "[test-fedora] engine=$ENGINE image=fedora:42 ${ARCH:+arch=$ARCH }(source tree mounted read-only)" +# shellcheck disable=SC2086 +"$ENGINE" run --rm $PLATFORM_ARG -v "$HERE":/src:ro fedora:42 bash -c ' + set -euo pipefail + echo "== $(grep PRETTY /etc/os-release | cut -d= -f2 | tr -d \") $(uname -m) ==" + dnf install -y -q gcc gcc-c++ make cmake ninja-build git python3 perl \ + openssl openssl-devel pkgconf-pkg-config util-linux rsync + # pristine copy: never build into the mounted host tree + rsync -a --exclude vendor/ --exclude "bench/rust/target/" \ + --exclude "bench/rust-tls/target/" --exclude "results/.work-*" \ + --exclude "setup/versions.lock" \ + --exclude "bench/kem_sig/bench_pq" --exclude "bench/tls/bench_tls" \ + --exclude "bench/tls/pki/" --exclude "*.o" \ + /src/ /work/ + cd /work + make check + make build + make test + '"$SMOKE_CMD"' + echo "[test-fedora] ALL GREEN" +' diff --git a/tools/benchmarks/pqc/setup/lib_platform.sh b/tools/benchmarks/pqc/setup/lib_platform.sh new file mode 100644 index 0000000..f4a8a5f --- /dev/null +++ b/tools/benchmarks/pqc/setup/lib_platform.sh @@ -0,0 +1,342 @@ +# shellcheck shell=bash +# ============================================================================= +# lib_platform.sh — portable platform abstraction +# +# Sourced by setup/setup.sh and run.sh. Every operation that differs between the +# RPi5 (Debian/Ubuntu aarch64) measurement target and the macOS/Apple-Silicon +# dev box is funneled through one of these functions, so the *identical* codebase +# runs unchanged on both. Where a capability does not exist on a platform +# (governor control, core pinning, on-die thermal sensors), the function degrades +# gracefully and the caller records that it was unavailable — it never silently +# pretends the action happened. +# ============================================================================= + +# ---- platform detection ---------------------------------------------------- +# Sets: PQB_OS (macos|linux), PQB_ARCH, PQB_IS_RPI (1|0), PQB_RPI_MODEL +pqb_detect_platform() { + PQB_ARCH="$(uname -m)" + case "$(uname -s)" in + Darwin) PQB_OS="macos" ;; + Linux) PQB_OS="linux" ;; + *) PQB_OS="unknown" ;; + esac + + PQB_IS_RPI=0 + PQB_RPI_MODEL="" + if [ "$PQB_OS" = "linux" ] && [ -r /proc/device-tree/model ]; then + # /proc/device-tree/model is NUL-terminated + PQB_RPI_MODEL="$(tr -d '\0' < /proc/device-tree/model 2>/dev/null)" + case "$PQB_RPI_MODEL" in + *"Raspberry Pi"*) PQB_IS_RPI=1 ;; + esac + fi + export PQB_OS PQB_ARCH PQB_IS_RPI PQB_RPI_MODEL +} + +# ---- Linux distro family (for package-name hints and deps installs) -------- +# echoes: debian | fedora | arch | suse | unknown +# PQB_TEST_OS_RELEASE overrides the os-release path (test hook, used to +# exercise the per-distro output of make check on other platforms). +pqb_linux_family() { + local osr="${PQB_TEST_OS_RELEASE:-/etc/os-release}" id="" like="" + if [ -r "$osr" ]; then + id="$(. "$osr" 2>/dev/null; echo "${ID:-}")" + like="$(. "$osr" 2>/dev/null; echo "${ID_LIKE:-}")" + fi + case " $id $like " in + *debian*|*ubuntu*|*raspbian*) echo debian ;; + *fedora*|*rhel*|*centos*|*rocky*|*alma*) echo fedora ;; + *arch*) echo arch ;; + *suse*) echo suse ;; + *) echo unknown ;; + esac +} + +# ---- optimization-target resolution ---------------------------------------- +# Resolve THIS host's tuned build flags (the credibility anchor: identical, +# host-tuned flags for every candidate; the resolved values go into +# versions.lock and every results JSON): +# Linux aarch64 (the RPi5 target): -O3 -mcpu=cortex-a76 / "cortex-a76" +# Apple-silicon macOS (uname -m is -O3 -mcpu=native / "apple-mN" +# "arm64", NOT "aarch64" — the (label from the CPU brand string) +# old check missed Macs entirely +# and silently fell back to -O3) +# anything else: $TARGET_CFLAGS_FALLBACK / "generic-fallback" +# Each candidate flag set is probe-compiled first; a rejected flag falls back +# rather than failing the build. Rust harnesses mirror this via RUSTFLAGS in +# run.sh (cortex-a76 -> target-cpu=cortex-a76, apple-m* -> target-cpu=native). +pqb_choose_cflags() { # sets + exports BENCH_CFLAGS, CFLAGS_TARGET + local cc="${CC:-cc}" tmp probe + tmp="$(mktemp -d)" && probe="$tmp/probe.c" && echo 'int main(void){return 0;}' > "$probe" + BENCH_CFLAGS="${TARGET_CFLAGS_FALLBACK:--O3}" + CFLAGS_TARGET="generic-fallback" + # shellcheck disable=SC2086 + if [ "$PQB_OS" = "linux" ] && [ "$PQB_ARCH" = "aarch64" ] && \ + $cc ${TARGET_CFLAGS_RPI5:--O3 -mcpu=cortex-a76} "$probe" -o "$probe.out" 2>/dev/null; then + BENCH_CFLAGS="${TARGET_CFLAGS_RPI5:--O3 -mcpu=cortex-a76}" + CFLAGS_TARGET="cortex-a76" + elif [ "$PQB_OS" = "macos" ] && [ "$PQB_ARCH" = "arm64" ] && \ + $cc -O3 -mcpu=native "$probe" -o "$probe.out" 2>/dev/null; then + BENCH_CFLAGS="-O3 -mcpu=native" + local brand + brand="$(sysctl -n machdep.cpu.brand_string 2>/dev/null || echo 'apple silicon')" + CFLAGS_TARGET="$(printf '%s' "$brand" | tr '[:upper:] ' '[:lower:]-')" + fi + rm -rf "$tmp" + export BENCH_CFLAGS CFLAGS_TARGET +} + +# ---- friendly logging ------------------------------------------------------ +pqb_log() { printf '\033[1;34m[pqb]\033[0m %s\n' "$*" >&2; } +pqb_warn() { printf '\033[1;33m[pqb WARN]\033[0m %s\n' "$*" >&2; } +pqb_err() { printf '\033[1;31m[pqb ERR]\033[0m %s\n' "$*" >&2; } + +# ---- hostname resolution --------------------------------------------------- +# A "good" host id is non-empty, not localhost, and not an avahi/macOS +# auto-assigned "unknown" placeholder (which is what shows up when no +# real hostname is set — that produced the ugly results filename before). +_pqb_good_host() { + local h="$1" + [ -n "$h" ] || return 1 + case "$h" in + localhost|localhost.*) return 1 ;; + esac + printf '%s' "$h" | grep -Eq '^[Uu]nknown[0-9a-fA-F]{6,}$' && return 1 + return 0 +} + +# Resolve a readable, stable host identifier, falling through: +# $HOSTNAME -> `hostname` -> hostnamectl --static (Linux) / +# scutil --get LocalHostName (macOS) -> short machine id (last resort). +# Domain suffixes (.home/.local/...) are stripped. On the RPi5 this yields the +# actual pi hostname; on this Mac it falls through to LocalHostName. +pqb_resolve_hostname() { + local cands=() c h + cands+=("${HOSTNAME:-}") + cands+=("$(hostname 2>/dev/null || true)") + if [ "${PQB_OS:-}" = "linux" ]; then + cands+=("$(hostnamectl --static 2>/dev/null || true)") + elif [ "${PQB_OS:-}" = "macos" ]; then + cands+=("$(scutil --get LocalHostName 2>/dev/null || true)") + fi + for c in "${cands[@]}"; do + h="${c%%.*}" # strip domain suffix + if _pqb_good_host "$h"; then echo "$h"; return 0; fi + done + # last resort: a short, stable machine id so files never collide as "unknown" + local mid="" + if [ -r /etc/machine-id ]; then + mid="$(cut -c1-12 /etc/machine-id 2>/dev/null)" + elif [ "${PQB_OS:-}" = "macos" ]; then + mid="$(ioreg -rd1 -c IOPlatformExpertDevice 2>/dev/null \ + | awk -F'"' '/IOPlatformUUID/{print $4}' | tr -d '-' | cut -c1-12)" + fi + echo "host-${mid:-unknown}" +} + +# ---- CPU governor ---------------------------------------------------------- +# Returns 0 if it set 'performance', 1 if unavailable. Prints the governor it +# left the system in on stdout. +# +# This is the ONLY privileged operation in the whole run (the sysfs governor +# files are root-writable only), so it is the only step allowed to escalate. +# The measurement itself runs as the invoking user — running everything under +# sudo bit us three times (root-owned results/.work-* dirs, cargo-as-root, +# root-owned bench/*/target artifacts). bench-run.sh caches credentials up +# front (sudo -v) and sets PQB_GOV_SUDO=1; writes then use non-interactive +# `sudo -n`, so a run can never stall on a mid-run password prompt. +pqb_set_governor_performance() { + if [ "$PQB_OS" = "linux" ] && [ -d /sys/devices/system/cpu/cpu0/cpufreq ]; then + local ok=1 g + for g in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do + if [ -w "$g" ]; then + echo performance > "$g" 2>/dev/null || ok=0 + elif [ "${PQB_GOV_SUDO:-0}" = 1 ] && command -v sudo >/dev/null 2>&1; then + echo performance | sudo -n tee "$g" >/dev/null 2>&1 || ok=0 + else + ok=0 + fi + done + if [ "$ok" = 1 ]; then + cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null + return 0 + fi + # cpupower fallback, same single-step escalation rules + if command -v cpupower >/dev/null 2>&1; then + if cpupower frequency-set -g performance >/dev/null 2>&1 \ + || { [ "${PQB_GOV_SUDO:-0}" = 1 ] && command -v sudo >/dev/null 2>&1 \ + && sudo -n cpupower frequency-set -g performance >/dev/null 2>&1; }; then + echo performance; return 0 + fi + fi + pqb_warn "could not set governor to performance (use 'make run' so this one step can escalate, or accept the non-baseline demerit)" + cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null || echo "unknown" + return 1 + fi + # macOS / other: no userspace governor control. + echo "unavailable" + return 1 +} + +pqb_get_governor() { + if [ "$PQB_OS" = "linux" ] && [ -r /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ]; then + cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor + else + echo "unavailable" + fi +} + +# ---- core pinning ---------------------------------------------------------- +# pqb_taskset_prefix -> echoes a command prefix to pin to that core, or +# empty string if pinning is unavailable (caller warns). +pqb_taskset_prefix() { + local core="$1" + if command -v taskset >/dev/null 2>&1; then + echo "taskset -c $core" + elif command -v numactl >/dev/null 2>&1; then + echo "numactl --physcpubind=$core" + else + echo "" # no pinning available (e.g. macOS) + fi +} + +# ---- thermal / clock sampling ---------------------------------------------- +# pqb_sample_thermal -> one CSV line: epoch_s,arm_clock_hz,temp_c,throttled_hex +# Fields that cannot be read on a platform are emitted as empty (no fake zeros). +pqb_sample_thermal() { + local ts clk temp thr + ts="$(date +%s)" + clk=""; temp=""; thr="" + + if command -v vcgencmd >/dev/null 2>&1; then + # Raspberry Pi: authoritative SoC sensors. + clk="$(vcgencmd measure_clock arm 2>/dev/null | sed -n 's/.*=//p')" + temp="$(vcgencmd measure_temp 2>/dev/null | sed -n "s/temp=\([0-9.]*\).*/\1/p")" + thr="$(vcgencmd get_throttled 2>/dev/null | sed -n 's/.*=//p')" + elif [ "$PQB_OS" = "linux" ]; then + # Generic Linux fallback (cpufreq + thermal_zone). + local f + f=/sys/devices/system/cpu/cpu${PQB_BENCH_CORE:-0}/cpufreq/scaling_cur_freq + [ -r "$f" ] && clk="$(( $(cat "$f") * 1000 ))" # kHz -> Hz + if [ -r /sys/class/thermal/thermal_zone0/temp ]; then + local milli; milli="$(cat /sys/class/thermal/thermal_zone0/temp)" + temp="$(awk -v m="$milli" 'BEGIN{printf "%.1f", m/1000}')" + fi + fi + # macOS: live per-core freq/temp require sudo powermetrics; we intentionally + # leave them empty rather than emit misleading values. (Smoke test only.) + + printf '%s,%s,%s,%s\n' "$ts" "$clk" "$temp" "$thr" +} + +# pqb_throttled_active -> 0 if thermal throttling currently/has +# occurred, 1 otherwise. RPi get_throttled bit 0 = under-voltage now, +# bit 1 = arm freq capped now, bit 2 = currently throttled, +# bit 3 = soft temp limit active (and bits 16-19 = "has occurred" latches). +pqb_throttled_active() { + local hex="${1#0x}" + [ -z "$hex" ] && return 1 + local val=$(( 16#$hex )) + # bit2 (throttling now) or bit18 (throttling has occurred) + if [ $(( val & 0x4 )) -ne 0 ] || [ $(( val & 0x40000 )) -ne 0 ]; then + return 0 + fi + return 1 +} + +# ---- CPU feature / crypto-extension detection ------------------------------ +# Echoes a JSON object describing NEON + SHA3/SHA512 acceleration. Consumed +# verbatim by env metadata so results record whether Keccak accel is in use. +pqb_cpu_features_json() { + local neon=false sha2=false sha3=false sha512=false aes=false pmull=false src="unknown" + if [ "$PQB_OS" = "linux" ] && [ -r /proc/cpuinfo ]; then + # ARM /proc/cpuinfo has a 'Features' line; x86 has 'flags' instead. The + # grep MUST NOT propagate failure: under run.sh's `set -e -o pipefail` a + # missing 'Features' line (any x86 box) previously killed the whole run + # with no diagnostic, right after the thermal sampler started. + local feats + feats="$(grep -m1 -i '^Features' /proc/cpuinfo 2>/dev/null | tr 'A-Z' 'a-z' || true)" + if [ -n "$feats" ]; then + src="/proc/cpuinfo (Features)" + case "$feats" in *" asimd"*|*"neon"*) neon=true;; esac + case "$feats" in *" sha2"*) sha2=true;; esac + case "$feats" in *" sha3"*) sha3=true;; esac + case "$feats" in *" sha512"*) sha512=true;; esac + case "$feats" in *" aes"*) aes=true;; esac + case "$feats" in *" pmull"*) pmull=true;; esac + else + # x86: map the 1:1 equivalents from the 'flags' line (aes -> AES-NI, + # sha_ni -> SHA-2 instructions, pclmulqdq -> carry-less multiply). + # neon/sha3/sha512 stay false: they are ARM-specific extensions. + src="/proc/cpuinfo (flags, x86)" + local flags + flags="$(grep -m1 -i '^flags' /proc/cpuinfo 2>/dev/null | tr 'A-Z' 'a-z' || true)" + case "$flags" in *" aes"*) aes=true;; esac + case "$flags" in *" sha_ni"*) sha2=true;; esac + case "$flags" in *" pclmulqdq"*) pmull=true;; esac + fi + elif [ "$PQB_OS" = "macos" ]; then + src="sysctl" + neon=true # all Apple Silicon has NEON/ASIMD + [ "$(sysctl -n hw.optional.arm.FEAT_SHA256 2>/dev/null)" = 1 ] && sha2=true + [ "$(sysctl -n hw.optional.arm.FEAT_SHA3 2>/dev/null)" = 1 ] && sha3=true + [ "$(sysctl -n hw.optional.arm.FEAT_SHA512 2>/dev/null)" = 1 ] && sha512=true + [ "$(sysctl -n hw.optional.arm.FEAT_AES 2>/dev/null)" = 1 ] && aes=true + [ "$(sysctl -n hw.optional.arm.FEAT_PMULL 2>/dev/null)" = 1 ] && pmull=true + fi + printf '{"source":"%s","neon":%s,"sha2":%s,"sha3":%s,"sha512":%s,"aes":%s,"pmull":%s}' \ + "$src" "$neon" "$sha2" "$sha3" "$sha512" "$aes" "$pmull" +} + +# ---- package installation -------------------------------------------------- +# pqb_install_build_deps -> installs compiler/cmake/openssl headers per platform. +pqb_install_build_deps() { + if [ "$PQB_OS" = "macos" ]; then + command -v brew >/dev/null 2>&1 || { pqb_err "Homebrew required on macOS: https://brew.sh"; return 1; } + pqb_log "installing build deps via Homebrew" + brew install cmake ninja openssl@3.5 git python3 >/dev/null || true + elif [ "$PQB_OS" = "linux" ]; then + local SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo" + case "$(pqb_linux_family)" in + debian) + pqb_log "installing build deps via apt (Debian family)" + $SUDO apt-get update -qq + # linux-cpupower provides the `cpupower` binary used by + # pqb_set_governor_performance. (Older releases shipped cpufrequtils, + # dropped in Debian 13/trixie — cpupower is the replacement.) + # libssl-dev: the openssl BINARY is not enough — liboqs/oqs-provider + # need headers + a linkable libcrypto (the Fedora lesson, same idea). + $SUDO apt-get install -y -qq \ + build-essential cmake ninja-build git python3 perl \ + libssl-dev pkg-config astyle doxygen \ + linux-cpupower util-linux >/dev/null + ;; + fedora) + pqb_log "installing build deps via dnf (Fedora/RHEL family)" + # openssl-devel is the critical one: Fedora ships the openssl binary + # separately from the development files, and the liboqs cmake build + # fails with 'Could NOT find OpenSSL (missing OPENSSL_CRYPTO_LIBRARY + # OPENSSL_INCLUDE_DIR)' without it. + $SUDO dnf install -y \ + gcc gcc-c++ make cmake ninja-build git python3 perl \ + openssl openssl-devel pkgconf-pkg-config \ + kernel-tools util-linux + ;; + arch) + pqb_warn "Arch detected (unverified platform) — install manually:" + echo " sudo pacman -S --needed base-devel cmake ninja git python openssl perl" >&2 + return 1 + ;; + suse) + pqb_warn "openSUSE detected (unverified platform) — install manually:" + echo " sudo zypper install gcc gcc-c++ make cmake ninja git python3 perl libopenssl-devel" >&2 + return 1 + ;; + *) + pqb_warn "unknown Linux family; install with your package manager:" + echo " C compiler, make, cmake, ninja, git, python3, perl, OpenSSL development files (headers + libcrypto)" >&2 + return 1 + ;; + esac + fi +} diff --git a/tools/benchmarks/pqc/setup/setup.sh b/tools/benchmarks/pqc/setup/setup.sh new file mode 100755 index 0000000..6829706 --- /dev/null +++ b/tools/benchmarks/pqc/setup/setup.sh @@ -0,0 +1,295 @@ +#!/usr/bin/env bash +# ============================================================================= +# setup.sh — build + pin the full PQ toolchain from scratch. +# +# ./setup/setup.sh # everything: deps, liboqs, openssl(if needed), oqs-provider +# ./setup/setup.sh liboqs # just liboqs +# ./setup/setup.sh openssl # just openssl (forced from source) +# ./setup/setup.sh provider # just oqs-provider +# ./setup/setup.sh deps # just OS packages +# +# Everything is installed under ./vendor/install (no system pollution). The exact +# resolved git commits + the optimization flags actually used are written to +# setup/versions.lock, which run.sh stamps into every results JSON. +# +# Identical flags for every candidate: -O3 -mcpu=cortex-a76 on the RPi5. On a +# non-A76 host (the macOS smoke box) we fall back to -O3 and RECORD that, so +# smoke-test numbers can never masquerade as the RPi5 baseline. +# ============================================================================= +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT="$(cd "$HERE/.." && pwd)" +# shellcheck source=setup/lib_platform.sh +source "$HERE/lib_platform.sh" +# shellcheck source=setup/versions.env +source "$HERE/versions.env" + +pqb_detect_platform +# set -e deaths must never be silent (see run.sh) +set -E # errtrace: without it the ERR trap does not fire inside functions +trap 'pqb_err "setup.sh aborted at line $LINENO while running: $BASH_COMMAND"' ERR + +VENDOR="$ROOT/vendor" +SRC="$VENDOR/src" +PREFIX="$VENDOR/install" +mkdir -p "$SRC" "$PREFIX" + +JOBS="$( (command -v nproc >/dev/null && nproc) || sysctl -n hw.ncpu 2>/dev/null || echo 4)" +LOGDIR="$VENDOR/logs" +mkdir -p "$LOGDIR" + +# run_logged — build steps must never fail silently. The old +# `cmake --build ... >/dev/null` pattern discarded compiler errors entirely +# when the generator was Ninja (unlike make, ninja merges the compiler's +# stderr into its own STDOUT — so >/dev/null swallowed the actual error and +# the run died with nothing but an exit code). Full output goes to a log +# file; on failure the tail is replayed so the real error is on screen. +run_logged() { + local name="$1"; shift + local log="$LOGDIR/$name.log" rc=0 + "$@" >"$log" 2>&1 || rc=$? + if [ "$rc" -ne 0 ]; then + pqb_err "step '$name' FAILED (exit $rc): $*" + pqb_err "last 30 lines of $log:" + tail -30 "$log" >&2 + return $rc + fi +} + +# ---- decide the real optimization flags for THIS host ---------------------- +# Detection lives in lib_platform.sh (pqb_choose_cflags): cortex-a76 on Linux +# aarch64, apple-mN via -mcpu=native on Apple-silicon macOS, fallback elsewhere. +choose_cflags() { + pqb_choose_cflags +} + +cc_version_string() { + local cc="${CC:-cc}" + "$cc" --version 2>/dev/null | head -1 +} + +git_pin() { # repo ref destdir + local repo="$1" ref="$2" dest="$3" + if [ -d "$dest/.git" ]; then + pqb_log "updating $(basename "$dest") -> $ref" + git -C "$dest" fetch -q --depth 1 origin "$ref" || git -C "$dest" fetch -q --tags origin + else + pqb_log "cloning $(basename "$dest") @ $ref" + git clone -q --depth 1 --branch "$ref" "$repo" "$dest" 2>/dev/null \ + || git clone -q "$repo" "$dest" + fi + git -C "$dest" checkout -q "$ref" 2>/dev/null || true + git -C "$dest" rev-parse HEAD +} + +# --------------------------------------------------------------------------- +build_liboqs() { + choose_cflags + # liboqs links libcrypto for AES/SHA-2 (OQS_USE_{AES,SHA2}_OPENSSL default + # ON), so it MUST build against the same pinned OpenSSL as everything else — + # otherwise bench_pq/bench_tls load two libcrypto versions in one process + # and the AES/SHA-2-dependent rows silently measure a different OpenSSL. + [ -n "${OPENSSL_PREFIX:-}" ] || locate_or_build_openssl + local dest="$SRC/liboqs" commit + commit="$(git_pin "$LIBOQS_REPO" "$LIBOQS_REF" "$dest")" + pqb_log "building liboqs ($LIBOQS_REF @ ${commit:0:12}) flags: $BENCH_CFLAGS openssl: $OPENSSL_PREFIX" + + # OQS_DIST_BUILD=OFF -> native build for the fixed target (no runtime CPU + # dispatch), so -mcpu=cortex-a76 fully drives codegen. The AArch64-optimized + # ML-KEM (mlkem-native) and AArch64 asm backends are enabled by default on + # aarch64 when DIST_BUILD is OFF (compile-time CPU features); verified post-build. + local GEN=(); command -v ninja >/dev/null 2>&1 && GEN=(-G Ninja) + # CMAKE_INSTALL_LIBDIR=lib pins ONE install layout on every platform: + # GNUInstallDirs defaults to lib64 on Red Hat family, which broke every + # hand-written path downstream (-L, rpath, the guards) while cmake's own + # find_package kept working — the root cause of the Fedora failure chain. + # Nothing outside this repo consumes vendor/install, so forcing lib is safe. + run_logged liboqs-configure cmake -S "$dest" -B "$dest/build" ${GEN[@]+"${GEN[@]}"} \ + -DCMAKE_INSTALL_PREFIX="$PREFIX" \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release \ + -DOQS_DIST_BUILD=OFF \ + -DOQS_BUILD_ONLY_LIB=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DOPENSSL_ROOT_DIR="$OPENSSL_PREFIX" \ + -DCMAKE_INSTALL_RPATH="$PREFIX/lib" \ + -DCMAKE_C_FLAGS="$BENCH_CFLAGS" + run_logged liboqs-build cmake --build "$dest/build" --parallel "$JOBS" + run_logged liboqs-install cmake --install "$dest/build" + + # Prove the optimized backend: capture the aarch64/native defines from the + # generated build config so versions.lock can show what was actually compiled. + local cfg="$dest/build/include/oqs/oqsconfig.h" + LIBOQS_OPT_DEFINES="(oqsconfig.h not found)" + if [ -r "$cfg" ]; then + # strip embedded double-quotes so the value stays valid in versions.lock + LIBOQS_OPT_DEFINES="$(grep -Ei 'AARCH64|ARM|_ASM|MLKEM_NATIVE|OPT_TARGET|CPU_EXT' "$cfg" \ + | grep -i 'define' | sed 's/^#define //' | tr -d '"' | tr '\n' ';' || true)" + fi + LIBOQS_COMMIT="$commit" +} + +# --------------------------------------------------------------------------- +locate_or_build_openssl() { + # OpenSSL is PINNED to the 3.5.x LTS line on every platform (macOS: keg-only + # Homebrew openssl@3.5; Debian 13 ships 3.5.x as the system openssl), so + # Mac-vs-Pi TLS numbers never compare different OpenSSL minor lines. Pass 1 + # accepts only 3.5.x; pass 2 falls back to any >= 3.5 with a loud warning and + # records the deviation via OPENSSL_COMMIT (stamped into every results JSON). + local want_major=3 want_minor=5 + if [ "${1:-}" != "force" ] && [ "${BUILD_OPENSSL:-0}" != 1 ]; then + # Reuse an already-vendored source build first: the phases run as separate + # processes, and the candidate walk below only looks at keg/system paths, + # so without this every phase would source-build OpenSSL again from + # scratch. Probing by EXECUTION is deliberate — it proves the binary + # resolves its own libssl/libcrypto (the rpath baked in below); an + # rpath-less build from before that fix fails this probe and is rebuilt. + # OPENSSL_COMMIT stays unset here: write_lock seeds it from the existing + # lock, which has the real commit. + if [ -x "$PREFIX/bin/openssl" ]; then + local vv + vv="$("$PREFIX/bin/openssl" version 2>/dev/null | awk '{print $2}')" + case "$vv" in + "$want_major.$want_minor".*) + OPENSSL_BIN="$PREFIX/bin/openssl" + OPENSSL_PREFIX="$PREFIX" + pqb_log "reusing vendored OpenSSL $vv at $PREFIX" + return 0 ;; + esac + fi + local pass cand + for pass in pinned fallback; do + for cand in /opt/homebrew/opt/openssl@3.5/bin/openssl \ + "$(command -v openssl || true)" \ + /opt/homebrew/opt/openssl@3/bin/openssl /usr/bin/openssl; do + [ -x "$cand" ] || continue + local v; v="$("$cand" version 2>/dev/null | awk '{print $2}')" + # NB: assign on separate lines. A single `local a=.. b=.. c="${b..}"` makes + # bash 5.2 declare all names (unset) *before* expanding any RHS, so the + # reference to `rest` here trips `set -u` (unbound variable) on the Pi. + local maj rest min + maj="${v%%.*}"; rest="${v#*.}"; min="${rest%%.*}" + if [ "$pass" = pinned ]; then + [ "${maj:-0}" = "$want_major" ] && [ "${min:-0}" = "$want_minor" ] || continue + else + [ "${maj:-0}" -gt "$want_major" ] 2>/dev/null || \ + { [ "${maj:-0}" -eq "$want_major" ] && [ "${min:-0}" -ge "$want_minor" ]; } 2>/dev/null \ + || continue + pqb_warn "no OpenSSL on the pinned 3.5.x line found; using $v at $cand — cross-machine TLS comparisons must check toolchain.openssl" + fi + OPENSSL_BIN="$cand" + OPENSSL_PREFIX="$(dirname "$(dirname "$cand")")" + OPENSSL_COMMIT="system:$v" + pqb_log "using existing OpenSSL $v at $cand" + return 0 + done + done + fi + pqb_log "building OpenSSL $OPENSSL_REF from source" + local dest="$SRC/openssl" commit + commit="$(git_pin "$OPENSSL_REPO" "$OPENSSL_REF" "$dest")" + # --libdir=lib: OpenSSL's own Configure defaults to lib64 on Red Hat-family + # x86_64 — same one-layout pin as CMAKE_INSTALL_LIBDIR=lib for the cmake + # projects (downstream -L/rpath/guards all assume vendor/install/lib). + # -Wl,-rpath: without it the installed bin/openssl resolves libssl/libcrypto + # from the SYSTEM path (on Fedora that's the older 3.2.x — symbol-version + # errors on every invocation), because the source build only happens on + # hosts whose system OpenSSL is older than the pin. + ( cd "$dest" \ + && run_logged openssl-configure ./Configure --prefix="$PREFIX" --openssldir="$PREFIX/ssl" \ + --libdir=lib shared "-Wl,-rpath,$PREFIX/lib" \ + && run_logged openssl-build make -j"$JOBS" \ + && run_logged openssl-install make install_sw \ + && run_logged openssl-install-ssldirs make install_ssldirs ) + # install_ssldirs: install_sw alone ships no openssl.cnf; every `openssl + # req` (PKI generation) then fails with "Can't open .../ssl/openssl.cnf" + OPENSSL_BIN="$PREFIX/bin/openssl" + OPENSSL_PREFIX="$PREFIX" + OPENSSL_COMMIT="$commit" +} + +# --------------------------------------------------------------------------- +build_oqs_provider() { + [ -n "${OPENSSL_PREFIX:-}" ] || locate_or_build_openssl + local dest="$SRC/oqs-provider" commit + commit="$(git_pin "$OQSPROVIDER_REPO" "$OQSPROVIDER_REF" "$dest")" + pqb_log "building oqs-provider ($OQSPROVIDER_REF @ ${commit:0:12})" + local GEN=(); command -v ninja >/dev/null 2>&1 && GEN=(-G Ninja) + run_logged provider-configure cmake -S "$dest" -B "$dest/build" ${GEN[@]+"${GEN[@]}"} \ + -DCMAKE_INSTALL_PREFIX="$PREFIX" \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release \ + -DOPENSSL_ROOT_DIR="$OPENSSL_PREFIX" \ + -Dliboqs_DIR="$PREFIX/lib/cmake/liboqs" \ + -DCMAKE_INSTALL_RPATH="$PREFIX/lib" \ + -DCMAKE_C_FLAGS="${BENCH_CFLAGS:-$TARGET_CFLAGS_FALLBACK}" + run_logged provider-build cmake --build "$dest/build" --parallel "$JOBS" + run_logged provider-install cmake --install "$dest/build" || true + # Provider .so lands under .../lib/ossl-modules or .../oqsprovider + OQSPROVIDER_MODULE="$(find "$PREFIX" "$dest/build" -name 'oqsprovider.*' \( -name '*.so' -o -name '*.dylib' \) 2>/dev/null | head -1)" + OQSPROVIDER_COMMIT="$commit" +} + +# --------------------------------------------------------------------------- +write_lock() { + choose_cflags 2>/dev/null || true + local lock="$HERE/versions.lock" + # Partial runs (e.g. `setup.sh provider`) must not erase the provenance of + # components built earlier: seed any variable NOT set by this invocation from + # the existing lock, so the lock always describes the full installed state. + if [ -f "$lock" ]; then + local k v + while IFS='=' read -r k v; do + case "$k" in ''|\#*) continue ;; esac + v="${v%\"}"; v="${v#\"}" + case "$k" in + LIBOQS_COMMIT|LIBOQS_OPT_DEFINES|OPENSSL_BIN|OPENSSL_PREFIX|OPENSSL_COMMIT|OQSPROVIDER_COMMIT|OQSPROVIDER_MODULE) + eval ": \"\${$k:=\$v}\"" ;; + esac + done < "$lock" + fi + { + echo "# Auto-generated by setup.sh — exact toolchain provenance. Stamped into results JSON." + echo "PQB_BUILD_HOST_OS=$PQB_OS" + echo "PQB_BUILD_HOST_ARCH=$PQB_ARCH" + echo "PQB_IS_RPI=$PQB_IS_RPI" + echo "PQB_RPI_MODEL=\"${PQB_RPI_MODEL}\"" + echo "BENCH_CFLAGS=\"${BENCH_CFLAGS:-unknown}\"" + echo "CFLAGS_TARGET=\"${CFLAGS_TARGET:-unknown}\"" + echo "CC_VERSION=\"$(cc_version_string)\"" + echo "LIBOQS_REF=\"$LIBOQS_REF\"" + echo "LIBOQS_COMMIT=\"${LIBOQS_COMMIT:-not-built}\"" + echo "LIBOQS_OPT_DEFINES=\"${LIBOQS_OPT_DEFINES:-}\"" + echo "OPENSSL_BIN=\"${OPENSSL_BIN:-}\"" + echo "OPENSSL_PREFIX=\"${OPENSSL_PREFIX:-}\"" + echo "OPENSSL_COMMIT=\"${OPENSSL_COMMIT:-not-built}\"" + echo "OQSPROVIDER_REF=\"$OQSPROVIDER_REF\"" + echo "OQSPROVIDER_COMMIT=\"${OQSPROVIDER_COMMIT:-not-built}\"" + echo "OQSPROVIDER_MODULE=\"${OQSPROVIDER_MODULE:-}\"" + echo "PREFIX=\"$PREFIX\"" + } > "$lock" + pqb_log "wrote $lock" + cat "$lock" >&2 +} + +# ---- dispatch -------------------------------------------------------------- +main() { + local what="${1:-all}" + case "$what" in + deps) pqb_install_build_deps ;; + liboqs) build_liboqs; write_lock ;; + openssl) locate_or_build_openssl force; write_lock ;; + provider) build_oqs_provider; write_lock ;; + all) + pqb_install_build_deps + build_liboqs + locate_or_build_openssl + build_oqs_provider + write_lock + pqb_log "setup complete. Next: ./run.sh --smoke" + ;; + *) pqb_err "unknown target: $what (deps|liboqs|openssl|provider|all)"; exit 2 ;; + esac +} +main "$@" diff --git a/tools/benchmarks/pqc/setup/versions.env b/tools/benchmarks/pqc/setup/versions.env new file mode 100644 index 0000000..714886b --- /dev/null +++ b/tools/benchmarks/pqc/setup/versions.env @@ -0,0 +1,70 @@ +# ============================================================================= +# Pinned upstream versions for the PQ benchmark toolchain. +# +# These are the *intended* refs. setup/setup.sh clones each at the tag below +# and then records the *actually resolved* commit hash into setup/versions.lock, +# which is stamped verbatim into every results JSON. That way a results file is +# always traceable to exact source, even if a tag is ever re-pointed upstream. +# +# Override any of these from the environment, e.g.: +# LIBOQS_REF=main ./setup/setup.sh +# ============================================================================= + +# liboqs: KEM/signature implementations. >= 0.15.0 ships the AArch64-optimized +# ML-KEM backend (mlkem-native). We enable it explicitly in setup.sh. +LIBOQS_REPO="${LIBOQS_REPO:-https://github.com/open-quantum-safe/liboqs.git}" +LIBOQS_REF="${LIBOQS_REF:-0.15.0}" + +# OpenSSL — PINNED to the 3.5.x LTS line on every platform so Mac-vs-Pi TLS +# numbers never compare different OpenSSL minor lines (>= 3.5 is also the +# requirement for native ML-KEM/ML-DSA/SLH-DSA and PQ TLS 1.3 server auth). +# macOS: keg-only Homebrew openssl@3.5 (brew install openssl@3.5) +# Debian 13: the system openssl package is already 3.5.x (verified from +# Debian packaging metadata; confirm on the Pi with +# `openssl version`) +# setup.sh prefers a 3.5.x binary, falls back to any >= 3.5 with a warning, +# and only builds the ref below from source when nothing suitable exists or +# BUILD_OPENSSL=1 is set. The exact version used is always recorded in +# versions.lock (OPENSSL_COMMIT) and stamped into every results JSON. +OPENSSL_REPO="${OPENSSL_REPO:-https://github.com/openssl/openssl.git}" +OPENSSL_REF="${OPENSSL_REF:-openssl-3.5.7}" + +# oqs-provider >= 0.9.0 — wires liboqs algorithms into OpenSSL as a provider, +# giving us PQ KEM groups and PQ signature certs for the TLS layer. +OQSPROVIDER_REPO="${OQSPROVIDER_REPO:-https://github.com/open-quantum-safe/oqs-provider.git}" +OQSPROVIDER_REF="${OQSPROVIDER_REF:-0.9.0}" + +# RustCrypto pure-Rust crates (bench/rust, the `rustcrypto` measurement +# group). Cargo.toml pins these EXACTLY ("=x.y.z") and Cargo.lock is +# committed; the values here are the documented intent (change both together). +# All three are pure Rust (no liboqs/PQClean/FFI in the dependency tree), +# pre-1.0 and unaudited — fine for benchmarking, stated in README. slh-dsa +# deliberately tracks the current 0.2.0-rc line (we measure performance, so we +# measure the current implementation), pinned to an exact rc. +RUST_MLKEM_VERSION="0.3.2" +RUST_MLDSA_VERSION="0.1.1" +RUST_SLHDSA_VERSION="0.2.0-rc.5" +# Pure-Rust classical baselines (dalek crates) — the in-family X25519/Ed25519 +# anchors for the rustcrypto group, mirroring the C side's OpenSSL baselines. +RUST_X25519_DALEK_VERSION="3.0.0" +RUST_ED25519_DALEK_VERSION="3.0.0" + +# rustls TLS stack (bench/rust-tls, the `rustls-awslc` TLS group + the +# `aws-lc-rs` primitive pricing rows). Exact pins in that crate's Cargo.toml; +# Cargo.lock committed. ML-DSA rides rustls-post-quantum/aws-lc-rs-unstable +# (rows carry unstable_features:true). +RUST_RUSTLS_VERSION="0.23.42" +RUST_RUSTLS_PQ_VERSION="0.2.4" +RUST_AWS_LC_RS_VERSION="1.17.3" + +# Identical optimization flags for every candidate (the credibility anchor). +# cortex-a76 is the RPi5 core. On non-A76 hosts (e.g. the macOS smoke box) +# setup.sh substitutes a safe fallback and records which flags were *actually* +# used in versions.lock + results JSON, so smoke numbers are never mistaken for +# the RPi5 baseline. +TARGET_CFLAGS_RPI5="${TARGET_CFLAGS_RPI5:--O3 -mcpu=cortex-a76}" +TARGET_CFLAGS_FALLBACK="${TARGET_CFLAGS_FALLBACK:--O3}" + +# Pinned core for taskset on the RPi5 (4 cores: 0-3). Core 3 is chosen to stay +# away from CPU0 where the kernel tends to steer IRQs/RPS. Documented in README. +BENCH_CORE="${BENCH_CORE:-3}" From f726095fd5faed40f91ea9a518fbfeab014463b3 Mon Sep 17 00:00:00 2001 From: megonen Date: Fri, 31 Jul 2026 07:09:15 +0300 Subject: [PATCH 02/11] =?UTF-8?q?pqc:=20refresh=20snapshot=20@=201871915?= =?UTF-8?q?=20=E2=80=94=20new=20RPi5=20baseline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Baseline re-measured on the same Pi 5 by the narrowed-sudo runner: medians agree with the previous baseline within ±0.2% (primitives) and ±0.6% (TLS), so rasberrypi5-20260720T143239Z is retired to history and rasberrypi5-20260730T212145Z becomes the published reference run. Upstream commit 84946c4. (cherry picked from commit 7b0bfc1d3bd0d1544bf4486b7d51f5b6ae761a35) --- tools/benchmarks/pqc/.gitignore | 1 + .../benchmarks/pqc/analyze/published_runs.txt | 12 +- .../benchmarks/pqc/dashboard/data/merged.json | 3264 +-- .../results/rasberrypi5-20260730T212145Z.json | 21260 ++++++++++++++++ 4 files changed, 22902 insertions(+), 1635 deletions(-) create mode 100644 tools/benchmarks/pqc/results/rasberrypi5-20260730T212145Z.json diff --git a/tools/benchmarks/pqc/.gitignore b/tools/benchmarks/pqc/.gitignore index 0d255df..a0c6d6c 100644 --- a/tools/benchmarks/pqc/.gitignore +++ b/tools/benchmarks/pqc/.gitignore @@ -68,6 +68,7 @@ bench/rust-tls/target/ # copies of this .gitignore don't silently exclude the published baseline; # the file was originally force-added on the Pi). !results/rasberrypi5-20260720T143239Z.json +!results/rasberrypi5-20260730T212145Z.json # Published 2026-07-30: Apple M4 Pro + Fedora 44 x86_64 cross-platform runs # (see analyze/published_runs.txt for provenance) diff --git a/tools/benchmarks/pqc/analyze/published_runs.txt b/tools/benchmarks/pqc/analyze/published_runs.txt index f15466a..aee216b 100644 --- a/tools/benchmarks/pqc/analyze/published_runs.txt +++ b/tools/benchmarks/pqc/analyze/published_runs.txt @@ -10,9 +10,12 @@ # ---- current generation (schema 2.0.0: four measurement groups, three-stack # ---- TLS phase matrix, SLH-DSA + SPHINCS+ side by side, Frodo AES+SHAKE) ---- # -# Consolidated baseline-grade RPi5 run (cortex-a76, OpenSSL 3.5.6, 1716 s, -# no throttling, zero warnings): -rasberrypi5-20260720T143239Z.json +# Consolidated baseline-grade RPi5 run (cortex-a76, OpenSSL 3.5.6, 1692 s, +# no throttling, zero warnings; first baseline produced by the narrowed-sudo +# runner — measurement as the user, only the governor write escalated. +# Supersedes rasberrypi5-20260720T143239Z (same machine, same coverage; +# medians agree within ±0.2% primitives / ±0.6% TLS — retired below): +rasberrypi5-20260730T212145Z.json # Consolidated Mac (Apple M3) cross-platform run (apple-m3 / -mcpu=native, # OpenSSL 3.5.7; NOT baseline-grade by design — dashboard hides it by default): mehmetmac-20260719T224937Z.json @@ -30,6 +33,9 @@ fedora-20260730T120637Z.json # schema-1.0.0 COMPATIBILITY FIXTURE for `make test` (hygiene test 5 in # scripts/selftest.sh exercises merge.py's v1 handling against it) — do NOT # delete it when tidying retired results. +# rasberrypi5-20260720T143239Z: superseded by the 20260730 re-run above — +# identical machine and coverage, re-measured under the narrowed-sudo runner +# to verify it changes nothing (it doesn't); kept as history. # The old published set (rasberrypi5-20260625T202356Z, mehmetmac-20260625T220618Z, # thomas-pi-20260703T083302Z) predates the SLH-DSA rename and measures none of: # the RustCrypto/aws-lc-rs groups, the native/rustls TLS phase matrix, or the diff --git a/tools/benchmarks/pqc/dashboard/data/merged.json b/tools/benchmarks/pqc/dashboard/data/merged.json index 6167dc6..ca9b38a 100644 --- a/tools/benchmarks/pqc/dashboard/data/merged.json +++ b/tools/benchmarks/pqc/dashboard/data/merged.json @@ -3,13 +3,13 @@ "n_runs": 4, "runs": [ { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "host": { "hostname": "rasberrypi5", "os": "linux", "os_pretty": "Debian GNU/Linux 13 (trixie)", "arch": "aarch64", - "kernel": "6.18.33+rpt-rpi-2712", + "kernel": "6.18.34+rpt-rpi-2712", "is_rpi": true, "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", @@ -24,7 +24,7 @@ "cflags_target": "cortex-a76", "liboqs_ref": "0.15.0", "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", - "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.18.33+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.18.34+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", "openssl": "system:3.5.6", "oqsprovider_ref": "0.9.0", "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", @@ -94,7 +94,7 @@ } }, "cpu_features": { - "source": "/proc/cpuinfo", + "source": "/proc/cpuinfo (Features)", "neon": true, "sha2": true, "sha3": false, @@ -103,9 +103,9 @@ "pmull": true }, "run": { - "timestamp_start_utc": "2026-07-20T14:32:39Z", - "timestamp_end_utc": "2026-07-20T15:01:15Z", - "duration_s": 1716, + "timestamp_start_utc": "2026-07-30T21:21:45Z", + "timestamp_end_utc": "2026-07-30T21:49:57Z", + "duration_s": 1692, "governor_requested": "performance", "governor_before": "performance", "governor_after": "performance", @@ -125,15 +125,15 @@ }, "thermal_summary": { "temp_c": { - "min": 56.5, - "max": 67.5, - "mean": 61.626, - "samples": 1683 + "min": 54.3, + "max": 65.9, + "mean": 59.95, + "samples": 1659 }, "throttling_detected": false }, - "generated_utc": "2026-07-20T15:01:15Z", - "source_file": "rasberrypi5-20260720T143239Z.json" + "generated_utc": "2026-07-30T21:49:57Z", + "source_file": "rasberrypi5-20260730T212145Z.json" }, { "run_id": "mehmetmac/Apple M3@2026-07-19T23:25:49Z", @@ -552,24 +552,24 @@ ], "kem": [ { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519", "implementation": "openssl", "classical": true, "nist_level": 1, "operation": "keygen", - "median_ns": 56647.0, + "median_ns": 56686.0, "mad_ns": 37.0, - "iqr_ns": 92.0, - "min_ns": 56537.0, - "stddev_ns": 564.29, - "ops_per_sec": 17653.19, - "total_sum_of_medians_ns": 221960.0, + "iqr_ns": 74.0, + "min_ns": 56574.0, + "stddev_ns": 466.38, + "ops_per_sec": 17641.04, + "total_sum_of_medians_ns": 222150.0, "acceleration": { "arithmetic": { "path": "openssl-internal", @@ -586,24 +586,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519", "implementation": "openssl", "classical": true, "nist_level": 1, "operation": "derive", - "median_ns": 165313.0, - "mad_ns": 93.0, - "iqr_ns": 186.0, - "min_ns": 164442.0, - "stddev_ns": 916.8, - "ops_per_sec": 6049.13, - "total_sum_of_medians_ns": 221960.0, + "median_ns": 165464.0, + "mad_ns": 129.0, + "iqr_ns": 259.0, + "min_ns": 164334.0, + "stddev_ns": 1186.6, + "ops_per_sec": 6043.61, + "total_sum_of_medians_ns": 222150.0, "acceleration": { "arithmetic": { "path": "openssl-internal", @@ -620,24 +620,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-512", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 18166.0, + "median_ns": 18203.0, "mad_ns": 19.0, - "iqr_ns": 38.0, - "min_ns": 18073.0, - "stddev_ns": 452.81, - "ops_per_sec": 55047.89, - "total_sum_of_medians_ns": 62591.0, + "iqr_ns": 37.0, + "min_ns": 18111.0, + "stddev_ns": 428.25, + "ops_per_sec": 54936.0, + "total_sum_of_medians_ns": 62703.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -661,24 +661,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-512", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "encaps", - "median_ns": 20499.0, + "median_ns": 20537.0, "mad_ns": 18.0, "iqr_ns": 37.0, - "min_ns": 20425.0, - "stddev_ns": 395.47, - "ops_per_sec": 48782.87, - "total_sum_of_medians_ns": 62591.0, + "min_ns": 20463.0, + "stddev_ns": 310.86, + "ops_per_sec": 48692.6, + "total_sum_of_medians_ns": 62703.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -702,24 +702,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-512", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "decaps", - "median_ns": 23926.0, + "median_ns": 23963.0, "mad_ns": 18.0, - "iqr_ns": 37.0, - "min_ns": 23851.0, - "stddev_ns": 328.76, - "ops_per_sec": 41795.54, - "total_sum_of_medians_ns": 62591.0, + "iqr_ns": 36.0, + "min_ns": 23888.0, + "stddev_ns": 281.78, + "ops_per_sec": 41731.0, + "total_sum_of_medians_ns": 62703.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -743,24 +743,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 29870.0, - "mad_ns": 37.0, + "median_ns": 29889.0, + "mad_ns": 19.0, "iqr_ns": 56.0, - "min_ns": 29740.0, - "stddev_ns": 709.79, - "ops_per_sec": 33478.41, - "total_sum_of_medians_ns": 99110.0, + "min_ns": 29759.0, + "stddev_ns": 623.95, + "ops_per_sec": 33457.12, + "total_sum_of_medians_ns": 99241.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -784,24 +784,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 31907.0, - "mad_ns": 19.0, + "median_ns": 31945.0, + "mad_ns": 18.0, "iqr_ns": 37.0, - "min_ns": 31795.0, - "stddev_ns": 401.87, - "ops_per_sec": 31341.09, - "total_sum_of_medians_ns": 99110.0, + "min_ns": 31852.0, + "stddev_ns": 338.78, + "ops_per_sec": 31303.8, + "total_sum_of_medians_ns": 99241.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -825,24 +825,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 37333.0, + "median_ns": 37407.0, "mad_ns": 19.0, - "iqr_ns": 38.0, - "min_ns": 37222.0, - "stddev_ns": 472.71, - "ops_per_sec": 26785.95, - "total_sum_of_medians_ns": 99110.0, + "iqr_ns": 37.0, + "min_ns": 37296.0, + "stddev_ns": 364.33, + "ops_per_sec": 26732.96, + "total_sum_of_medians_ns": 99241.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -866,24 +866,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 44185.0, + "median_ns": 44093.0, "mad_ns": 37.0, "iqr_ns": 74.0, - "min_ns": 44036.0, - "stddev_ns": 846.24, - "ops_per_sec": 22632.11, - "total_sum_of_medians_ns": 147462.0, + "min_ns": 43926.0, + "stddev_ns": 804.96, + "ops_per_sec": 22679.34, + "total_sum_of_medians_ns": 147130.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -907,24 +907,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 47777.0, + "median_ns": 47648.0, "mad_ns": 19.0, "iqr_ns": 37.0, - "min_ns": 47666.0, - "stddev_ns": 627.83, - "ops_per_sec": 20930.57, - "total_sum_of_medians_ns": 147462.0, + "min_ns": 47538.0, + "stddev_ns": 517.76, + "ops_per_sec": 20987.24, + "total_sum_of_medians_ns": 147130.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -948,24 +948,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 55500.0, - "mad_ns": 36.0, - "iqr_ns": 55.0, - "min_ns": 55369.0, - "stddev_ns": 399.02, - "ops_per_sec": 18018.02, - "total_sum_of_medians_ns": 147462.0, + "median_ns": 55389.0, + "mad_ns": 19.0, + "iqr_ns": 38.0, + "min_ns": 55278.0, + "stddev_ns": 371.14, + "ops_per_sec": 18054.13, + "total_sum_of_medians_ns": 147130.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -989,24 +989,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-348864", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 149116177.0, - "mad_ns": 35569676.5, - "iqr_ns": 105798745.75, - "min_ns": 78370727.0, - "stddev_ns": 96527536.69, - "ops_per_sec": 6.71, - "total_sum_of_medians_ns": 174877023.0, + "median_ns": 149256096.5, + "mad_ns": 53263597.5, + "iqr_ns": 106785202.75, + "min_ns": 78417123.0, + "stddev_ns": 91023991.72, + "ops_per_sec": 6.7, + "total_sum_of_medians_ns": 175015917.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1029,24 +1029,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-348864", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "encaps", - "median_ns": 66148.0, - "mad_ns": 463.0, - "iqr_ns": 5685.0, - "min_ns": 65480.0, - "stddev_ns": 6536.73, - "ops_per_sec": 15117.62, - "total_sum_of_medians_ns": 174877023.0, + "median_ns": 66222.0, + "mad_ns": 407.0, + "iqr_ns": 5686.0, + "min_ns": 65611.0, + "stddev_ns": 6678.29, + "ops_per_sec": 15100.72, + "total_sum_of_medians_ns": 175015917.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1069,24 +1069,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-348864", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "decaps", - "median_ns": 25694698.0, - "mad_ns": 1824.5, - "iqr_ns": 3800.75, - "min_ns": 25689013.0, - "stddev_ns": 16883.19, + "median_ns": 25693598.5, + "mad_ns": 1860.0, + "iqr_ns": 4135.0, + "min_ns": 25688061.0, + "stddev_ns": 12003.54, "ops_per_sec": 38.92, - "total_sum_of_medians_ns": 174877023.0, + "total_sum_of_medians_ns": 175015917.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1109,24 +1109,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-460896", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 345028791.5, - "mad_ns": 113676647.5, - "iqr_ns": 445962629.5, - "min_ns": 231180007.0, - "stddev_ns": 369051576.43, - "ops_per_sec": 2.9, - "total_sum_of_medians_ns": 403903466.0, + "median_ns": 454405244.5, + "mad_ns": 221990508.5, + "iqr_ns": 334934777.5, + "min_ns": 231209460.0, + "stddev_ns": 324019483.42, + "ops_per_sec": 2.2, + "total_sum_of_medians_ns": 513229416.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1149,24 +1149,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-460896", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 130925.0, - "mad_ns": 11093.0, - "iqr_ns": 32407.0, - "min_ns": 118832.0, - "stddev_ns": 24878.69, - "ops_per_sec": 7637.96, - "total_sum_of_medians_ns": 403903466.0, + "median_ns": 130537.0, + "mad_ns": 11111.0, + "iqr_ns": 25342.75, + "min_ns": 118296.0, + "stddev_ns": 23762.29, + "ops_per_sec": 7660.66, + "total_sum_of_medians_ns": 513229416.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1189,24 +1189,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-460896", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 58743749.5, - "mad_ns": 191516.0, - "iqr_ns": 329607.25, - "min_ns": 58029258.0, - "stddev_ns": 286977.31, - "ops_per_sec": 17.02, - "total_sum_of_medians_ns": 403903466.0, + "median_ns": 58693634.5, + "mad_ns": 172654.5, + "iqr_ns": 335741.5, + "min_ns": 58031429.0, + "stddev_ns": 279721.85, + "ops_per_sec": 17.04, + "total_sum_of_medians_ns": 513229416.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1229,24 +1229,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-460896f", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 228718918.5, - "mad_ns": 197821.0, - "iqr_ns": 488657.0, - "min_ns": 228469024.0, - "stddev_ns": 501285.83, + "median_ns": 228616049.0, + "mad_ns": 153596.5, + "iqr_ns": 645349.25, + "min_ns": 228384917.0, + "stddev_ns": 561125.19, "ops_per_sec": 4.37, - "total_sum_of_medians_ns": 287591935.0, + "total_sum_of_medians_ns": 287333320.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1269,24 +1269,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-460896f", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 130591.0, - "mad_ns": 11111.0, - "iqr_ns": 24722.0, - "min_ns": 118369.0, - "stddev_ns": 23270.78, - "ops_per_sec": 7657.5, - "total_sum_of_medians_ns": 287591935.0, + "median_ns": 130538.0, + "mad_ns": 11131.0, + "iqr_ns": 31926.0, + "min_ns": 118352.0, + "stddev_ns": 23870.73, + "ops_per_sec": 7660.6, + "total_sum_of_medians_ns": 287333320.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1309,24 +1309,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-460896f", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 58742425.5, - "mad_ns": 42239.0, - "iqr_ns": 288741.25, - "min_ns": 58207590.0, - "stddev_ns": 198117.88, - "ops_per_sec": 17.02, - "total_sum_of_medians_ns": 287591935.0, + "median_ns": 58586733.5, + "mad_ns": 51044.5, + "iqr_ns": 136685.75, + "min_ns": 58214604.0, + "stddev_ns": 123912.73, + "ops_per_sec": 17.07, + "total_sum_of_medians_ns": 287333320.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1349,24 +1349,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-6688128", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 745645982.5, - "mad_ns": 330927545.5, - "iqr_ns": 1104176622.5, - "min_ns": 414433712.0, - "stddev_ns": 807444157.93, - "ops_per_sec": 1.34, - "total_sum_of_medians_ns": 858560706.0, + "median_ns": 1009935720.0, + "mad_ns": 591230411.0, + "iqr_ns": 1112896201.5, + "min_ns": 416374551.0, + "stddev_ns": 756708146.67, + "ops_per_sec": 0.99, + "total_sum_of_medians_ns": 1122905619.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1389,24 +1389,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-6688128", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 234052.0, - "mad_ns": 20332.0, - "iqr_ns": 54564.0, - "min_ns": 213016.0, - "stddev_ns": 48203.55, - "ops_per_sec": 4272.55, - "total_sum_of_medians_ns": 858560706.0, + "median_ns": 241666.0, + "mad_ns": 33278.0, + "iqr_ns": 67222.0, + "min_ns": 207444.0, + "stddev_ns": 48296.68, + "ops_per_sec": 4137.94, + "total_sum_of_medians_ns": 1122905619.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1429,24 +1429,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-6688128", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 112680671.5, - "mad_ns": 261339.0, - "iqr_ns": 563465.5, - "min_ns": 111302541.0, - "stddev_ns": 627259.48, + "median_ns": 112728233.5, + "mad_ns": 235568.5, + "iqr_ns": 483855.5, + "min_ns": 111326112.0, + "stddev_ns": 599794.42, "ops_per_sec": 8.87, - "total_sum_of_medians_ns": 858560706.0, + "total_sum_of_medians_ns": 1122905619.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1469,24 +1469,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-6960119", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 1016413019.5, - "mad_ns": 596102553.0, - "iqr_ns": 1192755438.25, - "min_ns": 418044818.0, - "stddev_ns": 982073827.38, - "ops_per_sec": 0.98, - "total_sum_of_medians_ns": 1125933260.5, + "median_ns": 719044324.5, + "mad_ns": 300438982.0, + "iqr_ns": 898452134.75, + "min_ns": 417982759.0, + "stddev_ns": 799430548.74, + "ops_per_sec": 1.39, + "total_sum_of_medians_ns": 828502137.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1509,24 +1509,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-6960119", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 357774.0, - "mad_ns": 15000.0, - "iqr_ns": 44184.5, - "min_ns": 341644.0, - "stddev_ns": 32335.61, - "ops_per_sec": 2795.06, - "total_sum_of_medians_ns": 1125933260.5, + "median_ns": 356758.0, + "mad_ns": 15093.0, + "iqr_ns": 44241.0, + "min_ns": 340647.0, + "stddev_ns": 32715.2, + "ops_per_sec": 2803.02, + "total_sum_of_medians_ns": 828502137.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1549,24 +1549,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-6960119", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 109162467.0, - "mad_ns": 466512.0, - "iqr_ns": 973205.0, - "min_ns": 107734864.0, - "stddev_ns": 765182.15, - "ops_per_sec": 9.16, - "total_sum_of_medians_ns": 1125933260.5, + "median_ns": 109101054.5, + "mad_ns": 109209.5, + "iqr_ns": 535362.75, + "min_ns": 107732085.0, + "stddev_ns": 614379.73, + "ops_per_sec": 9.17, + "total_sum_of_medians_ns": 828502137.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1589,24 +1589,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-8192128", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 1103349763.0, - "mad_ns": 330449503.0, - "iqr_ns": 660442111.25, - "min_ns": 447481732.0, - "stddev_ns": 1071733593.32, - "ops_per_sec": 0.91, - "total_sum_of_medians_ns": 1240205442.0, + "median_ns": 788668138.5, + "mad_ns": 337255417.0, + "iqr_ns": 1018145580.75, + "min_ns": 450887251.0, + "stddev_ns": 890179123.06, + "ops_per_sec": 1.27, + "total_sum_of_medians_ns": 925407954.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1629,24 +1629,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-8192128", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 259571.0, + "median_ns": 259443.0, "mad_ns": 16278.0, - "iqr_ns": 35537.0, - "min_ns": 242349.0, - "stddev_ns": 33804.27, - "ops_per_sec": 3852.51, - "total_sum_of_medians_ns": 1240205442.0, + "iqr_ns": 48049.75, + "min_ns": 242425.0, + "stddev_ns": 35432.62, + "ops_per_sec": 3854.41, + "total_sum_of_medians_ns": 925407954.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1669,24 +1669,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Classic-McEliece-8192128", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 136596108.0, - "mad_ns": 252598.5, - "iqr_ns": 482961.75, - "min_ns": 135985310.0, - "stddev_ns": 303505.79, - "ops_per_sec": 7.32, - "total_sum_of_medians_ns": 1240205442.0, + "median_ns": 136480373.0, + "mad_ns": 337815.0, + "iqr_ns": 1241692.5, + "min_ns": 136136054.0, + "stddev_ns": 615550.31, + "ops_per_sec": 7.33, + "total_sum_of_medians_ns": 925407954.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1709,24 +1709,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-640-AES", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 785675.0, - "mad_ns": 222.0, - "iqr_ns": 556.0, - "min_ns": 785027.0, - "stddev_ns": 3434.65, - "ops_per_sec": 1272.79, - "total_sum_of_medians_ns": 2614245.0, + "median_ns": 785737.0, + "mad_ns": 185.0, + "iqr_ns": 482.0, + "min_ns": 784885.0, + "stddev_ns": 67852.12, + "ops_per_sec": 1272.69, + "total_sum_of_medians_ns": 2615810.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1749,24 +1749,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-640-AES", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "encaps", - "median_ns": 925340.0, - "mad_ns": 333.0, - "iqr_ns": 809.5, - "min_ns": 922896.0, - "stddev_ns": 3222.84, - "ops_per_sec": 1080.68, - "total_sum_of_medians_ns": 2614245.0, + "median_ns": 926152.5, + "mad_ns": 527.0, + "iqr_ns": 1055.75, + "min_ns": 924106.0, + "stddev_ns": 3549.68, + "ops_per_sec": 1079.74, + "total_sum_of_medians_ns": 2615810.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1789,24 +1789,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-640-AES", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "decaps", - "median_ns": 903230.0, - "mad_ns": 222.0, - "iqr_ns": 519.0, - "min_ns": 901952.0, - "stddev_ns": 3388.45, - "ops_per_sec": 1107.14, - "total_sum_of_medians_ns": 2614245.0, + "median_ns": 903921.0, + "mad_ns": 426.0, + "iqr_ns": 814.0, + "min_ns": 901884.0, + "stddev_ns": 3897.4, + "ops_per_sec": 1106.29, + "total_sum_of_medians_ns": 2615810.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1829,24 +1829,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-976-AES", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 1692349.0, - "mad_ns": 1056.0, - "iqr_ns": 2130.0, - "min_ns": 1690386.0, - "stddev_ns": 4776.36, - "ops_per_sec": 590.89, - "total_sum_of_medians_ns": 5507329.0, + "median_ns": 1685149.0, + "mad_ns": 2158.0, + "iqr_ns": 4060.25, + "min_ns": 1682306.0, + "stddev_ns": 5847.38, + "ops_per_sec": 593.42, + "total_sum_of_medians_ns": 5499962.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1869,24 +1869,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-976-AES", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 1929078.0, - "mad_ns": 658.0, - "iqr_ns": 1370.75, - "min_ns": 1925013.0, - "stddev_ns": 7123.04, - "ops_per_sec": 518.38, - "total_sum_of_medians_ns": 5507329.0, + "median_ns": 1933286.0, + "mad_ns": 1129.0, + "iqr_ns": 2240.0, + "min_ns": 1930693.0, + "stddev_ns": 5211.22, + "ops_per_sec": 517.25, + "total_sum_of_medians_ns": 5499962.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1909,24 +1909,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-976-AES", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 1885902.0, - "mad_ns": 1204.0, - "iqr_ns": 2408.0, - "min_ns": 1881477.0, - "stddev_ns": 5047.87, - "ops_per_sec": 530.25, - "total_sum_of_medians_ns": 5507329.0, + "median_ns": 1881527.0, + "mad_ns": 1203.0, + "iqr_ns": 2370.0, + "min_ns": 1878434.0, + "stddev_ns": 5498.25, + "ops_per_sec": 531.48, + "total_sum_of_medians_ns": 5499962.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1949,24 +1949,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-1344-AES", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 3070239.0, - "mad_ns": 869.0, - "iqr_ns": 1704.0, - "min_ns": 3065980.0, - "stddev_ns": 10214.31, - "ops_per_sec": 325.71, - "total_sum_of_medians_ns": 9948959.5, + "median_ns": 3071021.0, + "mad_ns": 778.0, + "iqr_ns": 1926.0, + "min_ns": 3067021.0, + "stddev_ns": 10382.11, + "ops_per_sec": 325.62, + "total_sum_of_medians_ns": 9952476.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -1989,24 +1989,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-1344-AES", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 3469077.5, - "mad_ns": 1175.5, - "iqr_ns": 2658.0, - "min_ns": 3464902.0, - "stddev_ns": 7493.19, - "ops_per_sec": 288.26, - "total_sum_of_medians_ns": 9948959.5, + "median_ns": 3471584.0, + "mad_ns": 907.5, + "iqr_ns": 2537.25, + "min_ns": 3465075.0, + "stddev_ns": 5659.49, + "ops_per_sec": 288.05, + "total_sum_of_medians_ns": 9952476.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2029,24 +2029,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-1344-AES", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 3409643.0, - "mad_ns": 1222.0, - "iqr_ns": 2481.0, - "min_ns": 3407180.0, - "stddev_ns": 142979.46, - "ops_per_sec": 293.29, - "total_sum_of_medians_ns": 9948959.5, + "median_ns": 3409871.0, + "mad_ns": 1000.0, + "iqr_ns": 2000.0, + "min_ns": 3405834.0, + "stddev_ns": 14604.32, + "ops_per_sec": 293.27, + "total_sum_of_medians_ns": 9952476.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2069,24 +2069,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-640-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 2886974.0, - "mad_ns": 510.0, - "iqr_ns": 1795.75, - "min_ns": 2884130.0, - "stddev_ns": 4459.16, - "ops_per_sec": 346.38, - "total_sum_of_medians_ns": 9574354.0, + "median_ns": 2886281.0, + "mad_ns": 629.0, + "iqr_ns": 1556.0, + "min_ns": 2883226.0, + "stddev_ns": 4869.45, + "ops_per_sec": 346.47, + "total_sum_of_medians_ns": 9577329.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2109,24 +2109,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-640-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "encaps", - "median_ns": 3354903.0, - "mad_ns": 537.0, - "iqr_ns": 1037.0, - "min_ns": 3352032.0, - "stddev_ns": 7411.02, - "ops_per_sec": 298.07, - "total_sum_of_medians_ns": 9574354.0, + "median_ns": 3356825.0, + "mad_ns": 398.0, + "iqr_ns": 792.25, + "min_ns": 3354168.0, + "stddev_ns": 5817.96, + "ops_per_sec": 297.9, + "total_sum_of_medians_ns": 9577329.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2149,24 +2149,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-640-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "decaps", - "median_ns": 3332477.0, - "mad_ns": 370.0, - "iqr_ns": 759.0, - "min_ns": 3329551.0, - "stddev_ns": 5834.96, - "ops_per_sec": 300.08, - "total_sum_of_medians_ns": 9574354.0, + "median_ns": 3334223.0, + "mad_ns": 463.0, + "iqr_ns": 972.0, + "min_ns": 3331557.0, + "stddev_ns": 5721.37, + "ops_per_sec": 299.92, + "total_sum_of_medians_ns": 9577329.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2189,24 +2189,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-976-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 6447550.0, - "mad_ns": 1389.0, - "iqr_ns": 2694.0, - "min_ns": 6442846.0, - "stddev_ns": 8310.2, - "ops_per_sec": 155.1, - "total_sum_of_medians_ns": 21265411.5, + "median_ns": 6449929.0, + "mad_ns": 1092.0, + "iqr_ns": 2204.0, + "min_ns": 6445948.0, + "stddev_ns": 6662.49, + "ops_per_sec": 155.04, + "total_sum_of_medians_ns": 21261962.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2229,24 +2229,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-976-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 7426259.5, - "mad_ns": 1286.5, - "iqr_ns": 2800.75, - "min_ns": 7421315.0, - "stddev_ns": 15246.76, - "ops_per_sec": 134.66, - "total_sum_of_medians_ns": 21265411.5, + "median_ns": 7437933.0, + "mad_ns": 1009.0, + "iqr_ns": 1944.75, + "min_ns": 7434443.0, + "stddev_ns": 12543.89, + "ops_per_sec": 134.45, + "total_sum_of_medians_ns": 21261962.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2269,24 +2269,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-976-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 7391602.0, - "mad_ns": 1222.0, - "iqr_ns": 2935.5, - "min_ns": 7387686.0, - "stddev_ns": 2833.01, - "ops_per_sec": 135.29, - "total_sum_of_medians_ns": 21265411.5, + "median_ns": 7374100.0, + "mad_ns": 953.5, + "iqr_ns": 2190.0, + "min_ns": 7370961.0, + "stddev_ns": 9495.8, + "ops_per_sec": 135.61, + "total_sum_of_medians_ns": 21261962.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2309,24 +2309,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-1344-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 11751743.0, - "mad_ns": 1074.0, - "iqr_ns": 2555.5, - "min_ns": 11747909.0, - "stddev_ns": 18029.17, + "median_ns": 11752141.5, + "mad_ns": 1379.5, + "iqr_ns": 2763.5, + "min_ns": 11741271.0, + "stddev_ns": 15624.6, "ops_per_sec": 85.09, - "total_sum_of_medians_ns": 38779490.0, + "total_sum_of_medians_ns": 38776470.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2349,24 +2349,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-1344-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 13543026.0, - "mad_ns": 1240.0, - "iqr_ns": 2745.75, - "min_ns": 13538535.0, - "stddev_ns": 19365.5, - "ops_per_sec": 73.84, - "total_sum_of_medians_ns": 38779490.0, + "median_ns": 13546807.5, + "mad_ns": 2101.0, + "iqr_ns": 4754.5, + "min_ns": 13540928.0, + "stddev_ns": 18955.24, + "ops_per_sec": 73.82, + "total_sum_of_medians_ns": 38776470.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2389,24 +2389,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "FrodoKEM-1344-SHAKE", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 13484721.0, - "mad_ns": 1972.0, - "iqr_ns": 3981.25, - "min_ns": 13479944.0, - "stddev_ns": 23693.28, - "ops_per_sec": 74.16, - "total_sum_of_medians_ns": 38779490.0, + "median_ns": 13477521.0, + "mad_ns": 1435.0, + "iqr_ns": 2940.5, + "min_ns": 13473817.0, + "stddev_ns": 17813.34, + "ops_per_sec": 74.2, + "total_sum_of_medians_ns": 38776470.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -2429,24 +2429,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519", "implementation": "rustcrypto", "classical": true, "nist_level": 1, "operation": "keygen", - "median_ns": 54147.0, - "mad_ns": 92.0, - "iqr_ns": 518.0, + "median_ns": 54167.0, + "mad_ns": 75.0, + "iqr_ns": 536.0, "min_ns": 53870.0, - "stddev_ns": 510.56, - "ops_per_sec": 18468.24, - "total_sum_of_medians_ns": 238089.0, + "stddev_ns": 471.17, + "ops_per_sec": 18461.42, + "total_sum_of_medians_ns": 238314.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2463,24 +2463,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519", "implementation": "rustcrypto", "classical": true, "nist_level": 1, "operation": "derive", - "median_ns": 183942.0, - "mad_ns": 36.0, - "iqr_ns": 56.0, - "min_ns": 183812.0, - "stddev_ns": 733.44, - "ops_per_sec": 5436.5, - "total_sum_of_medians_ns": 238089.0, + "median_ns": 184147.0, + "mad_ns": 56.0, + "iqr_ns": 222.0, + "min_ns": 183813.0, + "stddev_ns": 989.98, + "ops_per_sec": 5430.44, + "total_sum_of_medians_ns": 238314.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2497,24 +2497,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-512", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "keygen", "median_ns": 41296.0, - "mad_ns": 481.0, - "iqr_ns": 815.0, - "min_ns": 39500.0, - "stddev_ns": 817.78, + "mad_ns": 482.0, + "iqr_ns": 852.0, + "min_ns": 39722.0, + "stddev_ns": 744.43, "ops_per_sec": 24215.42, - "total_sum_of_medians_ns": 141498.0, + "total_sum_of_medians_ns": 141315.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2539,24 +2539,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-512", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "encaps", - "median_ns": 43499.0, - "mad_ns": 111.0, + "median_ns": 43371.0, + "mad_ns": 94.0, "iqr_ns": 537.0, - "min_ns": 43222.0, - "stddev_ns": 473.65, - "ops_per_sec": 22989.03, - "total_sum_of_medians_ns": 141498.0, + "min_ns": 43129.0, + "stddev_ns": 555.62, + "ops_per_sec": 23056.88, + "total_sum_of_medians_ns": 141315.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2581,24 +2581,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-512", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "decaps", - "median_ns": 56703.0, + "median_ns": 56648.0, "mad_ns": 55.0, - "iqr_ns": 93.0, - "min_ns": 56481.0, - "stddev_ns": 658.91, - "ops_per_sec": 17635.75, - "total_sum_of_medians_ns": 141498.0, + "iqr_ns": 92.0, + "min_ns": 56407.0, + "stddev_ns": 436.35, + "ops_per_sec": 17652.87, + "total_sum_of_medians_ns": 141315.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2623,24 +2623,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 72648.0, + "median_ns": 72666.0, "mad_ns": 667.0, "iqr_ns": 1351.0, - "min_ns": 70036.0, - "stddev_ns": 1126.91, - "ops_per_sec": 13765.0, - "total_sum_of_medians_ns": 241016.0, + "min_ns": 70166.0, + "stddev_ns": 1095.75, + "ops_per_sec": 13761.59, + "total_sum_of_medians_ns": 244035.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2665,24 +2665,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 75110.0, + "median_ns": 76629.0, "mad_ns": 185.0, - "iqr_ns": 555.0, - "min_ns": 74666.0, - "stddev_ns": 799.82, - "ops_per_sec": 13313.81, - "total_sum_of_medians_ns": 241016.0, + "iqr_ns": 537.0, + "min_ns": 76167.0, + "stddev_ns": 635.71, + "ops_per_sec": 13049.89, + "total_sum_of_medians_ns": 244035.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2707,24 +2707,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 93258.0, - "mad_ns": 92.0, - "iqr_ns": 184.0, - "min_ns": 92813.0, - "stddev_ns": 697.18, - "ops_per_sec": 10722.94, - "total_sum_of_medians_ns": 241016.0, + "median_ns": 94740.0, + "mad_ns": 74.0, + "iqr_ns": 166.0, + "min_ns": 94333.0, + "stddev_ns": 701.68, + "ops_per_sec": 10555.2, + "total_sum_of_medians_ns": 244035.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2749,24 +2749,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 115684.0, + "median_ns": 115703.0, "mad_ns": 870.0, - "iqr_ns": 1741.0, - "min_ns": 111758.0, - "stddev_ns": 1437.74, - "ops_per_sec": 8644.24, - "total_sum_of_medians_ns": 378977.0, + "iqr_ns": 1722.0, + "min_ns": 111962.0, + "stddev_ns": 1471.18, + "ops_per_sec": 8642.82, + "total_sum_of_medians_ns": 378461.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2791,24 +2791,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 120128.0, - "mad_ns": 240.0, + "median_ns": 119888.0, + "mad_ns": 241.0, "iqr_ns": 537.0, - "min_ns": 119517.0, - "stddev_ns": 931.53, - "ops_per_sec": 8324.45, - "total_sum_of_medians_ns": 378977.0, + "min_ns": 119314.0, + "stddev_ns": 926.65, + "ops_per_sec": 8341.12, + "total_sum_of_medians_ns": 378461.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2833,24 +2833,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 143165.0, - "mad_ns": 111.0, - "iqr_ns": 240.0, - "min_ns": 142609.0, - "stddev_ns": 820.61, - "ops_per_sec": 6984.95, - "total_sum_of_medians_ns": 378977.0, + "median_ns": 142870.0, + "mad_ns": 129.0, + "iqr_ns": 259.0, + "min_ns": 142314.0, + "stddev_ns": 872.04, + "ops_per_sec": 6999.37, + "total_sum_of_medians_ns": 378461.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -2875,24 +2875,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "keygen", - "median_ns": 21112.0, + "median_ns": 21111.0, "mad_ns": 18.0, - "iqr_ns": 37.0, - "min_ns": 21019.0, - "stddev_ns": 347.31, - "ops_per_sec": 47366.43, - "total_sum_of_medians_ns": 67965.0, + "iqr_ns": 19.0, + "min_ns": 21018.0, + "stddev_ns": 299.52, + "ops_per_sec": 47368.67, + "total_sum_of_medians_ns": 67962.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -2915,24 +2915,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "derive", - "median_ns": 46853.0, + "median_ns": 46851.0, "mad_ns": 1.0, "iqr_ns": 19.0, - "min_ns": 46815.0, - "stddev_ns": 401.36, - "ops_per_sec": 21343.35, - "total_sum_of_medians_ns": 67965.0, + "min_ns": 46814.0, + "stddev_ns": 430.52, + "ops_per_sec": 21344.26, + "total_sum_of_medians_ns": 67962.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -2955,24 +2955,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "secp256r1", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "keygen", "median_ns": 26908.0, - "mad_ns": 19.0, - "iqr_ns": 37.0, + "mad_ns": 18.0, + "iqr_ns": 19.0, "min_ns": 26815.0, - "stddev_ns": 567.86, + "stddev_ns": 434.44, "ops_per_sec": 37163.67, - "total_sum_of_medians_ns": 133169.0, + "total_sum_of_medians_ns": 133166.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -2995,24 +2995,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "secp256r1", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "derive", - "median_ns": 106261.0, + "median_ns": 106258.0, "mad_ns": 55.0, "iqr_ns": 93.0, - "min_ns": 105483.0, - "stddev_ns": 502.46, - "ops_per_sec": 9410.79, - "total_sum_of_medians_ns": 133169.0, + "min_ns": 105388.0, + "stddev_ns": 652.6, + "ops_per_sec": 9411.06, + "total_sum_of_medians_ns": 133166.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -3035,24 +3035,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "aws-lc-rs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 28464.0, + "median_ns": 28463.0, "mad_ns": 19.0, "iqr_ns": 55.0, - "min_ns": 28370.0, - "stddev_ns": 621.97, - "ops_per_sec": 35132.1, - "total_sum_of_medians_ns": 97205.0, + "min_ns": 28352.0, + "stddev_ns": 570.21, + "ops_per_sec": 35133.33, + "total_sum_of_medians_ns": 101166.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -3075,24 +3075,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "aws-lc-rs", "classical": false, "nist_level": 3, "operation": "encaps", - "median_ns": 31722.0, - "mad_ns": 17.0, + "median_ns": 33722.0, + "mad_ns": 18.0, "iqr_ns": 19.0, - "min_ns": 31667.0, - "stddev_ns": 399.8, - "ops_per_sec": 31523.86, - "total_sum_of_medians_ns": 97205.0, + "min_ns": 33648.0, + "stddev_ns": 375.34, + "ops_per_sec": 29654.23, + "total_sum_of_medians_ns": 101166.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -3115,24 +3115,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-768", "implementation": "aws-lc-rs", "classical": false, "nist_level": 3, "operation": "decaps", - "median_ns": 37019.0, + "median_ns": 38981.0, "mad_ns": 18.0, - "iqr_ns": 37.0, - "min_ns": 36963.0, - "stddev_ns": 453.44, - "ops_per_sec": 27013.16, - "total_sum_of_medians_ns": 97205.0, + "iqr_ns": 36.0, + "min_ns": 38907.0, + "stddev_ns": 317.22, + "ops_per_sec": 25653.52, + "total_sum_of_medians_ns": 101166.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -3155,24 +3155,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "aws-lc-rs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 42964.0, + "median_ns": 43018.0, "mad_ns": 37.0, - "iqr_ns": 74.0, - "min_ns": 42815.0, - "stddev_ns": 868.26, - "ops_per_sec": 23275.3, - "total_sum_of_medians_ns": 145447.0, + "iqr_ns": 57.0, + "min_ns": 42870.0, + "stddev_ns": 803.05, + "ops_per_sec": 23246.08, + "total_sum_of_medians_ns": 145517.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -3195,24 +3195,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "aws-lc-rs", "classical": false, "nist_level": 5, "operation": "encaps", - "median_ns": 47631.0, + "median_ns": 47648.0, "mad_ns": 18.0, - "iqr_ns": 37.0, - "min_ns": 47556.0, - "stddev_ns": 339.24, - "ops_per_sec": 20994.73, - "total_sum_of_medians_ns": 145447.0, + "iqr_ns": 20.0, + "min_ns": 47574.0, + "stddev_ns": 715.55, + "ops_per_sec": 20987.24, + "total_sum_of_medians_ns": 145517.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -3235,24 +3235,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-KEM-1024", "implementation": "aws-lc-rs", "classical": false, "nist_level": 5, "operation": "decaps", - "median_ns": 54852.0, + "median_ns": 54851.0, "mad_ns": 18.0, - "iqr_ns": 19.0, - "min_ns": 54760.0, - "stddev_ns": 549.34, - "ops_per_sec": 18230.88, - "total_sum_of_medians_ns": 145447.0, + "iqr_ns": 37.0, + "min_ns": 54777.0, + "stddev_ns": 438.45, + "ops_per_sec": 18231.21, + "total_sum_of_medians_ns": 145517.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -11437,24 +11437,24 @@ ], "sig": [ { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "openssl", "classical": true, "nist_level": 1, "operation": "keygen", - "median_ns": 57944.0, - "mad_ns": 19.0, - "iqr_ns": 38.0, - "min_ns": 57851.0, - "stddev_ns": 666.78, - "ops_per_sec": 17258.04, - "total_sum_of_medians_ns": 260165.0, + "median_ns": 58036.0, + "mad_ns": 20.0, + "iqr_ns": 56.0, + "min_ns": 57925.0, + "stddev_ns": 618.76, + "ops_per_sec": 17230.68, + "total_sum_of_medians_ns": 260443.0, "acceleration": { "arithmetic": { "path": "openssl-internal", @@ -11470,24 +11470,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "openssl", "classical": true, "nist_level": 1, "operation": "sign", - "median_ns": 57574.0, + "median_ns": 57611.0, "mad_ns": 19.0, - "iqr_ns": 37.0, - "min_ns": 57480.0, - "stddev_ns": 631.32, - "ops_per_sec": 17368.95, - "total_sum_of_medians_ns": 260165.0, + "iqr_ns": 38.0, + "min_ns": 57536.0, + "stddev_ns": 624.96, + "ops_per_sec": 17357.8, + "total_sum_of_medians_ns": 260443.0, "acceleration": { "arithmetic": { "path": "openssl-internal", @@ -11503,24 +11503,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "openssl", "classical": true, "nist_level": 1, "operation": "verify", - "median_ns": 144647.0, - "mad_ns": 56.0, - "iqr_ns": 111.0, - "min_ns": 144424.0, - "stddev_ns": 914.13, - "ops_per_sec": 6913.38, - "total_sum_of_medians_ns": 260165.0, + "median_ns": 144796.0, + "mad_ns": 73.0, + "iqr_ns": 167.0, + "min_ns": 144554.0, + "stddev_ns": 857.77, + "ops_per_sec": 6906.27, + "total_sum_of_medians_ns": 260443.0, "acceleration": { "arithmetic": { "path": "openssl-internal", @@ -11536,24 +11536,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "liboqs", "classical": false, "nist_level": 2, "operation": "keygen", - "median_ns": 106998.0, - "mad_ns": 555.0, - "iqr_ns": 1111.0, - "min_ns": 104480.0, - "stddev_ns": 1104.92, - "ops_per_sec": 9345.97, - "total_sum_of_medians_ns": 624010.5, + "median_ns": 107425.0, + "mad_ns": 611.0, + "iqr_ns": 1241.0, + "min_ns": 104555.0, + "stddev_ns": 1282.73, + "ops_per_sec": 9308.82, + "total_sum_of_medians_ns": 624478.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11575,24 +11575,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "liboqs", "classical": false, "nist_level": 2, "operation": "sign", - "median_ns": 397865.5, - "mad_ns": 180507.0, - "iqr_ns": 362171.25, - "min_ns": 215645.0, - "stddev_ns": 331280.83, - "ops_per_sec": 2513.41, - "total_sum_of_medians_ns": 624010.5, + "median_ns": 397739.0, + "mad_ns": 180092.0, + "iqr_ns": 343961.0, + "min_ns": 215610.0, + "stddev_ns": 354414.17, + "ops_per_sec": 2514.21, + "total_sum_of_medians_ns": 624478.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11614,24 +11614,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "liboqs", "classical": false, "nist_level": 2, "operation": "verify", - "median_ns": 119147.0, - "mad_ns": 223.0, - "iqr_ns": 1074.0, - "min_ns": 118683.0, - "stddev_ns": 942.59, - "ops_per_sec": 8392.99, - "total_sum_of_medians_ns": 624010.5, + "median_ns": 119314.0, + "mad_ns": 111.0, + "iqr_ns": 241.0, + "min_ns": 118851.0, + "stddev_ns": 874.6, + "ops_per_sec": 8381.25, + "total_sum_of_medians_ns": 624478.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11653,24 +11653,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 191220.0, + "median_ns": 191221.0, "mad_ns": 592.0, - "iqr_ns": 1723.0, - "min_ns": 189239.0, - "stddev_ns": 1386.66, - "ops_per_sec": 5229.58, - "total_sum_of_medians_ns": 1055042.5, + "iqr_ns": 1778.0, + "min_ns": 189314.0, + "stddev_ns": 1421.62, + "ops_per_sec": 5229.55, + "total_sum_of_medians_ns": 1054855.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11692,24 +11692,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "sign", - "median_ns": 674677.0, - "mad_ns": 275774.0, - "iqr_ns": 627724.0, - "min_ns": 319996.0, - "stddev_ns": 592778.32, - "ops_per_sec": 1482.19, - "total_sum_of_medians_ns": 1055042.5, + "median_ns": 674172.5, + "mad_ns": 276766.0, + "iqr_ns": 628973.75, + "min_ns": 320350.0, + "stddev_ns": 584745.25, + "ops_per_sec": 1483.3, + "total_sum_of_medians_ns": 1054855.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11731,24 +11731,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "verify", - "median_ns": 189145.5, - "mad_ns": 332.0, - "iqr_ns": 778.0, - "min_ns": 188405.0, - "stddev_ns": 1293.46, - "ops_per_sec": 5286.94, - "total_sum_of_medians_ns": 1055042.5, + "median_ns": 189462.0, + "mad_ns": 481.0, + "iqr_ns": 1833.0, + "min_ns": 188517.0, + "stddev_ns": 1148.95, + "ops_per_sec": 5278.1, + "total_sum_of_medians_ns": 1054855.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11770,24 +11770,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 288496.0, - "mad_ns": 1037.0, - "iqr_ns": 2204.0, - "min_ns": 284256.0, - "stddev_ns": 2559.54, - "ops_per_sec": 3466.25, - "total_sum_of_medians_ns": 1427982.0, + "median_ns": 288387.0, + "mad_ns": 1148.0, + "iqr_ns": 2574.0, + "min_ns": 284610.0, + "stddev_ns": 2321.66, + "ops_per_sec": 3467.56, + "total_sum_of_medians_ns": 1427492.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11809,24 +11809,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 833916.0, - "mad_ns": 344274.0, - "iqr_ns": 727806.0, - "min_ns": 484123.0, - "stddev_ns": 573220.04, - "ops_per_sec": 1199.16, - "total_sum_of_medians_ns": 1427982.0, + "median_ns": 833810.0, + "mad_ns": 344905.0, + "iqr_ns": 771125.0, + "min_ns": 484831.0, + "stddev_ns": 609010.78, + "ops_per_sec": 1199.31, + "total_sum_of_medians_ns": 1427492.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11848,24 +11848,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 305570.0, - "mad_ns": 167.0, - "iqr_ns": 352.0, - "min_ns": 304960.0, - "stddev_ns": 1342.02, - "ops_per_sec": 3272.57, - "total_sum_of_medians_ns": 1427982.0, + "median_ns": 305295.0, + "mad_ns": 315.0, + "iqr_ns": 944.0, + "min_ns": 304535.0, + "stddev_ns": 1940.34, + "ops_per_sec": 3275.52, + "total_sum_of_medians_ns": 1427492.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -11887,24 +11887,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Falcon-512", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 8577032.5, - "mad_ns": 1161234.5, - "iqr_ns": 2773725.5, - "min_ns": 7266372.0, - "stddev_ns": 2421599.77, - "ops_per_sec": 116.59, - "total_sum_of_medians_ns": 8917843.5, + "median_ns": 9034543.5, + "mad_ns": 1259437.0, + "iqr_ns": 2822720.75, + "min_ns": 7266090.0, + "stddev_ns": 2643285.5, + "ops_per_sec": 110.69, + "total_sum_of_medians_ns": 9375356.5, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -11927,24 +11927,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Falcon-512", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 290052.0, - "mad_ns": 2204.0, - "iqr_ns": 4148.0, - "min_ns": 277737.0, - "stddev_ns": 3461.74, - "ops_per_sec": 3447.66, - "total_sum_of_medians_ns": 8917843.5, + "median_ns": 290017.0, + "mad_ns": 2203.0, + "iqr_ns": 4129.0, + "min_ns": 278128.0, + "stddev_ns": 3600.25, + "ops_per_sec": 3448.07, + "total_sum_of_medians_ns": 9375356.5, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -11967,24 +11967,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Falcon-512", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 50759.0, - "mad_ns": 38.0, + "median_ns": 50796.0, + "mad_ns": 55.0, "iqr_ns": 93.0, - "min_ns": 50518.0, - "stddev_ns": 441.98, - "ops_per_sec": 19700.94, - "total_sum_of_medians_ns": 8917843.5, + "min_ns": 50536.0, + "stddev_ns": 393.95, + "ops_per_sec": 19686.59, + "total_sum_of_medians_ns": 9375356.5, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -12007,24 +12007,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Falcon-1024", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 26301469.5, - "mad_ns": 2898028.5, - "iqr_ns": 6565978.25, - "min_ns": 22847828.0, - "stddev_ns": 7863581.49, - "ops_per_sec": 38.02, - "total_sum_of_medians_ns": 26984386.5, + "median_ns": 26750530.0, + "mad_ns": 2177951.5, + "iqr_ns": 4428239.25, + "min_ns": 22852024.0, + "stddev_ns": 6346877.55, + "ops_per_sec": 37.38, + "total_sum_of_medians_ns": 27433749.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -12047,24 +12047,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Falcon-1024", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 583456.0, - "mad_ns": 3018.5, - "iqr_ns": 5736.75, - "min_ns": 570455.0, - "stddev_ns": 5639.27, - "ops_per_sec": 1713.93, - "total_sum_of_medians_ns": 26984386.5, + "median_ns": 583478.0, + "mad_ns": 3083.0, + "iqr_ns": 6041.5, + "min_ns": 568941.0, + "stddev_ns": 5558.85, + "ops_per_sec": 1713.86, + "total_sum_of_medians_ns": 27433749.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -12087,24 +12087,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Falcon-1024", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 99461.0, - "mad_ns": 149.0, - "iqr_ns": 370.0, - "min_ns": 98888.0, - "stddev_ns": 623.97, - "ops_per_sec": 10054.19, - "total_sum_of_medians_ns": 26984386.5, + "median_ns": 99741.0, + "mad_ns": 129.0, + "iqr_ns": 279.0, + "min_ns": 99278.0, + "stddev_ns": 562.25, + "ops_per_sec": 10025.97, + "total_sum_of_medians_ns": 27433749.0, "acceleration": { "arithmetic": { "path": "aarch64-asm", @@ -12127,24 +12127,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 1368298.0, - "mad_ns": 851.0, - "iqr_ns": 1759.0, - "min_ns": 1365502.0, - "stddev_ns": 3617.8, - "ops_per_sec": 730.83, - "total_sum_of_medians_ns": 35298940.5, + "median_ns": 1369122.0, + "mad_ns": 759.0, + "iqr_ns": 1625.25, + "min_ns": 1366678.0, + "stddev_ns": 3534.21, + "ops_per_sec": 730.4, + "total_sum_of_medians_ns": 35457314.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12166,24 +12166,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 32056499.5, - "mad_ns": 14666.5, - "iqr_ns": 30374.0, - "min_ns": 32017177.0, - "stddev_ns": 23002.97, - "ops_per_sec": 31.19, - "total_sum_of_medians_ns": 35298940.5, + "median_ns": 32078555.0, + "mad_ns": 13481.5, + "iqr_ns": 25934.25, + "min_ns": 32028565.0, + "stddev_ns": 26634.09, + "ops_per_sec": 31.17, + "total_sum_of_medians_ns": 35457314.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12205,24 +12205,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 1874143.0, - "mad_ns": 1148.0, - "iqr_ns": 2111.0, - "min_ns": 1871162.0, - "stddev_ns": 3502.94, - "ops_per_sec": 533.58, - "total_sum_of_medians_ns": 35298940.5, + "median_ns": 2009637.5, + "mad_ns": 907.0, + "iqr_ns": 1837.5, + "min_ns": 2006100.0, + "stddev_ns": 3757.43, + "ops_per_sec": 497.6, + "total_sum_of_medians_ns": 35457314.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12244,24 +12244,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 87522977.0, - "mad_ns": 40962.5, - "iqr_ns": 82956.5, - "min_ns": 87424821.0, - "stddev_ns": 231342.86, - "ops_per_sec": 11.43, - "total_sum_of_medians_ns": 755834199.5, + "median_ns": 87867614.5, + "mad_ns": 37620.0, + "iqr_ns": 78367.75, + "min_ns": 87778218.0, + "stddev_ns": 46291.99, + "ops_per_sec": 11.38, + "total_sum_of_medians_ns": 756282726.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12283,24 +12283,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 667627638.5, - "mad_ns": 206200.5, - "iqr_ns": 407629.0, - "min_ns": 667013970.0, - "stddev_ns": 335509.93, + "median_ns": 667767689.5, + "mad_ns": 208885.0, + "iqr_ns": 436376.75, + "min_ns": 667079819.0, + "stddev_ns": 432529.6, "ops_per_sec": 1.5, - "total_sum_of_medians_ns": 755834199.5, + "total_sum_of_medians_ns": 756282726.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12322,24 +12322,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 683584.0, - "mad_ns": 444.0, - "iqr_ns": 926.0, - "min_ns": 682399.0, - "stddev_ns": 2097.79, - "ops_per_sec": 1462.88, - "total_sum_of_medians_ns": 755834199.5, + "median_ns": 647422.0, + "mad_ns": 259.0, + "iqr_ns": 555.75, + "min_ns": 646496.0, + "stddev_ns": 2189.84, + "ops_per_sec": 1544.59, + "total_sum_of_medians_ns": 756282726.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12361,24 +12361,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 1988781.0, - "mad_ns": 991.0, - "iqr_ns": 1963.0, - "min_ns": 1986031.0, - "stddev_ns": 3477.97, - "ops_per_sec": 502.82, - "total_sum_of_medians_ns": 57125855.5, + "median_ns": 1989321.0, + "mad_ns": 851.0, + "iqr_ns": 1684.75, + "min_ns": 1986877.0, + "stddev_ns": 3902.49, + "ops_per_sec": 502.68, + "total_sum_of_medians_ns": 57203851.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12400,24 +12400,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "sign", - "median_ns": 52413052.5, - "mad_ns": 21962.0, - "iqr_ns": 42693.5, - "min_ns": 52324183.0, - "stddev_ns": 223969.21, - "ops_per_sec": 19.08, - "total_sum_of_medians_ns": 57125855.5, + "median_ns": 52427177.0, + "mad_ns": 13537.0, + "iqr_ns": 27352.5, + "min_ns": 52380557.0, + "stddev_ns": 29290.73, + "ops_per_sec": 19.07, + "total_sum_of_medians_ns": 57203851.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12439,24 +12439,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "verify", - "median_ns": 2724022.0, - "mad_ns": 833.5, - "iqr_ns": 1732.0, - "min_ns": 2721133.0, - "stddev_ns": 5077.3, - "ops_per_sec": 367.1, - "total_sum_of_medians_ns": 57125855.5, + "median_ns": 2787353.5, + "mad_ns": 907.0, + "iqr_ns": 2009.75, + "min_ns": 2780279.0, + "stddev_ns": 5458.52, + "ops_per_sec": 358.76, + "total_sum_of_medians_ns": 57203851.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12478,24 +12478,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 5243111.0, - "mad_ns": 1777.5, - "iqr_ns": 3866.0, - "min_ns": 5238935.0, - "stddev_ns": 5691.78, - "ops_per_sec": 190.73, - "total_sum_of_medians_ns": 115636888.0, + "median_ns": 5243153.5, + "mad_ns": 2777.5, + "iqr_ns": 6410.75, + "min_ns": 5239209.0, + "stddev_ns": 8797.52, + "ops_per_sec": 190.72, + "total_sum_of_medians_ns": 115607442.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12517,24 +12517,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 107508683.0, - "mad_ns": 35953.0, - "iqr_ns": 76786.25, - "min_ns": 107435499.0, - "stddev_ns": 51306.85, + "median_ns": 107501453.5, + "mad_ns": 39471.5, + "iqr_ns": 85781.25, + "min_ns": 107410315.0, + "stddev_ns": 52252.7, "ops_per_sec": 9.3, - "total_sum_of_medians_ns": 115636888.0, + "total_sum_of_medians_ns": 115607442.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12556,24 +12556,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 2885094.0, - "mad_ns": 981.0, - "iqr_ns": 2028.0, - "min_ns": 2881834.0, - "stddev_ns": 2580.44, - "ops_per_sec": 346.61, - "total_sum_of_medians_ns": 115636888.0, + "median_ns": 2862835.0, + "mad_ns": 1167.0, + "iqr_ns": 2435.0, + "min_ns": 2859353.0, + "stddev_ns": 4910.74, + "ops_per_sec": 349.3, + "total_sum_of_medians_ns": 115607442.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12595,24 +12595,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-128f-simple", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 1531111.0, - "mad_ns": 1815.0, - "iqr_ns": 3629.0, - "min_ns": 1527185.0, - "stddev_ns": 7080.51, - "ops_per_sec": 653.12, - "total_sum_of_medians_ns": 39510786.5, + "median_ns": 1569194.0, + "mad_ns": 6334.0, + "iqr_ns": 12668.0, + "min_ns": 1562620.0, + "stddev_ns": 6544.36, + "ops_per_sec": 637.27, + "total_sum_of_medians_ns": 40215477.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12634,24 +12634,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-128f-simple", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 35785962.5, - "mad_ns": 41443.5, - "iqr_ns": 63564.5, - "min_ns": 35697094.0, - "stddev_ns": 53981.17, - "ops_per_sec": 27.94, - "total_sum_of_medians_ns": 39510786.5, + "median_ns": 36526092.5, + "mad_ns": 23453.0, + "iqr_ns": 133731.5, + "min_ns": 36471408.0, + "stddev_ns": 117213.79, + "ops_per_sec": 27.38, + "total_sum_of_medians_ns": 40215477.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12673,24 +12673,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-128f-simple", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 2193713.0, - "mad_ns": 1852.0, - "iqr_ns": 2778.0, - "min_ns": 2190991.0, - "stddev_ns": 5132.3, - "ops_per_sec": 455.85, - "total_sum_of_medians_ns": 39510786.5, + "median_ns": 2120191.0, + "mad_ns": 1704.0, + "iqr_ns": 5055.75, + "min_ns": 2115931.0, + "stddev_ns": 6152.03, + "ops_per_sec": 471.66, + "total_sum_of_medians_ns": 40215477.5, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12712,24 +12712,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-128s-simple", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 99101491.0, - "mad_ns": 145035.5, - "iqr_ns": 1438111.75, - "min_ns": 97509399.0, - "stddev_ns": 696249.44, - "ops_per_sec": 10.09, - "total_sum_of_medians_ns": 839612180.0, + "median_ns": 97976364.5, + "mad_ns": 206617.5, + "iqr_ns": 510248.75, + "min_ns": 97535920.0, + "stddev_ns": 417222.32, + "ops_per_sec": 10.21, + "total_sum_of_medians_ns": 843661876.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12751,24 +12751,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-128s-simple", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 739801068.0, - "mad_ns": 1360899.5, - "iqr_ns": 2691188.75, - "min_ns": 736891623.0, - "stddev_ns": 1701976.07, - "ops_per_sec": 1.35, - "total_sum_of_medians_ns": 839612180.0, + "median_ns": 745020311.5, + "mad_ns": 922999.5, + "iqr_ns": 2031713.25, + "min_ns": 742893768.0, + "stddev_ns": 2207371.6, + "ops_per_sec": 1.34, + "total_sum_of_medians_ns": 843661876.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12790,24 +12790,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-128s-simple", "implementation": "liboqs", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 709621.0, - "mad_ns": 74.0, - "iqr_ns": 130.0, - "min_ns": 708806.0, - "stddev_ns": 2076.84, - "ops_per_sec": 1409.2, - "total_sum_of_medians_ns": 839612180.0, + "median_ns": 665200.0, + "mad_ns": 19.0, + "iqr_ns": 1666.0, + "min_ns": 664366.0, + "stddev_ns": 2903.61, + "ops_per_sec": 1503.31, + "total_sum_of_medians_ns": 843661876.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12829,24 +12829,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-192f-simple", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 2396286.0, - "mad_ns": 9925.0, - "iqr_ns": 21703.0, - "min_ns": 2373655.0, - "stddev_ns": 12852.9, - "ops_per_sec": 417.31, - "total_sum_of_medians_ns": 69263603.0, + "median_ns": 2361494.0, + "mad_ns": 1509.0, + "iqr_ns": 2649.0, + "min_ns": 2356744.0, + "stddev_ns": 21548.1, + "ops_per_sec": 423.46, + "total_sum_of_medians_ns": 69191838.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12868,24 +12868,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-192f-simple", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "sign", - "median_ns": 63546655.0, - "mad_ns": 59138.0, - "iqr_ns": 127531.5, - "min_ns": 63443619.0, - "stddev_ns": 91707.98, - "ops_per_sec": 15.74, - "total_sum_of_medians_ns": 69263603.0, + "median_ns": 63469570.0, + "mad_ns": 39741.0, + "iqr_ns": 76092.0, + "min_ns": 63239997.0, + "stddev_ns": 233256.69, + "ops_per_sec": 15.76, + "total_sum_of_medians_ns": 69191838.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12907,24 +12907,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-192f-simple", "implementation": "liboqs", "classical": false, "nist_level": 3, "operation": "verify", - "median_ns": 3320662.0, - "mad_ns": 1185.0, - "iqr_ns": 3083.0, - "min_ns": 3307052.0, - "stddev_ns": 6146.3, - "ops_per_sec": 301.14, - "total_sum_of_medians_ns": 69263603.0, + "median_ns": 3360774.0, + "mad_ns": 584.0, + "iqr_ns": 3774.0, + "min_ns": 3342497.0, + "stddev_ns": 6802.69, + "ops_per_sec": 297.55, + "total_sum_of_medians_ns": 69191838.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12946,24 +12946,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-256f-simple", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 6192302.5, - "mad_ns": 6231.5, - "iqr_ns": 23865.25, - "min_ns": 6183294.0, - "stddev_ns": 24841.95, - "ops_per_sec": 161.49, - "total_sum_of_medians_ns": 137201369.5, + "median_ns": 6138775.0, + "mad_ns": 6481.0, + "iqr_ns": 12740.0, + "min_ns": 6123645.0, + "stddev_ns": 13341.48, + "ops_per_sec": 162.9, + "total_sum_of_medians_ns": 138252745.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -12985,24 +12985,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-256f-simple", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 127590813.0, - "mad_ns": 88749.0, - "iqr_ns": 184521.5, - "min_ns": 127350399.0, - "stddev_ns": 446346.71, - "ops_per_sec": 7.84, - "total_sum_of_medians_ns": 137201369.5, + "median_ns": 128835361.5, + "mad_ns": 173380.0, + "iqr_ns": 363788.25, + "min_ns": 128425643.0, + "stddev_ns": 309203.24, + "ops_per_sec": 7.76, + "total_sum_of_medians_ns": 138252745.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -13024,24 +13024,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SPHINCS+-SHA2-256f-simple", "implementation": "liboqs", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 3418254.0, - "mad_ns": 982.0, - "iqr_ns": 1945.0, - "min_ns": 3416272.0, - "stddev_ns": 8648.16, - "ops_per_sec": 292.55, - "total_sum_of_medians_ns": 137201369.5, + "median_ns": 3278608.5, + "mad_ns": 3259.0, + "iqr_ns": 6944.0, + "min_ns": 3273423.0, + "stddev_ns": 13722.78, + "ops_per_sec": 305.01, + "total_sum_of_medians_ns": 138252745.0, "acceleration": { "arithmetic": { "path": "portable-c" @@ -13063,24 +13063,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "rustcrypto", "classical": true, "nist_level": 1, "operation": "keygen", - "median_ns": 54740.0, - "mad_ns": 111.0, - "iqr_ns": 518.0, - "min_ns": 54499.0, - "stddev_ns": 513.05, - "ops_per_sec": 18268.18, - "total_sum_of_medians_ns": 293829.0, + "median_ns": 54759.0, + "mad_ns": 92.0, + "iqr_ns": 519.0, + "min_ns": 54518.0, + "stddev_ns": 432.12, + "ops_per_sec": 18261.84, + "total_sum_of_medians_ns": 292942.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13096,24 +13096,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "rustcrypto", "classical": true, "nist_level": 1, "operation": "sign", - "median_ns": 56499.0, + "median_ns": 56536.0, "mad_ns": 37.0, - "iqr_ns": 56.0, - "min_ns": 56277.0, - "stddev_ns": 436.92, - "ops_per_sec": 17699.43, - "total_sum_of_medians_ns": 293829.0, + "iqr_ns": 57.0, + "min_ns": 56295.0, + "stddev_ns": 538.76, + "ops_per_sec": 17687.84, + "total_sum_of_medians_ns": 292942.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13129,24 +13129,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "rustcrypto", "classical": true, "nist_level": 1, "operation": "verify", - "median_ns": 182590.0, + "median_ns": 181647.0, "mad_ns": 19.0, "iqr_ns": 38.0, - "min_ns": 182461.0, - "stddev_ns": 818.16, - "ops_per_sec": 5476.75, - "total_sum_of_medians_ns": 293829.0, + "min_ns": 181535.0, + "stddev_ns": 843.73, + "ops_per_sec": 5505.18, + "total_sum_of_medians_ns": 292942.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13162,24 +13162,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "rustcrypto", "classical": true, "nist_level": 1, "operation": "verify_cached_key", - "median_ns": 168572.0, + "median_ns": 167628.0, "mad_ns": 19.0, - "iqr_ns": 38.0, - "min_ns": 168442.0, - "stddev_ns": 733.34, - "ops_per_sec": 5932.18, - "total_sum_of_medians_ns": 293829.0, + "iqr_ns": 37.0, + "min_ns": 167481.0, + "stddev_ns": 925.74, + "ops_per_sec": 5965.59, + "total_sum_of_medians_ns": 292942.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13195,24 +13195,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "rustcrypto", "classical": false, "nist_level": 2, "operation": "keygen", - "median_ns": 309940.0, - "mad_ns": 481.0, - "iqr_ns": 944.0, - "min_ns": 308515.0, - "stddev_ns": 1897.37, - "ops_per_sec": 3226.43, - "total_sum_of_medians_ns": 1085282.0, + "median_ns": 310276.0, + "mad_ns": 296.0, + "iqr_ns": 593.0, + "min_ns": 308517.0, + "stddev_ns": 1839.37, + "ops_per_sec": 3222.94, + "total_sum_of_medians_ns": 1085919.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13236,24 +13236,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "rustcrypto", "classical": false, "nist_level": 2, "operation": "sign", - "median_ns": 590511.0, - "mad_ns": 347180.0, - "iqr_ns": 694732.0, - "min_ns": 242349.0, - "stddev_ns": 666362.82, - "ops_per_sec": 1693.45, - "total_sum_of_medians_ns": 1085282.0, + "median_ns": 590551.0, + "mad_ns": 347164.0, + "iqr_ns": 693181.0, + "min_ns": 242332.0, + "stddev_ns": 675674.59, + "ops_per_sec": 1693.33, + "total_sum_of_medians_ns": 1085919.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13277,24 +13277,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "rustcrypto", "classical": false, "nist_level": 2, "operation": "verify", - "median_ns": 184831.0, - "mad_ns": 74.0, + "median_ns": 185092.0, + "mad_ns": 73.0, "iqr_ns": 130.0, - "min_ns": 184516.0, - "stddev_ns": 1218.41, - "ops_per_sec": 5410.35, - "total_sum_of_medians_ns": 1085282.0, + "min_ns": 184795.0, + "stddev_ns": 814.3, + "ops_per_sec": 5402.72, + "total_sum_of_medians_ns": 1085919.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13318,24 +13318,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "rustcrypto", "classical": false, "nist_level": 2, "operation": "verify_cached_key", - "median_ns": 98776.0, - "mad_ns": 56.0, - "iqr_ns": 129.0, - "min_ns": 98480.0, - "stddev_ns": 576.78, - "ops_per_sec": 10123.92, - "total_sum_of_medians_ns": 1085282.0, + "median_ns": 98907.0, + "mad_ns": 55.0, + "iqr_ns": 94.0, + "min_ns": 98592.0, + "stddev_ns": 756.23, + "ops_per_sec": 10110.51, + "total_sum_of_medians_ns": 1085919.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13359,24 +13359,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 484031.0, - "mad_ns": 926.0, - "iqr_ns": 1962.0, - "min_ns": 479049.0, - "stddev_ns": 4092.27, - "ops_per_sec": 2065.98, - "total_sum_of_medians_ns": 1867495.0, + "median_ns": 483682.0, + "mad_ns": 907.0, + "iqr_ns": 1888.0, + "min_ns": 478960.0, + "stddev_ns": 53579.81, + "ops_per_sec": 2067.47, + "total_sum_of_medians_ns": 1863562.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13400,24 +13400,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "sign", - "median_ns": 1089449.0, - "mad_ns": 497420.0, - "iqr_ns": 1240549.5, - "min_ns": 347162.0, - "stddev_ns": 1109585.24, - "ops_per_sec": 917.9, - "total_sum_of_medians_ns": 1867495.0, + "median_ns": 1085956.0, + "mad_ns": 499422.0, + "iqr_ns": 1234843.0, + "min_ns": 346424.0, + "stddev_ns": 1154680.72, + "ops_per_sec": 920.85, + "total_sum_of_medians_ns": 1863562.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13441,24 +13441,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "verify", - "median_ns": 294015.0, - "mad_ns": 92.0, - "iqr_ns": 185.0, - "min_ns": 293589.0, - "stddev_ns": 1747.01, - "ops_per_sec": 3401.19, - "total_sum_of_medians_ns": 1867495.0, + "median_ns": 293924.0, + "mad_ns": 111.0, + "iqr_ns": 222.0, + "min_ns": 293461.0, + "stddev_ns": 1494.73, + "ops_per_sec": 3402.24, + "total_sum_of_medians_ns": 1863562.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13482,24 +13482,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "verify_cached_key", - "median_ns": 143536.0, - "mad_ns": 73.0, - "iqr_ns": 131.0, - "min_ns": 143165.0, - "stddev_ns": 926.93, - "ops_per_sec": 6966.89, - "total_sum_of_medians_ns": 1867495.0, + "median_ns": 143647.0, + "mad_ns": 56.0, + "iqr_ns": 130.0, + "min_ns": 143296.0, + "stddev_ns": 861.88, + "ops_per_sec": 6961.51, + "total_sum_of_medians_ns": 1863562.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13523,24 +13523,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 754861.0, - "mad_ns": 1981.0, - "iqr_ns": 5573.5, - "min_ns": 750028.0, - "stddev_ns": 8748.46, - "ops_per_sec": 1324.75, - "total_sum_of_medians_ns": 2396878.0, + "median_ns": 754532.0, + "mad_ns": 2074.0, + "iqr_ns": 4157.5, + "min_ns": 749588.0, + "stddev_ns": 6039.06, + "ops_per_sec": 1325.32, + "total_sum_of_medians_ns": 2391484.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13564,24 +13564,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 1175745.0, - "mad_ns": 700065.0, - "iqr_ns": 1404390.0, - "min_ns": 474420.0, - "stddev_ns": 1068560.2, - "ops_per_sec": 850.52, - "total_sum_of_medians_ns": 2396878.0, + "median_ns": 1171900.0, + "mad_ns": 696625.0, + "iqr_ns": 1054400.0, + "min_ns": 473053.0, + "stddev_ns": 1044399.44, + "ops_per_sec": 853.32, + "total_sum_of_medians_ns": 2391484.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13605,24 +13605,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 466272.0, - "mad_ns": 111.0, - "iqr_ns": 241.0, - "min_ns": 465772.0, - "stddev_ns": 2668.7, - "ops_per_sec": 2144.67, - "total_sum_of_medians_ns": 2396878.0, + "median_ns": 465052.0, + "mad_ns": 112.0, + "iqr_ns": 258.0, + "min_ns": 464497.0, + "stddev_ns": 2442.83, + "ops_per_sec": 2150.3, + "total_sum_of_medians_ns": 2391484.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13646,24 +13646,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "verify_cached_key", - "median_ns": 208164.0, - "mad_ns": 56.0, - "iqr_ns": 112.0, - "min_ns": 207868.0, - "stddev_ns": 882.97, - "ops_per_sec": 4803.9, - "total_sum_of_medians_ns": 2396878.0, + "median_ns": 209647.0, + "mad_ns": 73.0, + "iqr_ns": 130.0, + "min_ns": 209332.0, + "stddev_ns": 1270.38, + "ops_per_sec": 4769.92, + "total_sum_of_medians_ns": 2391484.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13687,24 +13687,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 439865.0, - "mad_ns": 426.0, - "iqr_ns": 851.0, - "min_ns": 438087.0, - "stddev_ns": 1707.82, - "ops_per_sec": 2273.42, - "total_sum_of_medians_ns": 11329812.5, + "median_ns": 435275.0, + "mad_ns": 352.0, + "iqr_ns": 722.0, + "min_ns": 433942.0, + "stddev_ns": 1350.05, + "ops_per_sec": 2297.4, + "total_sum_of_medians_ns": 11340166.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13727,24 +13727,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 10256548.5, - "mad_ns": 2795.5, - "iqr_ns": 5698.75, - "min_ns": 10240317.0, - "stddev_ns": 222901.18, - "ops_per_sec": 97.5, - "total_sum_of_medians_ns": 11329812.5, + "median_ns": 10285302.0, + "mad_ns": 3009.5, + "iqr_ns": 6004.75, + "min_ns": 10276617.0, + "stddev_ns": 9511.33, + "ops_per_sec": 97.23, + "total_sum_of_medians_ns": 11340166.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13767,24 +13767,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 633399.0, - "mad_ns": 779.0, - "iqr_ns": 1593.0, - "min_ns": 630548.0, - "stddev_ns": 2438.09, - "ops_per_sec": 1578.78, - "total_sum_of_medians_ns": 11329812.5, + "median_ns": 619589.0, + "mad_ns": 907.5, + "iqr_ns": 1824.0, + "min_ns": 616403.0, + "stddev_ns": 2202.38, + "ops_per_sec": 1613.97, + "total_sum_of_medians_ns": 11340166.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13807,24 +13807,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128F", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "verify_cached_key", - "median_ns": 633252.0, - "mad_ns": 759.0, - "iqr_ns": 1518.5, - "min_ns": 630178.0, - "stddev_ns": 2061.35, - "ops_per_sec": 1579.15, - "total_sum_of_medians_ns": 11329812.5, + "median_ns": 619181.0, + "mad_ns": 888.5, + "iqr_ns": 1741.0, + "min_ns": 616070.0, + "stddev_ns": 2419.72, + "ops_per_sec": 1615.04, + "total_sum_of_medians_ns": 11340166.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13847,24 +13847,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "keygen", - "median_ns": 30103908.5, - "mad_ns": 4473.0, - "iqr_ns": 8965.75, - "min_ns": 30092761.0, - "stddev_ns": 12893.12, - "ops_per_sec": 33.22, - "total_sum_of_medians_ns": 247693947.5, + "median_ns": 28309246.5, + "mad_ns": 5138.5, + "iqr_ns": 10504.75, + "min_ns": 28292145.0, + "stddev_ns": 14720.4, + "ops_per_sec": 35.32, + "total_sum_of_medians_ns": 242770497.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13887,24 +13887,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "sign", - "median_ns": 217366831.0, - "mad_ns": 35358.5, - "iqr_ns": 72890.25, - "min_ns": 217277135.0, - "stddev_ns": 54799.93, - "ops_per_sec": 4.6, - "total_sum_of_medians_ns": 247693947.5, + "median_ns": 214227974.0, + "mad_ns": 31332.5, + "iqr_ns": 62270.5, + "min_ns": 214122341.0, + "stddev_ns": 42022.56, + "ops_per_sec": 4.67, + "total_sum_of_medians_ns": 242770497.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13927,24 +13927,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "verify", - "median_ns": 223208.0, - "mad_ns": 408.0, - "iqr_ns": 870.0, - "min_ns": 221986.0, - "stddev_ns": 1090.32, - "ops_per_sec": 4480.13, - "total_sum_of_medians_ns": 247693947.5, + "median_ns": 233277.0, + "mad_ns": 445.0, + "iqr_ns": 944.0, + "min_ns": 232054.0, + "stddev_ns": 1221.45, + "ops_per_sec": 4286.75, + "total_sum_of_medians_ns": 242770497.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -13967,24 +13967,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_128S", "implementation": "rustcrypto", "classical": false, "nist_level": 1, "operation": "verify_cached_key", - "median_ns": 223097.0, - "mad_ns": 426.0, - "iqr_ns": 870.0, - "min_ns": 221782.0, - "stddev_ns": 1168.58, - "ops_per_sec": 4482.36, - "total_sum_of_medians_ns": 247693947.5, + "median_ns": 233480.0, + "mad_ns": 556.0, + "iqr_ns": 1130.0, + "min_ns": 231905.0, + "stddev_ns": 1128.45, + "ops_per_sec": 4283.02, + "total_sum_of_medians_ns": 242770497.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14007,24 +14007,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 671587.0, - "mad_ns": 612.0, - "iqr_ns": 1241.0, - "min_ns": 668476.0, - "stddev_ns": 1305.29, - "ops_per_sec": 1489.01, - "total_sum_of_medians_ns": 22090248.5, + "median_ns": 672755.0, + "mad_ns": 611.0, + "iqr_ns": 1250.0, + "min_ns": 670569.0, + "stddev_ns": 1809.14, + "ops_per_sec": 1486.43, + "total_sum_of_medians_ns": 22037240.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14047,24 +14047,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "sign", - "median_ns": 20319010.5, - "mad_ns": 5221.0, - "iqr_ns": 11168.0, - "min_ns": 20299666.0, - "stddev_ns": 14968.66, - "ops_per_sec": 49.21, - "total_sum_of_medians_ns": 22090248.5, + "median_ns": 20283048.0, + "mad_ns": 5139.0, + "iqr_ns": 10318.5, + "min_ns": 20255715.0, + "stddev_ns": 14811.96, + "ops_per_sec": 49.3, + "total_sum_of_medians_ns": 22037240.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14087,24 +14087,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "verify", - "median_ns": 1099651.0, - "mad_ns": 704.0, - "iqr_ns": 1546.5, - "min_ns": 1096817.0, - "stddev_ns": 3506.83, - "ops_per_sec": 909.38, - "total_sum_of_medians_ns": 22090248.5, + "median_ns": 1081437.0, + "mad_ns": 723.0, + "iqr_ns": 1555.0, + "min_ns": 1079048.0, + "stddev_ns": 2933.95, + "ops_per_sec": 924.7, + "total_sum_of_medians_ns": 22037240.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14127,24 +14127,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_192F", "implementation": "rustcrypto", "classical": false, "nist_level": 3, "operation": "verify_cached_key", - "median_ns": 1086094.0, - "mad_ns": 668.0, - "iqr_ns": 1425.0, - "min_ns": 1083521.0, - "stddev_ns": 2345.06, - "ops_per_sec": 920.73, - "total_sum_of_medians_ns": 22090248.5, + "median_ns": 1067400.0, + "mad_ns": 722.0, + "iqr_ns": 1555.0, + "min_ns": 1064956.0, + "stddev_ns": 2831.77, + "ops_per_sec": 936.86, + "total_sum_of_medians_ns": 22037240.0, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14167,24 +14167,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 1756829.5, - "mad_ns": 1185.0, - "iqr_ns": 2366.5, - "min_ns": 1751977.0, - "stddev_ns": 4440.21, - "ops_per_sec": 569.21, - "total_sum_of_medians_ns": 44047745.5, + "median_ns": 1761960.5, + "mad_ns": 962.5, + "iqr_ns": 1925.75, + "min_ns": 1757951.0, + "stddev_ns": 4212.21, + "ops_per_sec": 567.55, + "total_sum_of_medians_ns": 44054730.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14207,24 +14207,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 41159803.0, - "mad_ns": 9515.0, - "iqr_ns": 20813.0, - "min_ns": 41131654.0, - "stddev_ns": 224699.92, - "ops_per_sec": 24.3, - "total_sum_of_medians_ns": 44047745.5, + "median_ns": 41165092.0, + "mad_ns": 8897.5, + "iqr_ns": 17721.5, + "min_ns": 41138536.0, + "stddev_ns": 23859.41, + "ops_per_sec": 24.29, + "total_sum_of_medians_ns": 44054730.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14247,24 +14247,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 1131113.0, - "mad_ns": 1037.0, - "iqr_ns": 2093.0, - "min_ns": 1128058.0, - "stddev_ns": 2731.0, - "ops_per_sec": 884.08, - "total_sum_of_medians_ns": 44047745.5, + "median_ns": 1127678.0, + "mad_ns": 963.0, + "iqr_ns": 2000.0, + "min_ns": 1124455.0, + "stddev_ns": 2810.48, + "ops_per_sec": 886.78, + "total_sum_of_medians_ns": 44054730.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14287,24 +14287,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SLH_DSA_PURE_SHA2_256F", "implementation": "rustcrypto", "classical": false, "nist_level": 5, "operation": "verify_cached_key", - "median_ns": 1131113.0, - "mad_ns": 963.0, - "iqr_ns": 1926.0, - "min_ns": 1127669.0, - "stddev_ns": 2414.78, - "ops_per_sec": 884.08, - "total_sum_of_medians_ns": 44047745.5, + "median_ns": 1127807.5, + "mad_ns": 926.0, + "iqr_ns": 1865.75, + "min_ns": 1124104.0, + "stddev_ns": 3173.51, + "ops_per_sec": 886.68, + "total_sum_of_medians_ns": 44054730.5, "acceleration": { "arithmetic": { "path": "portable-rust", @@ -14327,24 +14327,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "keygen", - "median_ns": 21501.0, + "median_ns": 21499.0, "mad_ns": 18.0, "iqr_ns": 19.0, - "min_ns": 21408.0, - "stddev_ns": 285.71, - "ops_per_sec": 46509.46, - "total_sum_of_medians_ns": 158059.0, + "min_ns": 21407.0, + "stddev_ns": 328.13, + "ops_per_sec": 46513.79, + "total_sum_of_medians_ns": 157998.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14367,24 +14367,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "sign", - "median_ns": 22519.0, + "median_ns": 22518.0, "mad_ns": 19.0, "iqr_ns": 37.0, - "min_ns": 22426.0, - "stddev_ns": 358.49, - "ops_per_sec": 44406.95, - "total_sum_of_medians_ns": 158059.0, + "min_ns": 22389.0, + "stddev_ns": 210.41, + "ops_per_sec": 44408.92, + "total_sum_of_medians_ns": 157998.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14407,24 +14407,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "Ed25519", "implementation": "aws-lc-rs", "classical": true, "nist_level": 1, "operation": "verify", - "median_ns": 114039.0, + "median_ns": 113981.0, "mad_ns": 37.0, - "iqr_ns": 74.0, - "min_ns": 113705.0, - "stddev_ns": 665.42, - "ops_per_sec": 8768.93, - "total_sum_of_medians_ns": 158059.0, + "iqr_ns": 92.0, + "min_ns": 113703.0, + "stddev_ns": 760.71, + "ops_per_sec": 8773.39, + "total_sum_of_medians_ns": 157998.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14447,24 +14447,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "aws-lc-rs", "classical": false, "nist_level": 2, "operation": "keygen", - "median_ns": 69093.0, + "median_ns": 69110.0, "mad_ns": 38.0, "iqr_ns": 93.0, - "min_ns": 65112.0, - "stddev_ns": 868.69, - "ops_per_sec": 14473.25, - "total_sum_of_medians_ns": 294746.0, + "min_ns": 65111.0, + "stddev_ns": 820.74, + "ops_per_sec": 14469.69, + "total_sum_of_medians_ns": 292016.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14486,24 +14486,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "aws-lc-rs", "classical": false, "nist_level": 2, "operation": "sign", - "median_ns": 157985.0, - "mad_ns": 62224.0, - "iqr_ns": 119336.0, - "min_ns": 95390.0, - "stddev_ns": 111273.75, - "ops_per_sec": 6329.71, - "total_sum_of_medians_ns": 294746.0, + "median_ns": 155221.0, + "mad_ns": 59462.0, + "iqr_ns": 114185.0, + "min_ns": 95388.0, + "stddev_ns": 109110.42, + "ops_per_sec": 6442.43, + "total_sum_of_medians_ns": 292016.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14525,24 +14525,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-44", "implementation": "aws-lc-rs", "classical": false, "nist_level": 2, "operation": "verify", - "median_ns": 67668.0, - "mad_ns": 19.0, + "median_ns": 67685.0, + "mad_ns": 18.0, "iqr_ns": 37.0, - "min_ns": 67593.0, - "stddev_ns": 582.22, - "ops_per_sec": 14778.03, - "total_sum_of_medians_ns": 294746.0, + "min_ns": 67610.0, + "stddev_ns": 487.75, + "ops_per_sec": 14774.32, + "total_sum_of_medians_ns": 292016.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14564,24 +14564,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "aws-lc-rs", "classical": false, "nist_level": 3, "operation": "keygen", - "median_ns": 118669.0, + "median_ns": 118666.0, "mad_ns": 56.0, - "iqr_ns": 112.0, - "min_ns": 118391.0, - "stddev_ns": 628.13, - "ops_per_sec": 8426.8, - "total_sum_of_medians_ns": 488158.0, + "iqr_ns": 129.0, + "min_ns": 118314.0, + "stddev_ns": 786.42, + "ops_per_sec": 8427.01, + "total_sum_of_medians_ns": 485256.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14603,24 +14603,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "aws-lc-rs", "classical": false, "nist_level": 3, "operation": "sign", - "median_ns": 256579.0, - "mad_ns": 79186.0, - "iqr_ns": 190132.5, - "min_ns": 148558.0, - "stddev_ns": 175230.43, - "ops_per_sec": 3897.44, - "total_sum_of_medians_ns": 488158.0, + "median_ns": 253628.0, + "mad_ns": 77981.0, + "iqr_ns": 183685.0, + "min_ns": 148703.0, + "stddev_ns": 169435.45, + "ops_per_sec": 3942.78, + "total_sum_of_medians_ns": 485256.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14642,24 +14642,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-65", "implementation": "aws-lc-rs", "classical": false, "nist_level": 3, "operation": "verify", - "median_ns": 112910.0, + "median_ns": 112962.0, "mad_ns": 19.0, - "iqr_ns": 55.0, - "min_ns": 112780.0, - "stddev_ns": 753.88, - "ops_per_sec": 8856.61, - "total_sum_of_medians_ns": 488158.0, + "iqr_ns": 56.0, + "min_ns": 112851.0, + "stddev_ns": 704.49, + "ops_per_sec": 8852.53, + "total_sum_of_medians_ns": 485256.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14681,24 +14681,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "aws-lc-rs", "classical": false, "nist_level": 5, "operation": "keygen", - "median_ns": 201966.0, - "mad_ns": 110.0, - "iqr_ns": 222.0, - "min_ns": 196114.0, - "stddev_ns": 1451.24, - "ops_per_sec": 4951.33, - "total_sum_of_medians_ns": 744771.0, + "median_ns": 202036.0, + "mad_ns": 93.0, + "iqr_ns": 203.0, + "min_ns": 196147.0, + "stddev_ns": 1460.51, + "ops_per_sec": 4949.61, + "total_sum_of_medians_ns": 746736.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14720,24 +14720,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "aws-lc-rs", "classical": false, "nist_level": 5, "operation": "sign", - "median_ns": 348987.0, - "mad_ns": 101723.0, - "iqr_ns": 216402.0, - "min_ns": 246856.0, - "stddev_ns": 184378.95, - "ops_per_sec": 2865.44, - "total_sum_of_medians_ns": 744771.0, + "median_ns": 350757.0, + "mad_ns": 103277.0, + "iqr_ns": 222507.0, + "min_ns": 246813.0, + "stddev_ns": 176789.28, + "ops_per_sec": 2850.98, + "total_sum_of_medians_ns": 746736.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -14759,24 +14759,24 @@ } }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "ML-DSA-87", "implementation": "aws-lc-rs", "classical": false, "nist_level": 5, "operation": "verify", - "median_ns": 193818.0, + "median_ns": 193943.0, "mad_ns": 37.0, "iqr_ns": 74.0, - "min_ns": 193632.0, - "stddev_ns": 1312.23, - "ops_per_sec": 5159.48, - "total_sum_of_medians_ns": 744771.0, + "min_ns": 193795.0, + "stddev_ns": 1081.41, + "ops_per_sec": 5156.15, + "total_sum_of_medians_ns": 746736.0, "acceleration": { "arithmetic": { "path": "aws-lc-native", @@ -24877,12 +24877,12 @@ ], "tls": [ { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519+ed25519", "group": "X25519", "sig_alg": "ed25519", @@ -24890,21 +24890,21 @@ "unstable_features": false, "phase": "baseline", "is_baseline_pair": true, - "handshakes_per_sec": 767.0, - "median_ns": 1303818.0, - "primitive_sum_of_medians_ns": 790788.0, + "handshakes_per_sec": 774.5, + "median_ns": 1291140.0, + "primitive_sum_of_medians_ns": 791503.0, "primitive_sum_complete": true, "bytes_total": 1518, "client_hello_bytes": 226, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ed25519", "group": "X25519MLKEM768", "sig_alg": "ed25519", @@ -24912,21 +24912,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 608.5, - "median_ns": 1643453.0, - "primitive_sum_of_medians_ns": 889898.0, + "handshakes_per_sec": 612.3, + "median_ns": 1633072.5, + "primitive_sum_of_medians_ns": 890744.0, "primitive_sum_complete": true, "bytes_total": 3782, "client_hello_bytes": 1402, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+ed25519", "group": "SecP256r1MLKEM768", "sig_alg": "ed25519", @@ -24934,8 +24934,8 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 597.4, - "median_ns": 1673879.5, + "handshakes_per_sec": 598.2, + "median_ns": 1671655.5, "primitive_sum_of_medians_ns": null, "primitive_sum_complete": false, "bytes_total": 3848, @@ -24943,12 +24943,12 @@ "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ed25519", "group": "MLKEM512", "sig_alg": "ed25519", @@ -24956,21 +24956,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 950.3, - "median_ns": 1052267.0, - "primitive_sum_of_medians_ns": 409459.0, + "handshakes_per_sec": 936.9, + "median_ns": 1067363.0, + "primitive_sum_of_medians_ns": 409906.0, "primitive_sum_complete": true, "bytes_total": 3014, "client_hello_bytes": 986, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ed25519", "group": "MLKEM768", "sig_alg": "ed25519", @@ -24978,21 +24978,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 858.1, - "median_ns": 1165324.0, - "primitive_sum_of_medians_ns": 445978.0, + "handshakes_per_sec": 869.5, + "median_ns": 1150057.0, + "primitive_sum_of_medians_ns": 446444.0, "primitive_sum_complete": true, "bytes_total": 3718, "client_hello_bytes": 1370, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ed25519", "group": "MLKEM1024", "sig_alg": "ed25519", @@ -25000,21 +25000,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 781.6, - "median_ns": 1279363.5, - "primitive_sum_of_medians_ns": 494330.0, + "handshakes_per_sec": 788.1, + "median_ns": 1268899.0, + "primitive_sum_of_medians_ns": 494333.0, "primitive_sum_complete": true, "bytes_total": 4582, "client_hello_bytes": 1754, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ML-DSA-44", "group": "X25519MLKEM768", "sig_alg": "ML-DSA-44", @@ -25022,21 +25022,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 378.5, - "median_ns": 2642264.5, - "primitive_sum_of_medians_ns": 1179189.5, + "handshakes_per_sec": 378.4, + "median_ns": 2642759.5, + "primitive_sum_of_medians_ns": 1179908.0, "primitive_sum_complete": true, "bytes_total": 9800, "client_hello_bytes": 1402, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ML-DSA-65", "group": "X25519MLKEM768", "sig_alg": "ML-DSA-65", @@ -25044,21 +25044,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 281.9, - "median_ns": 3546908.5, - "primitive_sum_of_medians_ns": 1595998.0, + "handshakes_per_sec": 282.2, + "median_ns": 3544197.5, + "primitive_sum_of_medians_ns": 1596637.5, "primitive_sum_complete": true, "bytes_total": 12218, "client_hello_bytes": 1402, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ML-DSA-87", "group": "X25519MLKEM768", "sig_alg": "ML-DSA-87", @@ -25066,21 +25066,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 238.5, - "median_ns": 4192695.5, - "primitive_sum_of_medians_ns": 1988086.0, + "handshakes_per_sec": 236.6, + "median_ns": 4226656.0, + "primitive_sum_of_medians_ns": 1987941.0, "primitive_sum_complete": true, "bytes_total": 15494, "client_hello_bytes": 1402, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ML-DSA-44", "group": "MLKEM512", "sig_alg": "ML-DSA-44", @@ -25088,21 +25088,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 483.8, - "median_ns": 2067087.5, - "primitive_sum_of_medians_ns": 698750.5, + "handshakes_per_sec": 484.7, + "median_ns": 2062958.0, + "primitive_sum_of_medians_ns": 699070.0, "primitive_sum_complete": true, "bytes_total": 9032, "client_hello_bytes": 986, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ML-DSA-65", "group": "MLKEM512", "sig_alg": "ML-DSA-65", @@ -25110,21 +25110,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 335.1, - "median_ns": 2984361.0, - "primitive_sum_of_medians_ns": 1115559.0, + "handshakes_per_sec": 335.9, + "median_ns": 2976961.5, + "primitive_sum_of_medians_ns": 1115799.5, "primitive_sum_complete": true, "bytes_total": 11450, "client_hello_bytes": 986, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ML-DSA-87", "group": "MLKEM512", "sig_alg": "ML-DSA-87", @@ -25132,21 +25132,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 272.4, - "median_ns": 3670436.0, - "primitive_sum_of_medians_ns": 1507647.0, + "handshakes_per_sec": 276.5, + "median_ns": 3616151.5, + "primitive_sum_of_medians_ns": 1507103.0, "primitive_sum_complete": true, "bytes_total": 14726, "client_hello_bytes": 986, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ML-DSA-44", "group": "MLKEM768", "sig_alg": "ML-DSA-44", @@ -25154,21 +25154,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 459.6, - "median_ns": 2175931.0, - "primitive_sum_of_medians_ns": 735269.5, + "handshakes_per_sec": 462.5, + "median_ns": 2162263.0, + "primitive_sum_of_medians_ns": 735608.0, "primitive_sum_complete": true, "bytes_total": 9736, "client_hello_bytes": 1370, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ML-DSA-65", "group": "MLKEM768", "sig_alg": "ML-DSA-65", @@ -25176,21 +25176,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 325.7, - "median_ns": 3070000.0, - "primitive_sum_of_medians_ns": 1152078.0, + "handshakes_per_sec": 326.3, + "median_ns": 3065108.5, + "primitive_sum_of_medians_ns": 1152337.5, "primitive_sum_complete": true, "bytes_total": 12154, "client_hello_bytes": 1370, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ML-DSA-87", "group": "MLKEM768", "sig_alg": "ML-DSA-87", @@ -25198,21 +25198,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 269.4, - "median_ns": 3711638.5, - "primitive_sum_of_medians_ns": 1544166.0, + "handshakes_per_sec": 269.5, + "median_ns": 3711085.5, + "primitive_sum_of_medians_ns": 1543641.0, "primitive_sum_complete": true, "bytes_total": 15430, "client_hello_bytes": 1370, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ML-DSA-44", "group": "MLKEM1024", "sig_alg": "ML-DSA-44", @@ -25220,21 +25220,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 427.0, - "median_ns": 2341932.5, - "primitive_sum_of_medians_ns": 783621.5, + "handshakes_per_sec": 438.0, + "median_ns": 2283179.0, + "primitive_sum_of_medians_ns": 783497.0, "primitive_sum_complete": true, "bytes_total": 10600, "client_hello_bytes": 1754, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ML-DSA-65", "group": "MLKEM1024", "sig_alg": "ML-DSA-65", @@ -25242,21 +25242,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 312.2, - "median_ns": 3202908.0, - "primitive_sum_of_medians_ns": 1200430.0, + "handshakes_per_sec": 313.8, + "median_ns": 3186802.0, + "primitive_sum_of_medians_ns": 1200226.5, "primitive_sum_complete": true, "bytes_total": 13018, "client_hello_bytes": 1754, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ML-DSA-87", "group": "MLKEM1024", "sig_alg": "ML-DSA-87", @@ -25264,21 +25264,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 257.4, - "median_ns": 3885158.5, - "primitive_sum_of_medians_ns": 1592518.0, + "handshakes_per_sec": 259.3, + "median_ns": 3856140.0, + "primitive_sum_of_medians_ns": 1591530.0, "primitive_sum_complete": true, "bytes_total": 16294, "client_hello_bytes": 1754, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+mldsa44", "group": "X25519MLKEM768", "sig_alg": "mldsa44", @@ -25286,21 +25286,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 373.8, - "median_ns": 2675195.0, - "primitive_sum_of_medians_ns": 1179189.5, + "handshakes_per_sec": 372.1, + "median_ns": 2687342.5, + "primitive_sum_of_medians_ns": 1179908.0, "primitive_sum_complete": true, "bytes_total": 9874, "client_hello_bytes": 1478, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+mldsa65", "group": "X25519MLKEM768", "sig_alg": "mldsa65", @@ -25308,21 +25308,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 279.6, - "median_ns": 3576152.5, - "primitive_sum_of_medians_ns": 1595998.0, + "handshakes_per_sec": 279.8, + "median_ns": 3573651.5, + "primitive_sum_of_medians_ns": 1596637.5, "primitive_sum_complete": true, "bytes_total": 12292, "client_hello_bytes": 1478, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+mldsa87", "group": "X25519MLKEM768", "sig_alg": "mldsa87", @@ -25330,21 +25330,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 236.7, - "median_ns": 4225179.5, - "primitive_sum_of_medians_ns": 1988086.0, + "handshakes_per_sec": 233.5, + "median_ns": 4283415.0, + "primitive_sum_of_medians_ns": 1987941.0, "primitive_sum_complete": true, "bytes_total": 15568, "client_hello_bytes": 1478, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+falcon512", "group": "X25519MLKEM768", "sig_alg": "falcon512", @@ -25352,21 +25352,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 305.2, - "median_ns": 3276453.0, - "primitive_sum_of_medians_ns": 934600.0, + "handshakes_per_sec": 313.7, + "median_ns": 3187293.0, + "primitive_sum_of_medians_ns": 935150.0, "primitive_sum_complete": true, - "bytes_total": 5917, + "bytes_total": 5927, "client_hello_bytes": 1478, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+sphincssha2128fsimple", "group": "X25519MLKEM768", "sig_alg": "sphincssha2128fsimple", @@ -25375,20 +25375,20 @@ "phase": "phase2", "is_baseline_pair": false, "handshakes_per_sec": 22.9, - "median_ns": 43611561.5, - "primitive_sum_of_medians_ns": 40716418.5, + "median_ns": 43747185.5, + "primitive_sum_of_medians_ns": 41310015.5, "primitive_sum_complete": true, "bytes_total": 37975, "client_hello_bytes": 1478, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+mldsa44", "group": "SecP256r1MLKEM768", "sig_alg": "mldsa44", @@ -25396,8 +25396,8 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 368.4, - "median_ns": 2714606.0, + "handshakes_per_sec": 367.2, + "median_ns": 2723157.0, "primitive_sum_of_medians_ns": null, "primitive_sum_complete": false, "bytes_total": 9940, @@ -25405,12 +25405,12 @@ "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+mldsa65", "group": "SecP256r1MLKEM768", "sig_alg": "mldsa65", @@ -25418,8 +25418,8 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 276.2, - "median_ns": 3620357.5, + "handshakes_per_sec": 276.4, + "median_ns": 3617456.5, "primitive_sum_of_medians_ns": null, "primitive_sum_complete": false, "bytes_total": 12358, @@ -25427,12 +25427,12 @@ "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+mldsa87", "group": "SecP256r1MLKEM768", "sig_alg": "mldsa87", @@ -25440,8 +25440,8 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 232.6, - "median_ns": 4298512.5, + "handshakes_per_sec": 234.9, + "median_ns": 4257100.0, "primitive_sum_of_medians_ns": null, "primitive_sum_complete": false, "bytes_total": 15634, @@ -25449,12 +25449,12 @@ "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+falcon512", "group": "SecP256r1MLKEM768", "sig_alg": "falcon512", @@ -25462,21 +25462,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 309.2, - "median_ns": 3234500.0, + "handshakes_per_sec": 311.5, + "median_ns": 3210357.0, "primitive_sum_of_medians_ns": null, "primitive_sum_complete": false, - "bytes_total": 5987, + "bytes_total": 5994, "client_hello_bytes": 1511, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+sphincssha2128fsimple", "group": "SecP256r1MLKEM768", "sig_alg": "sphincssha2128fsimple", @@ -25484,8 +25484,8 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 22.8, - "median_ns": 43885456.5, + "handshakes_per_sec": 22.7, + "median_ns": 44043152.5, "primitive_sum_of_medians_ns": null, "primitive_sum_complete": false, "bytes_total": 38041, @@ -25493,12 +25493,12 @@ "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem512+mldsa44", "group": "mlkem512", "sig_alg": "mldsa44", @@ -25506,21 +25506,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 473.7, - "median_ns": 2110835.0, - "primitive_sum_of_medians_ns": 698750.5, + "handshakes_per_sec": 477.8, + "median_ns": 2092994.5, + "primitive_sum_of_medians_ns": 699070.0, "primitive_sum_complete": true, "bytes_total": 9106, "client_hello_bytes": 1062, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem512+mldsa65", "group": "mlkem512", "sig_alg": "mldsa65", @@ -25528,21 +25528,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 332.0, - "median_ns": 3011686.0, - "primitive_sum_of_medians_ns": 1115559.0, + "handshakes_per_sec": 333.7, + "median_ns": 2996756.0, + "primitive_sum_of_medians_ns": 1115799.5, "primitive_sum_complete": true, "bytes_total": 11524, "client_hello_bytes": 1062, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem512+mldsa87", "group": "mlkem512", "sig_alg": "mldsa87", @@ -25550,21 +25550,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 274.3, - "median_ns": 3645719.5, - "primitive_sum_of_medians_ns": 1507647.0, + "handshakes_per_sec": 273.4, + "median_ns": 3657038.5, + "primitive_sum_of_medians_ns": 1507103.0, "primitive_sum_complete": true, "bytes_total": 14800, "client_hello_bytes": 1062, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem512+falcon512", "group": "mlkem512", "sig_alg": "falcon512", @@ -25572,21 +25572,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 384.6, - "median_ns": 2600357.0, - "primitive_sum_of_medians_ns": 454161.0, + "handshakes_per_sec": 387.4, + "median_ns": 2581370.5, + "primitive_sum_of_medians_ns": 454312.0, "primitive_sum_complete": true, - "bytes_total": 5148, + "bytes_total": 5153, "client_hello_bytes": 1062, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem512+sphincssha2128fsimple", "group": "mlkem512", "sig_alg": "sphincssha2128fsimple", @@ -25594,21 +25594,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 23.4, - "median_ns": 42759218.5, - "primitive_sum_of_medians_ns": 40235979.5, + "handshakes_per_sec": 22.7, + "median_ns": 43973196.5, + "primitive_sum_of_medians_ns": 40829177.5, "primitive_sum_complete": true, "bytes_total": 37207, "client_hello_bytes": 1062, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem768+mldsa44", "group": "mlkem768", "sig_alg": "mldsa44", @@ -25616,21 +25616,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 456.2, - "median_ns": 2191795.0, - "primitive_sum_of_medians_ns": 735269.5, + "handshakes_per_sec": 456.6, + "median_ns": 2190132.5, + "primitive_sum_of_medians_ns": 735608.0, "primitive_sum_complete": true, "bytes_total": 9810, "client_hello_bytes": 1446, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem768+mldsa65", "group": "mlkem768", "sig_alg": "mldsa65", @@ -25638,21 +25638,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 322.1, - "median_ns": 3104199.5, - "primitive_sum_of_medians_ns": 1152078.0, + "handshakes_per_sec": 317.4, + "median_ns": 3150190.5, + "primitive_sum_of_medians_ns": 1152337.5, "primitive_sum_complete": true, "bytes_total": 12228, "client_hello_bytes": 1446, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem768+mldsa87", "group": "mlkem768", "sig_alg": "mldsa87", @@ -25660,21 +25660,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 263.3, - "median_ns": 3797871.5, - "primitive_sum_of_medians_ns": 1544166.0, + "handshakes_per_sec": 266.3, + "median_ns": 3755676.5, + "primitive_sum_of_medians_ns": 1543641.0, "primitive_sum_complete": true, "bytes_total": 15504, "client_hello_bytes": 1446, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem768+falcon512", "group": "mlkem768", "sig_alg": "falcon512", @@ -25682,21 +25682,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 372.3, - "median_ns": 2686224.0, - "primitive_sum_of_medians_ns": 490680.0, + "handshakes_per_sec": 372.2, + "median_ns": 2686768.5, + "primitive_sum_of_medians_ns": 490850.0, "primitive_sum_complete": true, - "bytes_total": 5855, + "bytes_total": 5863, "client_hello_bytes": 1446, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem768+sphincssha2128fsimple", "group": "mlkem768", "sig_alg": "sphincssha2128fsimple", @@ -25704,21 +25704,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 22.7, - "median_ns": 44022291.0, - "primitive_sum_of_medians_ns": 40272498.5, + "handshakes_per_sec": 23.3, + "median_ns": 42888498.5, + "primitive_sum_of_medians_ns": 40865715.5, "primitive_sum_complete": true, "bytes_total": 37911, "client_hello_bytes": 1446, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem1024+mldsa44", "group": "mlkem1024", "sig_alg": "mldsa44", @@ -25726,21 +25726,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 425.2, - "median_ns": 2351875.5, - "primitive_sum_of_medians_ns": 783621.5, + "handshakes_per_sec": 431.3, + "median_ns": 2318612.5, + "primitive_sum_of_medians_ns": 783497.0, "primitive_sum_complete": true, "bytes_total": 10674, "client_hello_bytes": 1830, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem1024+mldsa65", "group": "mlkem1024", "sig_alg": "mldsa65", @@ -25748,21 +25748,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 310.8, - "median_ns": 3217778.5, - "primitive_sum_of_medians_ns": 1200430.0, + "handshakes_per_sec": 311.3, + "median_ns": 3212338.0, + "primitive_sum_of_medians_ns": 1200226.5, "primitive_sum_complete": true, "bytes_total": 13092, "client_hello_bytes": 1830, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem1024+mldsa87", "group": "mlkem1024", "sig_alg": "mldsa87", @@ -25770,21 +25770,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 258.2, - "median_ns": 3872680.5, - "primitive_sum_of_medians_ns": 1592518.0, + "handshakes_per_sec": 259.1, + "median_ns": 3859898.5, + "primitive_sum_of_medians_ns": 1591530.0, "primitive_sum_complete": true, "bytes_total": 16368, "client_hello_bytes": 1830, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem1024+falcon512", "group": "mlkem1024", "sig_alg": "falcon512", @@ -25792,21 +25792,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 354.5, - "median_ns": 2820479.0, - "primitive_sum_of_medians_ns": 539032.0, + "handshakes_per_sec": 356.9, + "median_ns": 2801933.5, + "primitive_sum_of_medians_ns": 538739.0, "primitive_sum_complete": true, - "bytes_total": 6718, + "bytes_total": 6722, "client_hello_bytes": 1830, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "mlkem1024+sphincssha2128fsimple", "group": "mlkem1024", "sig_alg": "sphincssha2128fsimple", @@ -25814,21 +25814,21 @@ "unstable_features": false, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 23.0, - "median_ns": 43513600.5, - "primitive_sum_of_medians_ns": 40320850.5, + "handshakes_per_sec": 22.8, + "median_ns": 43768840.5, + "primitive_sum_of_medians_ns": 40913604.5, "primitive_sum_complete": true, "bytes_total": 38775, "client_hello_bytes": 1830, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519+ed25519", "group": "X25519", "sig_alg": "ed25519", @@ -25836,21 +25836,21 @@ "unstable_features": false, "phase": "baseline", "is_baseline_pair": true, - "handshakes_per_sec": 1861.1, - "median_ns": 537318.0, - "primitive_sum_of_medians_ns": 386527.0, + "handshakes_per_sec": 1864.1, + "median_ns": 536459.5, + "primitive_sum_of_medians_ns": 386404.0, "primitive_sum_complete": true, "bytes_total": 1136, "client_hello_bytes": 232, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ed25519", "group": "X25519MLKEM768", "sig_alg": "ed25519", @@ -25858,21 +25858,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 1521.4, - "median_ns": 657290.0, - "primitive_sum_of_medians_ns": 483732.0, + "handshakes_per_sec": 1512.2, + "median_ns": 661273.0, + "primitive_sum_of_medians_ns": 487570.0, "primitive_sum_complete": true, "bytes_total": 3408, "client_hello_bytes": 1416, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "SecP256r1MLKEM768+ed25519", "group": "SecP256r1MLKEM768", "sig_alg": "ed25519", @@ -25880,21 +25880,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 1250.5, - "median_ns": 799652.0, - "primitive_sum_of_medians_ns": 614140.0, + "handshakes_per_sec": 1253.4, + "median_ns": 797846.0, + "primitive_sum_of_medians_ns": 617978.0, "primitive_sum_complete": true, "bytes_total": 3474, "client_hello_bytes": 1449, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ed25519", "group": "MLKEM768", "sig_alg": "ed25519", @@ -25902,21 +25902,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 1928.5, - "median_ns": 518530.0, - "primitive_sum_of_medians_ns": 347802.0, + "handshakes_per_sec": 1934.3, + "median_ns": 516978.0, + "primitive_sum_of_medians_ns": 351646.0, "primitive_sum_complete": true, "bytes_total": 3344, "client_hello_bytes": 1384, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ed25519", "group": "MLKEM1024", "sig_alg": "ed25519", @@ -25924,21 +25924,21 @@ "unstable_features": false, "phase": "phase0", "is_baseline_pair": false, - "handshakes_per_sec": 1750.7, - "median_ns": 571216.0, - "primitive_sum_of_medians_ns": 396044.0, + "handshakes_per_sec": 1751.2, + "median_ns": 571032.5, + "primitive_sum_of_medians_ns": 395997.0, "primitive_sum_complete": true, "bytes_total": 4208, "client_hello_bytes": 1768, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ML-DSA-44", "group": "X25519MLKEM768", "sig_alg": "ML-DSA-44", @@ -25946,21 +25946,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 1330.1, - "median_ns": 751800.0, - "primitive_sum_of_medians_ns": 526456.0, + "handshakes_per_sec": 1333.3, + "median_ns": 750003.5, + "primitive_sum_of_medians_ns": 527681.0, "primitive_sum_complete": true, "bytes_total": 9426, "client_hello_bytes": 1416, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ML-DSA-65", "group": "X25519MLKEM768", "sig_alg": "ML-DSA-65", @@ -25968,21 +25968,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 1060.6, - "median_ns": 942846.5, - "primitive_sum_of_medians_ns": 715534.0, + "handshakes_per_sec": 1042.7, + "median_ns": 959030.0, + "primitive_sum_of_medians_ns": 716642.0, "primitive_sum_complete": true, "bytes_total": 11844, "client_hello_bytes": 1416, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+ML-DSA-87", "group": "X25519MLKEM768", "sig_alg": "ML-DSA-87", @@ -25990,21 +25990,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 803.3, - "median_ns": 1244940.5, - "primitive_sum_of_medians_ns": 969758.0, + "handshakes_per_sec": 805.3, + "median_ns": 1241843.0, + "primitive_sum_of_medians_ns": 975733.0, "primitive_sum_complete": true, "bytes_total": 15120, "client_hello_bytes": 1416, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ML-DSA-44", "group": "MLKEM768", "sig_alg": "ML-DSA-44", @@ -26012,21 +26012,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 1637.5, - "median_ns": 610678.0, - "primitive_sum_of_medians_ns": 390526.0, + "handshakes_per_sec": 1624.4, + "median_ns": 615597.5, + "primitive_sum_of_medians_ns": 391757.0, "primitive_sum_complete": true, "bytes_total": 9362, "client_hello_bytes": 1384, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ML-DSA-65", "group": "MLKEM768", "sig_alg": "ML-DSA-65", @@ -26034,21 +26034,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 1231.6, - "median_ns": 811920.0, - "primitive_sum_of_medians_ns": 579604.0, + "handshakes_per_sec": 1239.3, + "median_ns": 806901.5, + "primitive_sum_of_medians_ns": 580718.0, "primitive_sum_complete": true, "bytes_total": 11780, "client_hello_bytes": 1384, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM768+ML-DSA-87", "group": "MLKEM768", "sig_alg": "ML-DSA-87", @@ -26056,21 +26056,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 908.3, - "median_ns": 1100931.0, - "primitive_sum_of_medians_ns": 833828.0, + "handshakes_per_sec": 906.8, + "median_ns": 1102816.0, + "primitive_sum_of_medians_ns": 839809.0, "primitive_sum_complete": true, "bytes_total": 15056, "client_hello_bytes": 1384, "client_hello_fragmented": false }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ML-DSA-44", "group": "MLKEM1024", "sig_alg": "ML-DSA-44", @@ -26078,21 +26078,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 1508.7, - "median_ns": 662827.0, - "primitive_sum_of_medians_ns": 438768.0, + "handshakes_per_sec": 1512.3, + "median_ns": 661254.5, + "primitive_sum_of_medians_ns": 436108.0, "primitive_sum_complete": true, "bytes_total": 10226, "client_hello_bytes": 1768, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ML-DSA-65", "group": "MLKEM1024", "sig_alg": "ML-DSA-65", @@ -26100,21 +26100,21 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 1147.7, - "median_ns": 871281.5, - "primitive_sum_of_medians_ns": 627846.0, + "handshakes_per_sec": 1154.2, + "median_ns": 866401.0, + "primitive_sum_of_medians_ns": 625069.0, "primitive_sum_complete": true, "bytes_total": 12644, "client_hello_bytes": 1768, "client_hello_fragmented": true }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM1024+ML-DSA-87", "group": "MLKEM1024", "sig_alg": "ML-DSA-87", @@ -26122,9 +26122,9 @@ "unstable_features": true, "phase": "phase2", "is_baseline_pair": false, - "handshakes_per_sec": 867.1, - "median_ns": 1153218.0, - "primitive_sum_of_medians_ns": 882070.0, + "handshakes_per_sec": 868.6, + "median_ns": 1151251.0, + "primitive_sum_of_medians_ns": 884160.0, "primitive_sum_complete": true, "bytes_total": 15920, "client_hello_bytes": 1768, @@ -29675,23 +29675,23 @@ ], "kem_absent": [ { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "X25519MLKEM768", "implementation": "liboqs", "reason": "not enabled in this liboqs build" }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "alg": "SecP256r1MLKEM768", "implementation": "liboqs", "reason": "not enabled in this liboqs build" @@ -29766,12 +29766,12 @@ "sig_absent": [], "tls_absent": [ { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ed25519", "group": "MLKEM512", "sig_alg": "ed25519", @@ -29781,12 +29781,12 @@ "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ML-DSA-44", "group": "MLKEM512", "sig_alg": "ML-DSA-44", @@ -29796,12 +29796,12 @@ "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ML-DSA-65", "group": "MLKEM512", "sig_alg": "ML-DSA-65", @@ -29811,12 +29811,12 @@ "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "MLKEM512+ML-DSA-87", "group": "MLKEM512", "sig_alg": "ML-DSA-87", @@ -29826,12 +29826,12 @@ "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" }, { - "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-20T15:01:15Z", + "run_id": "rasberrypi5/Raspberry Pi 5 Model B Rev 1.1@2026-07-30T21:49:57Z", "hostname": "rasberrypi5", "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", "is_rpi": true, "is_baseline_grade": true, - "source_file": "rasberrypi5-20260720T143239Z.json", + "source_file": "rasberrypi5-20260730T212145Z.json", "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", "group": "X25519MLKEM768", "sig_alg": "SLH-DSA-SHA2-128f", diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260730T212145Z.json b/tools/benchmarks/pqc/results/rasberrypi5-20260730T212145Z.json new file mode 100644 index 0000000..8306b41 --- /dev/null +++ b/tools/benchmarks/pqc/results/rasberrypi5-20260730T212145Z.json @@ -0,0 +1,21260 @@ +{ + "schema_version": "2.0.0", + "tool_version": "0.2.0", + "generated_utc": "2026-07-30T21:49:57Z", + "is_baseline_grade": true, + "baseline_grade_reasons": [], + "host": { + "hostname": "rasberrypi5", + "os": "linux", + "os_pretty": "Debian GNU/Linux 13 (trixie)", + "arch": "aarch64", + "kernel": "6.18.34+rpt-rpi-2712", + "is_rpi": true, + "rpi_model": "Raspberry Pi 5 Model B Rev 1.1", + "cpu_brand": "Raspberry Pi 5 Model B Rev 1.1", + "ncpu": 4, + "ram_bytes": 8454029312 + }, + "cpu_features": { + "source": "/proc/cpuinfo (Features)", + "neon": true, + "sha2": true, + "sha3": false, + "sha512": false, + "aes": true, + "pmull": true + }, + "run": { + "timestamp_start_utc": "2026-07-30T21:21:45Z", + "timestamp_end_utc": "2026-07-30T21:49:57Z", + "duration_s": 1692, + "governor_requested": "performance", + "governor_before": "performance", + "governor_after": "performance", + "bench_core": 3, + "pinned": true, + "taskset_cmd": "taskset -c 3", + "calibration_mode": "auto", + "target_time_ms": 250, + "min_samples": 30, + "max_iters": 20000, + "warmup_iters": null, + "timed_iters": null, + "repetitions": 5, + "cycles_mode": "auto", + "cycles_available": false, + "cycles_reason": "PMCCNTR_EL0 traps (kernel module not loaded; needs e.g. enable_arm_pmu)" + }, + "toolchain": { + "cc_version": "cc (Debian 14.2.0-19) 14.2.0", + "bench_cflags": "-O3 -mcpu=cortex-a76", + "cflags_target": "cortex-a76", + "liboqs_ref": "0.15.0", + "liboqs_commit": "97f6b86b1b6d109cfd43cf276ae39c2e776aed80", + "liboqs_opt_defines": "OQS_COMPILE_BUILD_TARGET aarch64-Linux-6.18.34+rpt-rpi-2712;ARCH_ARM64v8 1;OQS_OPT_TARGET auto;OQS_USE_ARM_AES_INSTRUCTIONS 1;OQS_USE_ARM_SHA2_INSTRUCTIONS 1;OQS_USE_ARM_NEON_INSTRUCTIONS 1;OQS_ENABLE_KEM_kyber_512_aarch64 1;OQS_ENABLE_KEM_kyber_768_aarch64 1;OQS_ENABLE_KEM_kyber_1024_aarch64 1;OQS_ENABLE_KEM_ml_kem_512_aarch64 1;OQS_ENABLE_KEM_ml_kem_768_aarch64 1;OQS_ENABLE_KEM_ml_kem_1024_aarch64 1;OQS_ENABLE_SIG_falcon_512_aarch64 1;OQS_ENABLE_SIG_falcon_1024_aarch64 1;OQS_ENABLE_SIG_falcon_padded_512_aarch64 1;OQS_ENABLE_SIG_falcon_padded_1024_aarch64 1;", + "openssl": "system:3.5.6", + "oqsprovider_ref": "0.9.0", + "oqsprovider_commit": "848b4e6abaa89e769c4db46ca78f91000f67ca52", + "rust": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=cortex-a76", + "target_features_compiled": [ + "aes", + "crc", + "dotprod", + "dpb", + "fp16", + "lor", + "lse", + "neon", + "pan", + "pmuv3", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "vh" + ], + "cpu_features_runtime": { + "neon": true, + "aes": true, + "sha2": true, + "sha3": false + }, + "crate_versions": { + "ml-kem": "0.3.2", + "ml-dsa": "0.1.1", + "slh-dsa": "0.2.0-rc.5", + "x25519-dalek": "3.0.0", + "ed25519-dalek": "3.0.0" + }, + "signing_mode": "hedged (randomized), matching liboqs 0.15.0 for both ML-DSA and SLH-DSA", + "verify_semantics": "verify = decode public key from wire bytes + verify (matches OQS_SIG_verify, which re-expands from pk bytes per call, and the per-handshake TLS pattern); verify_cached_key = pre-parsed key object with expansion amortised (long-lived-peer/validator pattern); the difference is the pk parse/expansion cost", + "code_path_note": "arithmetic kernels of ml-kem/ml-dsa/slh-dsa are portable Rust with no hand-written assembly and no explicit SIMD intrinsics (compiler autovectorisation only, per RUSTFLAGS/target-cpu above) - unlike liboqs, which has dedicated aarch64 asm for ML-KEM (mlkem-native); hashing uses the RustCrypto sha2 0.11 / keccak 0.2 crates, BOTH of which dispatch to aarch64 hardware hash instructions via cpufeatures runtime detection (SHA-2 everywhere it exists; ARMv8.2 SHA3/Keccak where the CPU has it, e.g. Apple M-series but NOT Cortex-A76) - symmetric with liboqs' hardware-hashing behaviour on both targets" + }, + "rust_tls": { + "available": true, + "rustc_version": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "target": "aarch64-unknown-linux-gnu", + "profile": "release", + "opt_level": "3", + "codegen_units": 1, + "lto": false, + "rustflags": "-C target-cpu=cortex-a76", + "crate_versions": { + "rustls": "0.23.42", + "rustls-post-quantum": "0.2.4", + "aws-lc-rs": "1.17.3", + "aws-lc-sys": "0.43.0" + }, + "unstable_features": [ + "rustls-post-quantum/aws-lc-rs-unstable (ML-DSA signing + webpki verification)" + ], + "note": "rustls-vs-OpenSSL compares two protocol implementations AND two crypto backends (aws-lc-rs vs OpenSSL native) at once; the variables are not separable from these rows and this is not a language comparison. aws-lc-rs wraps the AWS-LC C library - this TLS group makes no pure-Rust/independence claim (unlike bench/rust)." + } + }, + "thermal_trace": { + "columns": [ + "epoch_s", + "arm_clock_hz", + "temp_c", + "throttled_hex" + ], + "samples": [ + [ + 1785446505, + 2400037120, + 54.3, + "0x0" + ], + [ + 1785446505, + 2400020480, + 54.3, + "0x0" + ], + [ + 1785446506, + 2400020480, + 54.3, + "0x0" + ], + [ + 1785446507, + 2400023808, + 54.9, + "0x0" + ], + [ + 1785446508, + 2400030464, + 54.9, + "0x0" + ], + [ + 1785446509, + 2400020480, + 55.4, + "0x0" + ], + [ + 1785446510, + 2400033792, + 56.0, + "0x0" + ], + [ + 1785446511, + 2400033792, + 55.4, + "0x0" + ], + [ + 1785446512, + 2400027136, + 56.0, + "0x0" + ], + [ + 1785446513, + 2400020480, + 56.0, + "0x0" + ], + [ + 1785446514, + 2400020480, + 56.0, + "0x0" + ], + [ + 1785446515, + 2400020480, + 56.0, + "0x0" + ], + [ + 1785446516, + 2400027136, + 56.0, + "0x0" + ], + [ + 1785446517, + 2400020480, + 56.0, + "0x0" + ], + [ + 1785446518, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785446519, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785446520, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785446521, + 2400030464, + 56.5, + "0x0" + ], + [ + 1785446522, + 2400027136, + 56.5, + "0x0" + ], + [ + 1785446523, + 2400027136, + 56.5, + "0x0" + ], + [ + 1785446524, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785446525, + 2400027136, + 55.4, + "0x0" + ], + [ + 1785446526, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785446527, + 2400033792, + 56.5, + "0x0" + ], + [ + 1785446528, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785446530, + 2400037120, + 57.1, + "0x0" + ], + [ + 1785446531, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785446532, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785446533, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785446534, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785446535, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785446536, + 2400020480, + 56.5, + "0x0" + ], + [ + 1785446537, + 2400017408, + 57.1, + "0x0" + ], + [ + 1785446538, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785446539, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785446540, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785446541, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785446542, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785446543, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785446544, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785446545, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785446546, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785446547, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785446548, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785446549, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785446550, + 2400030464, + 56.5, + "0x0" + ], + [ + 1785446551, + 2400030464, + 56.5, + "0x0" + ], + [ + 1785446552, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785446553, + 2400027136, + 56.0, + "0x0" + ], + [ + 1785446554, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785446555, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785446556, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785446557, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785446558, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785446559, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785446560, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785446561, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446562, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446563, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446564, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446565, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446566, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785446567, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446568, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785446569, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446570, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785446571, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446572, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446573, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446574, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446575, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446577, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446578, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446579, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446580, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446581, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785446582, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785446583, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446584, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785446585, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446586, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446587, + 2400037120, + 60.4, + "0x0" + ], + [ + 1785446588, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446589, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446590, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446591, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446592, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446593, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446594, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446595, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446596, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446597, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785446598, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446599, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785446600, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785446601, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446602, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446603, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785446604, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785446605, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446606, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446607, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446608, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446609, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785446610, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446611, + 2400017408, + 60.4, + "0x0" + ], + [ + 1785446612, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785446613, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446614, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785446615, + 2400017408, + 59.8, + "0x0" + ], + [ + 1785446616, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446617, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446618, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446619, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446620, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446622, + 2400037120, + 60.4, + "0x0" + ], + [ + 1785446623, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446624, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446625, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785446626, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446627, + 2400037120, + 60.4, + "0x0" + ], + [ + 1785446628, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785446629, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446630, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785446631, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785446632, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446633, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785446634, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446635, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446636, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446637, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446638, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446639, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785446640, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785446641, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785446642, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785446643, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785446644, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785446645, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785446646, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785446647, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785446648, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785446649, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446650, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785446651, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446652, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785446653, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785446654, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446655, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446656, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785446657, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785446658, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446659, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785446660, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785446661, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785446662, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446663, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785446664, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446665, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785446666, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785446667, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446669, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785446670, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446671, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785446672, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446673, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446674, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446675, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785446676, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785446677, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446678, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446679, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785446680, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785446681, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785446682, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446683, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446684, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785446685, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785446686, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785446687, + 2400020480, + 56.5, + "0x0" + ], + [ + 1785446688, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785446689, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785446690, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785446691, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785446692, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785446693, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785446694, + 2400017408, + 57.1, + "0x0" + ], + [ + 1785446695, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446696, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785446697, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446698, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446699, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446700, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446701, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446702, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446703, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446704, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446705, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446706, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446707, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785446708, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446709, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446710, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785446711, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446712, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446713, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446715, + 2400037120, + 61.5, + "0x0" + ], + [ + 1785446716, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785446717, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446718, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446719, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785446720, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446721, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446722, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446723, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446724, + 2400017408, + 61.5, + "0x0" + ], + [ + 1785446725, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446726, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785446727, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446728, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785446729, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446730, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446731, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785446732, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446733, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785446734, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785446735, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785446736, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446737, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446738, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446739, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446740, + 2400033792, + 60.9, + "0x0" + ], + [ + 1785446741, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446742, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446743, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785446744, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446745, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446746, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446747, + 2400037120, + 60.9, + "0x0" + ], + [ + 1785446748, + 2400017408, + 61.5, + "0x0" + ], + [ + 1785446749, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446750, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446751, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446752, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446753, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446754, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446755, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446756, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446757, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446758, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446759, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785446760, + 2400033792, + 61.5, + "0x0" + ], + [ + 1785446761, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446763, + 2400037120, + 60.9, + "0x0" + ], + [ + 1785446764, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446765, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446766, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446767, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785446768, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446769, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446770, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446771, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446772, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446773, + 2400017408, + 60.4, + "0x0" + ], + [ + 1785446774, + 2400017408, + 61.5, + "0x0" + ], + [ + 1785446775, + 2400017408, + 60.9, + "0x0" + ], + [ + 1785446776, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446777, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785446778, + 2400037120, + 62.0, + "0x0" + ], + [ + 1785446779, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785446780, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446781, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446782, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446783, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446784, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446785, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446786, + 2400037120, + 62.6, + "0x0" + ], + [ + 1785446787, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446788, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446789, + 2400033792, + 61.5, + "0x0" + ], + [ + 1785446790, + 2400033792, + 60.9, + "0x0" + ], + [ + 1785446791, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446792, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446793, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446794, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446795, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446796, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446797, + 2400037120, + 62.0, + "0x0" + ], + [ + 1785446798, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446799, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446800, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446801, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446802, + 2400033792, + 61.5, + "0x0" + ], + [ + 1785446803, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446804, + 2400033792, + 62.0, + "0x0" + ], + [ + 1785446805, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446806, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446807, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446808, + 2400017408, + 63.1, + "0x0" + ], + [ + 1785446810, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446811, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446812, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446813, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446814, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446815, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446816, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446817, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446818, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446819, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446820, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446821, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446822, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446823, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446824, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785446825, + 2400033792, + 61.5, + "0x0" + ], + [ + 1785446826, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785446827, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446828, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446829, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446830, + 2400017408, + 62.0, + "0x0" + ], + [ + 1785446831, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446832, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446833, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446834, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446835, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446836, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446837, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446838, + 2400033792, + 61.5, + "0x0" + ], + [ + 1785446839, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446840, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446841, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446842, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785446843, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785446844, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446845, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785446846, + 2400017408, + 62.0, + "0x0" + ], + [ + 1785446847, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446848, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446849, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785446850, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446851, + 2400033792, + 63.7, + "0x0" + ], + [ + 1785446852, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446853, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785446854, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446855, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785446856, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446858, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446859, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446860, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446861, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785446862, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446863, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446864, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785446865, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785446866, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785446867, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785446868, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446869, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446870, + 2400037120, + 63.1, + "0x0" + ], + [ + 1785446871, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446872, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785446873, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446874, + 2400017408, + 63.7, + "0x0" + ], + [ + 1785446875, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446876, + 2400037120, + 61.5, + "0x0" + ], + [ + 1785446877, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785446878, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446879, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785446880, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785446881, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785446882, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446883, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785446884, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446885, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785446886, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785446887, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785446888, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785446889, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785446890, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785446891, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785446892, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785446893, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785446894, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785446895, + 2400037120, + 60.9, + "0x0" + ], + [ + 1785446896, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785446897, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446898, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785446899, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785446900, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446901, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785446903, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785446904, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446905, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446906, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446907, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446908, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446909, + 2400017408, + 62.0, + "0x0" + ], + [ + 1785446910, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446911, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446912, + 2400037120, + 61.5, + "0x0" + ], + [ + 1785446913, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446914, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785446915, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446916, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446917, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446918, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446919, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446920, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785446921, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446922, + 2400033792, + 61.5, + "0x0" + ], + [ + 1785446923, + 2400033792, + 62.0, + "0x0" + ], + [ + 1785446924, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446925, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446926, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446927, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446928, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446929, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446930, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785446931, + 2400017408, + 62.0, + "0x0" + ], + [ + 1785446932, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446933, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446934, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446935, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446936, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446937, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446938, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446939, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446940, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785446941, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446942, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446943, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446944, + 2400037120, + 63.1, + "0x0" + ], + [ + 1785446945, + 2400037120, + 61.5, + "0x0" + ], + [ + 1785446946, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785446947, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446948, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446949, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785446950, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446952, + 2400037120, + 62.0, + "0x0" + ], + [ + 1785446953, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446954, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446955, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446956, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446957, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446958, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446959, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446960, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446961, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785446962, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446963, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446964, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446965, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446966, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446967, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446968, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446969, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446970, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446971, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446972, + 2400033792, + 63.7, + "0x0" + ], + [ + 1785446973, + 2400033792, + 63.1, + "0x0" + ], + [ + 1785446974, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446975, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446976, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446977, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785446978, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446979, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446980, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785446981, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446982, + 2400017408, + 63.1, + "0x0" + ], + [ + 1785446983, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785446984, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785446985, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446986, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446987, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785446988, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785446989, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785446990, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785446991, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785446992, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785446993, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446994, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785446995, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785446996, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785446997, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785446998, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785446999, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785447001, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785447002, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785447003, + 2400033792, + 63.1, + "0x0" + ], + [ + 1785447004, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785447005, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785447006, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785447007, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785447008, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447009, + 2400033792, + 63.7, + "0x0" + ], + [ + 1785447010, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447011, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785447012, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447013, + 2400017408, + 62.6, + "0x0" + ], + [ + 1785447014, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447015, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785447016, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785447017, + 2400017408, + 63.7, + "0x0" + ], + [ + 1785447018, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447019, + 2400037120, + 63.1, + "0x0" + ], + [ + 1785447020, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447021, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447022, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447023, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447024, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447025, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447026, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447027, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447028, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447029, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447030, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785447031, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785447032, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785447033, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447034, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447035, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447036, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785447037, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785447038, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785447039, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447040, + 2400037120, + 62.6, + "0x0" + ], + [ + 1785447041, + 2400033792, + 64.2, + "0x0" + ], + [ + 1785447042, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447043, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447044, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447045, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447046, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447047, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447049, + 2400033792, + 63.7, + "0x0" + ], + [ + 1785447050, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447051, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447052, + 2400017408, + 64.2, + "0x0" + ], + [ + 1785447053, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785447054, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447055, + 2400033792, + 64.8, + "0x0" + ], + [ + 1785447056, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785447057, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785447058, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785447059, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447060, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447061, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447062, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447063, + 2400033792, + 63.1, + "0x0" + ], + [ + 1785447064, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447065, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447066, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447067, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785447068, + 2400033792, + 63.1, + "0x0" + ], + [ + 1785447069, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447070, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447071, + 2400017408, + 59.8, + "0x0" + ], + [ + 1785447072, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447073, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447074, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785447075, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447076, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447077, + 2400033792, + 60.4, + "0x0" + ], + [ + 1785447078, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785447079, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785447080, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447081, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447082, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785447083, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447084, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447085, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447086, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447087, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447088, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447089, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785447090, + 2400027136, + 62.0, + "0x0" + ], + [ + 1785447091, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447092, + 2400017408, + 61.5, + "0x0" + ], + [ + 1785447093, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785447094, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785447095, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447096, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785447097, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447099, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447100, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785447101, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447102, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785447103, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447104, + 2400027136, + 62.6, + "0x0" + ], + [ + 1785447105, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447106, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447107, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447108, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447109, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447110, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447111, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447112, + 2400033792, + 62.6, + "0x0" + ], + [ + 1785447113, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447114, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447115, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447116, + 2400030464, + 62.0, + "0x0" + ], + [ + 1785447117, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447118, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447119, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447120, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447121, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447122, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447123, + 2400020480, + 62.0, + "0x0" + ], + [ + 1785447124, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447125, + 2400020480, + 65.3, + "0x0" + ], + [ + 1785447126, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447127, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785447128, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785447129, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447130, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447131, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447132, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447133, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447134, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447135, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447136, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447137, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447138, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447139, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447140, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447141, + 2400017408, + 64.8, + "0x0" + ], + [ + 1785447142, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447143, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447145, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447146, + 2400037120, + 63.7, + "0x0" + ], + [ + 1785447147, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447148, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447149, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447150, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447151, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785447152, + 2400027136, + 64.8, + "0x0" + ], + [ + 1785447153, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447154, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447155, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447156, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447157, + 2400030464, + 62.6, + "0x0" + ], + [ + 1785447158, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447159, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447160, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447161, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447162, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447163, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447164, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447165, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447166, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447167, + 2400033792, + 64.2, + "0x0" + ], + [ + 1785447168, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447169, + 2400037120, + 62.6, + "0x0" + ], + [ + 1785447170, + 2400033792, + 64.2, + "0x0" + ], + [ + 1785447171, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447172, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447173, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447174, + 2400020480, + 63.1, + "0x0" + ], + [ + 1785447175, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447176, + 2400017408, + 63.7, + "0x0" + ], + [ + 1785447177, + 2400020480, + 62.6, + "0x0" + ], + [ + 1785447178, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447179, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447180, + 2400017408, + 64.2, + "0x0" + ], + [ + 1785447181, + 2400023808, + 63.1, + "0x0" + ], + [ + 1785447182, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447183, + 2400027136, + 64.2, + "0x0" + ], + [ + 1785447184, + 2400033792, + 63.1, + "0x0" + ], + [ + 1785447185, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447187, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447188, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447189, + 2400017408, + 64.2, + "0x0" + ], + [ + 1785447190, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447191, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447192, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447193, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447194, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447195, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447196, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447197, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447198, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447199, + 2400027136, + 64.8, + "0x0" + ], + [ + 1785447200, + 2400023808, + 63.7, + "0x0" + ], + [ + 1785447201, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447202, + 2400017408, + 63.7, + "0x0" + ], + [ + 1785447203, + 2400017408, + 64.8, + "0x0" + ], + [ + 1785447204, + 2400033792, + 64.2, + "0x0" + ], + [ + 1785447205, + 2400037120, + 63.1, + "0x0" + ], + [ + 1785447206, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447207, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447208, + 2400023808, + 65.3, + "0x0" + ], + [ + 1785447209, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447210, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447211, + 2400027136, + 64.8, + "0x0" + ], + [ + 1785447212, + 2400033792, + 64.8, + "0x0" + ], + [ + 1785447213, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447214, + 2400020480, + 65.3, + "0x0" + ], + [ + 1785447215, + 2400020480, + 65.3, + "0x0" + ], + [ + 1785447216, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447217, + 2400030464, + 63.7, + "0x0" + ], + [ + 1785447218, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447219, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447220, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447221, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447222, + 2400027136, + 65.3, + "0x0" + ], + [ + 1785447223, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447224, + 2400027136, + 64.2, + "0x0" + ], + [ + 1785447225, + 2400033792, + 64.2, + "0x0" + ], + [ + 1785447226, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447228, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447229, + 2400017408, + 64.2, + "0x0" + ], + [ + 1785447230, + 2400037120, + 64.2, + "0x0" + ], + [ + 1785447231, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447232, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447233, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447234, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447235, + 2400027136, + 64.2, + "0x0" + ], + [ + 1785447236, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447237, + 2400033792, + 64.8, + "0x0" + ], + [ + 1785447238, + 2400027136, + 64.8, + "0x0" + ], + [ + 1785447239, + 2400027136, + 63.7, + "0x0" + ], + [ + 1785447240, + 2400017408, + 64.8, + "0x0" + ], + [ + 1785447241, + 2400027136, + 65.3, + "0x0" + ], + [ + 1785447242, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447243, + 2400033792, + 65.3, + "0x0" + ], + [ + 1785447244, + 2400023808, + 65.3, + "0x0" + ], + [ + 1785447245, + 2400033792, + 64.8, + "0x0" + ], + [ + 1785447246, + 2400027136, + 64.2, + "0x0" + ], + [ + 1785447247, + 2400027136, + 65.3, + "0x0" + ], + [ + 1785447248, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447249, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447250, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447251, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447252, + 2400020480, + 64.2, + "0x0" + ], + [ + 1785447253, + 2400027136, + 65.3, + "0x0" + ], + [ + 1785447254, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447255, + 2400020480, + 63.7, + "0x0" + ], + [ + 1785447256, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447257, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447258, + 2400030464, + 65.3, + "0x0" + ], + [ + 1785447259, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447260, + 2400023808, + 64.8, + "0x0" + ], + [ + 1785447261, + 2400027136, + 65.3, + "0x0" + ], + [ + 1785447262, + 2400023808, + 64.2, + "0x0" + ], + [ + 1785447263, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447264, + 2400030464, + 64.2, + "0x0" + ], + [ + 1785447265, + 2400020480, + 65.3, + "0x0" + ], + [ + 1785447266, + 2400023808, + 65.9, + "0x0" + ], + [ + 1785447267, + 2400020480, + 64.8, + "0x0" + ], + [ + 1785447268, + 2400017408, + 65.3, + "0x0" + ], + [ + 1785447270, + 2400020480, + 65.3, + "0x0" + ], + [ + 1785447271, + 2400027136, + 63.1, + "0x0" + ], + [ + 1785447272, + 2400030464, + 64.8, + "0x0" + ], + [ + 1785447273, + 2400030464, + 63.1, + "0x0" + ], + [ + 1785447274, + 2400023808, + 62.0, + "0x0" + ], + [ + 1785447275, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447276, + 2400017408, + 60.9, + "0x0" + ], + [ + 1785447277, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447278, + 2400017408, + 61.5, + "0x0" + ], + [ + 1785447279, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447280, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785447281, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447282, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447283, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447284, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447285, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447286, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447287, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785447288, + 2400033792, + 60.9, + "0x0" + ], + [ + 1785447289, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785447290, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447291, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785447292, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785447293, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447294, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447295, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447296, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447297, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447298, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447299, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447300, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447301, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447302, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447303, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447304, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785447305, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447306, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785447307, + 2400023808, + 62.6, + "0x0" + ], + [ + 1785447308, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447309, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447310, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785447311, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447312, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447313, + 2400030464, + 61.5, + "0x0" + ], + [ + 1785447314, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785447315, + 2400017408, + 61.5, + "0x0" + ], + [ + 1785447316, + 2400020480, + 61.5, + "0x0" + ], + [ + 1785447317, + 2400033792, + 60.9, + "0x0" + ], + [ + 1785447318, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447319, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785447320, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785447321, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447323, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447324, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447325, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447326, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785447327, + 2400033792, + 60.9, + "0x0" + ], + [ + 1785447328, + 2400017408, + 60.9, + "0x0" + ], + [ + 1785447329, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447330, + 2400023808, + 60.9, + "0x0" + ], + [ + 1785447331, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785447332, + 2400017408, + 60.4, + "0x0" + ], + [ + 1785447333, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785447334, + 2400023808, + 61.5, + "0x0" + ], + [ + 1785447335, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447336, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785447337, + 2400020480, + 60.9, + "0x0" + ], + [ + 1785447338, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785447339, + 2400027136, + 61.5, + "0x0" + ], + [ + 1785447340, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785447341, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447342, + 2400030464, + 60.9, + "0x0" + ], + [ + 1785447343, + 2400017408, + 60.4, + "0x0" + ], + [ + 1785447344, + 2400017408, + 59.8, + "0x0" + ], + [ + 1785447345, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785447346, + 2400027136, + 60.9, + "0x0" + ], + [ + 1785447347, + 2400017408, + 59.8, + "0x0" + ], + [ + 1785447348, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447349, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447350, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447351, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447352, + 2400017408, + 60.4, + "0x0" + ], + [ + 1785447353, + 2400030464, + 60.4, + "0x0" + ], + [ + 1785447354, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447355, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785447356, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447357, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447358, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785447359, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447360, + 2400017408, + 59.8, + "0x0" + ], + [ + 1785447361, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447362, + 2400020480, + 60.4, + "0x0" + ], + [ + 1785447363, + 2400017408, + 59.8, + "0x0" + ], + [ + 1785447364, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785447365, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447366, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447367, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447368, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785447369, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447371, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447372, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447373, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447374, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447375, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447376, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447377, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447378, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785447379, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447380, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447381, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447382, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785447383, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447384, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785447385, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447386, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447387, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447388, + 2400027136, + 60.4, + "0x0" + ], + [ + 1785447389, + 2400023808, + 60.4, + "0x0" + ], + [ + 1785447390, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447391, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447392, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447393, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447394, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447395, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447396, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447397, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447398, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447399, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447400, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447401, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447402, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447403, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785447404, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785447405, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447406, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447407, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447408, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447409, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785447410, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447411, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447412, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785447413, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447415, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447416, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447417, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447418, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447419, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447420, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447421, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447422, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447423, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447424, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447425, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447426, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447427, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447428, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447429, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447430, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447431, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447432, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447433, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447434, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447435, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447436, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447437, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447438, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447439, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447440, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447441, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447442, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447443, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447444, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447445, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447446, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447447, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447448, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447449, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447450, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447451, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447452, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447453, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447454, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447455, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447456, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447457, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447458, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447459, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447460, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447461, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447462, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447463, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447464, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447465, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447466, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447467, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447469, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447470, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447471, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447472, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447473, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447474, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447475, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447476, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447477, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447478, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447479, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447480, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447481, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447482, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447483, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447484, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447485, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447486, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447487, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447488, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447489, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447490, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447491, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447492, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447493, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447494, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447495, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447496, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447497, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447498, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447499, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447500, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447501, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447502, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447503, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447504, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447505, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447506, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447507, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447508, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447509, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447510, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447511, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447512, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447513, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447514, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447515, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447516, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447517, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447518, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447519, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447520, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447521, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447523, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447524, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447525, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447526, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447527, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447528, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447529, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447530, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447531, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447532, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447533, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447534, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447535, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447536, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447537, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447538, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447539, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447540, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447541, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447542, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447543, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447544, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447545, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447546, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447547, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447548, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447549, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447550, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447551, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447552, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447553, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447554, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447555, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447556, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447557, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447558, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447559, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447560, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447561, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447562, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447563, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785447564, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447565, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447566, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447567, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447568, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447569, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447570, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447572, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447573, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447574, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447575, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447576, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785447577, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447578, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447579, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447580, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447581, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447582, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447583, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447584, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447585, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447586, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447587, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447588, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447589, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447590, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447591, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447592, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447593, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447594, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447595, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447596, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447597, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447598, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447599, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785447600, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447601, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447602, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447603, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447604, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447605, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447606, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447607, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447608, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447609, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447610, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447611, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447612, + 2400027136, + 59.8, + "0x0" + ], + [ + 1785447613, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447614, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447615, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447616, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447617, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447618, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447619, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447620, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447621, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447622, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447623, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447624, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447626, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447627, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447628, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447629, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447630, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447631, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447632, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447633, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447634, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447635, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447636, + 2400023808, + 59.8, + "0x0" + ], + [ + 1785447637, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447638, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447639, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447640, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447641, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447642, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447643, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447644, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447645, + 2400030464, + 59.8, + "0x0" + ], + [ + 1785447646, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447647, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447648, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447649, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447650, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447651, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447652, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447653, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447654, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447655, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447656, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447657, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447658, + 2400033792, + 59.8, + "0x0" + ], + [ + 1785447659, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447660, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447661, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447662, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447663, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447664, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447665, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447666, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447667, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785447668, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785447669, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447670, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785447671, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447672, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447673, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447674, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447675, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447676, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447677, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447678, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447680, + 2400030464, + 59.3, + "0x0" + ], + [ + 1785447681, + 2400037120, + 59.3, + "0x0" + ], + [ + 1785447682, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447683, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447684, + 2400037120, + 59.8, + "0x0" + ], + [ + 1785447685, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447686, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447687, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447688, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447689, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447690, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447691, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447692, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785447693, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447694, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447695, + 2400017408, + 59.3, + "0x0" + ], + [ + 1785447696, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447697, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447698, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785447699, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447700, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447701, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447702, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447703, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447704, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447705, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785447706, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447707, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447708, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447709, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447710, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447711, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447712, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447713, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447714, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447715, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447716, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447717, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447718, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447719, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447720, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447721, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447722, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447723, + 2400027136, + 56.5, + "0x0" + ], + [ + 1785447724, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447725, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447726, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785447727, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447728, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447729, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447730, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447731, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447733, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447734, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447735, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447736, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447737, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447738, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447739, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447740, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447741, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447742, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447743, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447744, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447745, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447746, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447747, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447748, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447749, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447750, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447751, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785447752, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447753, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447754, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447755, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447756, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447757, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447758, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447759, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447760, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447761, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447762, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447763, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447764, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447765, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447766, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447767, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447768, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447769, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447770, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447771, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447772, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447773, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447774, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447775, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447776, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447777, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447778, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447779, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447780, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447781, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447782, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447783, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447784, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447785, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447787, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447788, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447789, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447790, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447791, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447792, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447793, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447794, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447795, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447796, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447797, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447798, + 2400023808, + 59.3, + "0x0" + ], + [ + 1785447799, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447800, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447801, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447802, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447803, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447804, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447805, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447806, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447807, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447808, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447809, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447810, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447811, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447812, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447813, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447814, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447815, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447816, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447817, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447818, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447819, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447820, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447821, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447822, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447823, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447824, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447825, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785447826, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447827, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447828, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447829, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447830, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447831, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785447832, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447833, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447834, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785447835, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447836, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447837, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447838, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447840, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785447841, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447842, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447843, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447844, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447845, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447846, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447847, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447848, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447849, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447850, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447851, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447852, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447853, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447854, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785447855, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447856, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447857, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447858, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447859, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447860, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447861, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785447862, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447863, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447864, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785447865, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447866, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447867, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447868, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447869, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447870, + 2400030464, + 56.5, + "0x0" + ], + [ + 1785447871, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447872, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447873, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447874, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447875, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785447876, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447877, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447878, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447879, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447880, + 2400033792, + 57.1, + "0x0" + ], + [ + 1785447881, + 2400017408, + 57.1, + "0x0" + ], + [ + 1785447882, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447883, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785447884, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447885, + 2400017408, + 57.1, + "0x0" + ], + [ + 1785447886, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447887, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447888, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447889, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785447890, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785447892, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785447893, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447894, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447895, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447896, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447897, + 2400033792, + 57.1, + "0x0" + ], + [ + 1785447898, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447899, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447900, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447901, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785447902, + 2400033792, + 57.1, + "0x0" + ], + [ + 1785447903, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447904, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447905, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447906, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447907, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447908, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447909, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447910, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447911, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447912, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447913, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447914, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447915, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447916, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447917, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447918, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447919, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447920, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447921, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447922, + 2400030464, + 56.5, + "0x0" + ], + [ + 1785447923, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447924, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447925, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447926, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447927, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447928, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447929, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447930, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447931, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447932, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447933, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447934, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447935, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447936, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447937, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447938, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785447939, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785447940, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785447941, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447942, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447943, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447945, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447946, + 2400020480, + 59.3, + "0x0" + ], + [ + 1785447947, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447948, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785447949, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447950, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785447951, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447952, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447953, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447954, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447955, + 2400030464, + 57.1, + "0x0" + ], + [ + 1785447956, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447957, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447958, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785447959, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785447960, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447961, + 2400020480, + 56.5, + "0x0" + ], + [ + 1785447962, + 2400037120, + 57.1, + "0x0" + ], + [ + 1785447963, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447964, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447965, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447966, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785447967, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447968, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447969, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447970, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447971, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785447972, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785447973, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447974, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785447975, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447976, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785447977, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447978, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447979, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447980, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447981, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785447982, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447983, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447984, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447985, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785447986, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785447987, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447988, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785447989, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785447990, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447991, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785447992, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785447993, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447994, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785447995, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785447997, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785447998, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785447999, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448000, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785448001, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448002, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448003, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785448004, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448005, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448006, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785448007, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785448008, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448009, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448010, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448011, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448012, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785448013, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448014, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785448015, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785448016, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785448017, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785448018, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785448019, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448020, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448021, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448022, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448023, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785448024, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785448025, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448026, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785448027, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448028, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785448029, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448030, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448031, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448032, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448033, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785448034, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448035, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448036, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448037, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448038, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448039, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448040, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785448041, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448042, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448043, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448045, + 2400037120, + 58.7, + "0x0" + ], + [ + 1785448046, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785448047, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448048, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448049, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785448050, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785448051, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448052, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448053, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448054, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448055, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448056, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448057, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785448058, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785448059, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448060, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785448061, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785448062, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785448063, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448064, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448065, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448066, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448067, + 2400033792, + 58.7, + "0x0" + ], + [ + 1785448068, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448069, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785448070, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785448071, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785448072, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785448073, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785448074, + 2400033792, + 57.1, + "0x0" + ], + [ + 1785448075, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785448076, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448077, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448078, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448079, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785448080, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785448081, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448082, + 2400023808, + 56.5, + "0x0" + ], + [ + 1785448083, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448084, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448085, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448086, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448087, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448088, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785448089, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785448090, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785448091, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448093, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448094, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448095, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448096, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448097, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448098, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448099, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448100, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448101, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448102, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448103, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785448104, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448105, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448106, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785448107, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448108, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448109, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448110, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448111, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448112, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448113, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785448114, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448115, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448116, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448117, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448118, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448119, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448120, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448121, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448122, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448123, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448124, + 2400037120, + 57.1, + "0x0" + ], + [ + 1785448125, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448126, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448127, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448128, + 2400023808, + 57.1, + "0x0" + ], + [ + 1785448129, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448130, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785448131, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448132, + 2400033792, + 57.6, + "0x0" + ], + [ + 1785448133, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785448134, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785448135, + 2400020480, + 57.1, + "0x0" + ], + [ + 1785448136, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448137, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448138, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448139, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448140, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448141, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448142, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448143, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448144, + 2400033792, + 58.2, + "0x0" + ], + [ + 1785448146, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785448147, + 2400027136, + 56.5, + "0x0" + ], + [ + 1785448148, + 2400017408, + 57.6, + "0x0" + ], + [ + 1785448149, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448150, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448151, + 2400033792, + 59.3, + "0x0" + ], + [ + 1785448152, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448153, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448154, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448155, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448156, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448157, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448158, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448159, + 2400017408, + 58.7, + "0x0" + ], + [ + 1785448160, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785448161, + 2400033792, + 57.1, + "0x0" + ], + [ + 1785448162, + 2400020480, + 59.8, + "0x0" + ], + [ + 1785448163, + 2400027136, + 57.6, + "0x0" + ], + [ + 1785448164, + 2400020480, + 57.6, + "0x0" + ], + [ + 1785448165, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448166, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448167, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448168, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785448169, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448170, + 2400023808, + 58.7, + "0x0" + ], + [ + 1785448171, + 2400027136, + 59.3, + "0x0" + ], + [ + 1785448172, + 2400023808, + 58.2, + "0x0" + ], + [ + 1785448173, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448174, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448175, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785448176, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785448177, + 2400027136, + 58.7, + "0x0" + ], + [ + 1785448178, + 2400017408, + 58.2, + "0x0" + ], + [ + 1785448179, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448180, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448181, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448182, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448183, + 2400037120, + 58.2, + "0x0" + ], + [ + 1785448184, + 2400037120, + 57.6, + "0x0" + ], + [ + 1785448185, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448186, + 2400030464, + 58.7, + "0x0" + ], + [ + 1785448187, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448188, + 2400030464, + 57.6, + "0x0" + ], + [ + 1785448189, + 2400030464, + 58.2, + "0x0" + ], + [ + 1785448190, + 2400023808, + 57.6, + "0x0" + ], + [ + 1785448191, + 2400020480, + 58.2, + "0x0" + ], + [ + 1785448192, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785448193, + 2400027136, + 58.2, + "0x0" + ], + [ + 1785448194, + 2400020480, + 58.7, + "0x0" + ], + [ + 1785448195, + 2400027136, + 57.1, + "0x0" + ], + [ + 1785448196, + 2400023808, + 57.6, + "0x0" + ] + ], + "temp_c": { + "min": 54.3, + "max": 65.9, + "mean": 59.95, + "samples": 1659 + }, + "arm_clock_hz": { + "min": 2400017408, + "max": 2400037120, + "mean": 2400025927.754, + "samples": 1659, + "spread_frac": 0.0 + }, + "throttling_detected": false + }, + "warnings": [], + "kem": [ + { + "alg": "X25519", + "kind": "kem", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 880, + "timed_iters": 4400, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56820.37, + "samples": 22000, + "median": 56686.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 56667.0, + "q3": 56741.0, + "min": 56574.0, + "max": 81556.0, + "mean": 56753.38, + "stddev": 466.38, + "ops_per_sec": 17641.04, + "per_rep_median": [ + 56704.0, + 56704.0, + 56685.0, + 56685.0, + 56667.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 302, + "timed_iters": 1509, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 165638.5, + "samples": 7545, + "median": 165464.0, + "mad": 129.0, + "iqr": 259.0, + "q1": 165334.0, + "q3": 165593.0, + "min": 164334.0, + "max": 240001.0, + "mean": 165557.94, + "stddev": 1186.6, + "ops_per_sec": 6043.61, + "per_rep_median": [ + 165482.0, + 165426.0, + 165500.0, + 165445.0, + 165500.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 222150.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2729, + "timed_iters": 13644, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 18322.41, + "samples": 68220, + "median": 18203.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 18185.0, + "q3": 18222.0, + "min": 18111.0, + "max": 47482.0, + "mean": 18274.73, + "stddev": 428.25, + "ops_per_sec": 54936.0, + "per_rep_median": [ + 18204.0, + 18185.0, + 18186.0, + 18204.0, + 18203.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 2436, + "timed_iters": 12180, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 20525.35, + "samples": 60900, + "median": 20537.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 20519.0, + "q3": 20556.0, + "min": 20463.0, + "max": 50907.0, + "mean": 20557.62, + "stddev": 310.86, + "ops_per_sec": 48692.6, + "per_rep_median": [ + 20537.0, + 20555.0, + 20537.0, + 20537.0, + 20537.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2088, + "timed_iters": 10440, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 23947.27, + "samples": 52200, + "median": 23963.0, + "mad": 18.0, + "iqr": 36.0, + "q1": 23945.0, + "q3": 23981.0, + "min": 23888.0, + "max": 49185.0, + "mean": 23978.26, + "stddev": 281.78, + "ops_per_sec": 41731.0, + "per_rep_median": [ + 23963.0, + 23963.0, + 23963.0, + 23963.0, + 23963.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 62703.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1661, + "timed_iters": 8307, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 30093.81, + "samples": 41535, + "median": 29889.0, + "mad": 19.0, + "iqr": 56.0, + "q1": 29870.0, + "q3": 29926.0, + "min": 29759.0, + "max": 56796.0, + "mean": 30052.56, + "stddev": 623.95, + "ops_per_sec": 33457.12, + "per_rep_median": [ + 29908.0, + 29889.0, + 29889.0, + 29889.0, + 29871.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1564, + "timed_iters": 7821, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 31963.28, + "samples": 39105, + "median": 31945.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 31926.0, + "q3": 31963.0, + "min": 31852.0, + "max": 50389.0, + "mean": 31974.74, + "stddev": 338.78, + "ops_per_sec": 31303.8, + "per_rep_median": [ + 31963.0, + 31945.0, + 31945.0, + 31944.0, + 31945.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1336, + "timed_iters": 6680, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 37424.6, + "samples": 33400, + "median": 37407.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 37389.0, + "q3": 37426.0, + "min": 37296.0, + "max": 61759.0, + "mean": 37436.4, + "stddev": 364.33, + "ops_per_sec": 26732.96, + "per_rep_median": [ + 37408.0, + 37407.0, + 37408.0, + 37407.0, + 37407.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 99241.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1126, + "timed_iters": 5631, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 44397.29, + "samples": 28155, + "median": 44093.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 44056.0, + "q3": 44130.0, + "min": 43926.0, + "max": 65130.0, + "mean": 44376.28, + "stddev": 804.96, + "ops_per_sec": 22679.34, + "per_rep_median": [ + 44093.0, + 44093.0, + 44093.0, + 44093.0, + 44093.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1049, + "timed_iters": 5245, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47664.06, + "samples": 26225, + "median": 47648.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 47630.0, + "q3": 47667.0, + "min": 47538.0, + "max": 78037.0, + "mean": 47702.97, + "stddev": 517.76, + "ops_per_sec": 20987.24, + "per_rep_median": [ + 47648.0, + 47648.0, + 47649.0, + 47648.0, + 47649.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 903, + "timed_iters": 4513, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 55398.58, + "samples": 22565, + "median": 55389.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 55370.0, + "q3": 55408.0, + "min": 55278.0, + "max": 73074.0, + "mean": 55427.28, + "stddev": 371.14, + "ops_per_sec": 18054.13, + "per_rep_median": [ + 55390.0, + 55389.0, + 55389.0, + 55389.0, + 55389.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 147130.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "mlkem-native aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "differential-build (+15-24% when redirected to OpenSSL EVP)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "X25519MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "SecP256r1MLKEM768", + "kind": "kem", + "implementation": "liboqs", + "enabled": false, + "reason": "not enabled in this liboqs build" + }, + { + "alg": "Classic-McEliece-348864", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 261120, + "secret_key": 6492, + "ciphertext": 96, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 326437587.0, + "samples": 150, + "median": 149256096.5, + "mad": 53263597.5, + "iqr": 106785202.75, + "q1": 78520393.0, + "q3": 185305595.75, + "min": 78417123.0, + "max": 574501006.0, + "mean": 159341693.33, + "stddev": 91023991.72, + "ops_per_sec": 6.7, + "per_rep_median": [ + 149300841.5, + 149279921.0, + 131695986.0, + 113924135.5, + 149318696.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 713, + "timed_iters": 3566, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 70106.04, + "samples": 17830, + "median": 66222.0, + "mad": 407.0, + "iqr": 5686.0, + "q1": 66018.0, + "q3": 71704.0, + "min": 65611.0, + "max": 121260.0, + "mean": 70537.34, + "stddev": 6678.29, + "ops_per_sec": 15100.72, + "per_rep_median": [ + 66185.0, + 66222.0, + 66204.0, + 66223.0, + 66278.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 25711870.33, + "samples": 150, + "median": 25693598.5, + "mad": 1860.0, + "iqr": 4135.0, + "q1": 25692193.75, + "q3": 25696328.75, + "min": 25688061.0, + "max": 25769838.0, + "mean": 25696975.84, + "stddev": 12003.54, + "ops_per_sec": 38.92, + "per_rep_median": [ + 25692885.0, + 25693496.0, + 25694421.0, + 25693763.0, + 25693633.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 175015917.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 679621572.0, + "samples": 150, + "median": 454405244.5, + "mad": 221990508.5, + "iqr": 334934777.5, + "q1": 342752751.5, + "q3": 677687529.0, + "min": 231209460.0, + "max": 2351694429.0, + "mean": 527466163.06, + "stddev": 324019483.42, + "ops_per_sec": 2.2, + "per_rep_median": [ + 454458835.0, + 399379042.0, + 454323499.0, + 454630080.0, + 454380829.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 363, + "timed_iters": 1814, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 137787.49, + "samples": 9070, + "median": 130537.0, + "mad": 11111.0, + "iqr": 25342.75, + "q1": 119556.0, + "q3": 144898.75, + "min": 118296.0, + "max": 351668.0, + "mean": 138485.83, + "stddev": 23762.29, + "ops_per_sec": 7660.66, + "per_rep_median": [ + 130389.0, + 130500.0, + 130629.0, + 130648.0, + 130278.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58777840.0, + "samples": 150, + "median": 58693634.5, + "mad": 172654.5, + "iqr": 335741.5, + "q1": 58519668.0, + "q3": 58855409.5, + "min": 58031429.0, + "max": 59422503.0, + "mean": 58707624.45, + "stddev": 279721.85, + "ops_per_sec": 17.04, + "per_rep_median": [ + 58544893.5, + 58755549.0, + 58814732.5, + 58612416.5, + 58657933.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 513229416.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-460896f", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 524160, + "secret_key": 13608, + "ciphertext": 156, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 229057720.0, + "samples": 150, + "median": 228616049.0, + "mad": 153596.5, + "iqr": 645349.25, + "q1": 228494780.0, + "q3": 229140129.25, + "min": 228384917.0, + "max": 231212670.0, + "mean": 228867105.95, + "stddev": 561125.19, + "ops_per_sec": 4.37, + "per_rep_median": [ + 228593803.0, + 228557851.5, + 228629534.0, + 228623555.0, + 228619673.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 362, + "timed_iters": 1812, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 137972.92, + "samples": 9060, + "median": 130538.0, + "mad": 11131.0, + "iqr": 31926.0, + "q1": 119574.0, + "q3": 151500.0, + "min": 118352.0, + "max": 328056.0, + "mean": 138491.44, + "stddev": 23870.73, + "ops_per_sec": 7660.6, + "per_rep_median": [ + 130408.0, + 130370.0, + 130648.0, + 130611.5, + 130574.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58427701.0, + "samples": 150, + "median": 58586733.5, + "mad": 51044.5, + "iqr": 136685.75, + "q1": 58496328.25, + "q3": 58633014.0, + "min": 58214604.0, + "max": 58815698.0, + "mean": 58553262.04, + "stddev": 123912.73, + "ops_per_sec": 17.07, + "per_rep_median": [ + 58588208.0, + 58585688.5, + 58593557.0, + 58596611.5, + 58563100.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 287333320.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6688128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1044992, + "secret_key": 13932, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1009709788.0, + "samples": 150, + "median": 1009935720.0, + "mad": 591230411.0, + "iqr": 1112896201.5, + "q1": 492697635.5, + "q3": 1605593837.0, + "min": 416374551.0, + "max": 3982410543.0, + "mean": 1143047428.98, + "stddev": 756708146.67, + "ops_per_sec": 0.99, + "per_rep_median": [ + 714580109.0, + 862847274.5, + 1012103242.5, + 1011929846.5, + 1012282103.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 205, + "timed_iters": 1025, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 243820.01, + "samples": 5125, + "median": 241666.0, + "mad": 33278.0, + "iqr": 67222.0, + "q1": 208389.0, + "q3": 275611.0, + "min": 207444.0, + "max": 701814.0, + "mean": 249253.1, + "stddev": 48296.68, + "ops_per_sec": 4137.94, + "per_rep_median": [ + 232388.0, + 228203.0, + 241870.0, + 241666.0, + 241703.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 111671831.0, + "samples": 150, + "median": 112728233.5, + "mad": 235568.5, + "iqr": 483855.5, + "q1": 112520287.25, + "q3": 113004142.75, + "min": 111326112.0, + "max": 114133728.0, + "mean": 112718451.31, + "stddev": 599794.42, + "ops_per_sec": 8.87, + "per_rep_median": [ + 112688566.5, + 112821738.5, + 112710911.0, + 112743361.5, + 112854791.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1122905619.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-6960119", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1047319, + "secret_key": 13948, + "ciphertext": 194, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 717108808.0, + "samples": 150, + "median": 719044324.5, + "mad": 300438982.0, + "iqr": 898452134.75, + "q1": 420459666.75, + "q3": 1318911801.5, + "min": 417982759.0, + "max": 4605843043.0, + "mean": 1095476536.53, + "stddev": 799430548.74, + "ops_per_sec": 1.39, + "per_rep_median": [ + 867966354.0, + 717860285.5, + 718139470.0, + 1017137314.0, + 718696749.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 137, + "timed_iters": 683, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 366177.65, + "samples": 3415, + "median": 356758.0, + "mad": 15093.0, + "iqr": 44241.0, + "q1": 341832.0, + "q3": 386073.0, + "min": 340647.0, + "max": 597682.0, + "mean": 368416.43, + "stddev": 32715.2, + "ops_per_sec": 2803.02, + "per_rep_median": [ + 356647.0, + 356739.0, + 356740.0, + 356832.0, + 356795.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 109826323.0, + "samples": 150, + "median": 109101054.5, + "mad": 109209.5, + "iqr": 535362.75, + "q1": 108661080.0, + "q3": 109196442.75, + "min": 107732085.0, + "max": 110421962.0, + "mean": 108981660.35, + "stddev": 614379.73, + "ops_per_sec": 9.17, + "per_rep_median": [ + 109181157.0, + 108521241.5, + 109153310.5, + 109090927.5, + 109119693.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 828502137.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Classic-McEliece-8192128", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1357824, + "secret_key": 14120, + "ciphertext": 208, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1116874410.0, + "samples": 150, + "median": 788668138.5, + "mad": 337255417.0, + "iqr": 1018145580.75, + "q1": 454735616.0, + "q3": 1472881196.75, + "min": 450887251.0, + "max": 6430291208.0, + "mean": 1187705155.08, + "stddev": 890179123.06, + "ops_per_sec": 1.27, + "per_rep_median": [ + 1114602212.0, + 803864942.0, + 1115922357.5, + 784437235.5, + 787754544.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 183, + "timed_iters": 914, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 273410.98, + "samples": 4570, + "median": 259443.0, + "mad": 16278.0, + "iqr": 48049.75, + "q1": 243300.25, + "q3": 291350.0, + "min": 242425.0, + "max": 525498.0, + "mean": 271588.68, + "stddev": 35432.62, + "ops_per_sec": 3854.41, + "per_rep_median": [ + 259498.5, + 259452.5, + 259276.0, + 259554.5, + 259424.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 136811138.0, + "samples": 150, + "median": 136480373.0, + "mad": 337815.0, + "iqr": 1241692.5, + "q1": 136200277.0, + "q3": 137441969.5, + "min": 136136054.0, + "max": 137751386.0, + "mean": 136797504.6, + "stddev": 615550.31, + "ops_per_sec": 7.33, + "per_rep_median": [ + 137467004.0, + 136220969.5, + 136235227.5, + 136200103.5, + 137416687.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 925407954.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "fips202 shim -> OQS SHA-3 layer", + "hw_instructions": false, + "determined_by": "source-inspection (differential flat on encaps/decaps; keygen medians too unstable \u2014 rejection sampling \u2014 to resolve)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-640-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 64, + "timed_iters": 318, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 787269.57, + "samples": 1590, + "median": 785737.0, + "mad": 185.0, + "iqr": 482.0, + "q1": 785607.0, + "q3": 786089.0, + "min": 784885.0, + "max": 3490760.0, + "mean": 788041.43, + "stddev": 67852.12, + "ops_per_sec": 1272.69, + "per_rep_median": [ + 785718.5, + 785755.0, + 785736.0, + 785755.0, + 785736.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 54, + "timed_iters": 270, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 926454.92, + "samples": 1350, + "median": 926152.5, + "mad": 527.0, + "iqr": 1055.75, + "q1": 925606.0, + "q3": 926661.75, + "min": 924106.0, + "max": 970124.0, + "mean": 926672.24, + "stddev": 3549.68, + "ops_per_sec": 1079.74, + "per_rep_median": [ + 926236.0, + 926079.0, + 926125.0, + 926115.5, + 926180.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 55, + "timed_iters": 277, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 903979.43, + "samples": 1385, + "median": 903921.0, + "mad": 426.0, + "iqr": 814.0, + "q1": 903403.0, + "q3": 904217.0, + "min": 901884.0, + "max": 985921.0, + "mean": 904351.09, + "stddev": 3897.4, + "ops_per_sec": 1106.29, + "per_rep_median": [ + 903995.0, + 903588.0, + 903995.0, + 903939.0, + 903921.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 2615810.5, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-976-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 30, + "timed_iters": 148, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1690769.0, + "samples": 740, + "median": 1685149.0, + "mad": 2158.0, + "iqr": 4060.25, + "q1": 1682972.75, + "q3": 1687033.0, + "min": 1682306.0, + "max": 1755417.0, + "mean": 1686650.14, + "stddev": 5847.38, + "ops_per_sec": 593.42, + "per_rep_median": [ + 1684260.0, + 1685408.0, + 1685259.5, + 1683667.0, + 1685464.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 26, + "timed_iters": 129, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1934015.61, + "samples": 645, + "median": 1933286.0, + "mad": 1129.0, + "iqr": 2240.0, + "q1": 1932157.0, + "q3": 1934397.0, + "min": 1930693.0, + "max": 1988860.0, + "mean": 1934031.3, + "stddev": 5211.22, + "ops_per_sec": 517.25, + "per_rep_median": [ + 1933620.0, + 1933361.0, + 1932879.0, + 1933323.0, + 1933120.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 27, + "timed_iters": 133, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1882477.06, + "samples": 665, + "median": 1881527.0, + "mad": 1203.0, + "iqr": 2370.0, + "q1": 1880324.0, + "q3": 1882694.0, + "min": 1878434.0, + "max": 1940249.0, + "mean": 1882320.06, + "stddev": 5498.25, + "ops_per_sec": 531.48, + "per_rep_median": [ + 1881360.0, + 1881546.0, + 1881842.0, + 1881638.0, + 1881435.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 5499962.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-1344-AES", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 16, + "timed_iters": 81, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3074902.4, + "samples": 405, + "median": 3071021.0, + "mad": 778.0, + "iqr": 1926.0, + "q1": 3070484.0, + "q3": 3072410.0, + "min": 3067021.0, + "max": 3169243.0, + "mean": 3072945.81, + "stddev": 10382.11, + "ops_per_sec": 325.62, + "per_rep_median": [ + 3071355.0, + 3070947.0, + 3070892.0, + 3071169.0, + 3070724.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 14, + "timed_iters": 72, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3474696.53, + "samples": 360, + "median": 3471584.0, + "mad": 907.5, + "iqr": 2537.25, + "q1": 3470940.5, + "q3": 3473477.75, + "min": 3465075.0, + "max": 3543814.0, + "mean": 3472707.51, + "stddev": 5659.49, + "ops_per_sec": 288.05, + "per_rep_median": [ + 3471695.0, + 3471852.0, + 3471657.5, + 3471444.5, + 3471482.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 73, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3409421.53, + "samples": 365, + "median": 3409871.0, + "mad": 1000.0, + "iqr": 2000.0, + "q1": 3408852.0, + "q3": 3410852.0, + "min": 3405834.0, + "max": 3545389.0, + "mean": 3412104.21, + "stddev": 14604.32, + "ops_per_sec": 293.27, + "per_rep_median": [ + 3409148.0, + 3409464.0, + 3409908.0, + 3410371.0, + 3410112.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 9952476.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "aes", + "source": "OQS AES layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (+8-13% with liboqs-internal AES)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "FrodoKEM-640-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 9616, + "secret_key": 19888, + "ciphertext": 9720, + "shared_secret": 16 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 17, + "timed_iters": 87, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2887579.8, + "samples": 435, + "median": 2886281.0, + "mad": 629.0, + "iqr": 1556.0, + "q1": 2885197.5, + "q3": 2886753.5, + "min": 2883226.0, + "max": 2964410.0, + "mean": 2886639.69, + "stddev": 4869.45, + "ops_per_sec": 346.47, + "per_rep_median": [ + 2886596.0, + 2886355.0, + 2886281.0, + 2886189.0, + 2885892.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3357971.27, + "samples": 370, + "median": 3356825.0, + "mad": 398.0, + "iqr": 792.25, + "q1": 3356449.75, + "q3": 3357242.0, + "min": 3354168.0, + "max": 3426519.0, + "mean": 3357612.55, + "stddev": 5817.96, + "ops_per_sec": 297.9, + "per_rep_median": [ + 3356815.5, + 3356880.0, + 3356853.0, + 3356898.5, + 3356760.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 75, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3333968.87, + "samples": 375, + "median": 3334223.0, + "mad": 463.0, + "iqr": 972.0, + "q1": 3333677.0, + "q3": 3334649.0, + "min": 3331557.0, + "max": 3404185.0, + "mean": 3334970.88, + "stddev": 5721.37, + "ops_per_sec": 299.92, + "per_rep_median": [ + 3334020.0, + 3334149.0, + 3334131.0, + 3334483.0, + 3334297.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 9577329.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-976-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 15632, + "secret_key": 31296, + "ciphertext": 15744, + "shared_secret": 24 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 39, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6479693.29, + "samples": 195, + "median": 6449929.0, + "mad": 1092.0, + "iqr": 2204.0, + "q1": 6448781.0, + "q3": 6450985.0, + "min": 6445948.0, + "max": 6511299.0, + "mean": 6451137.64, + "stddev": 6662.49, + "ops_per_sec": 155.04, + "per_rep_median": [ + 6449965.0, + 6449540.0, + 6449799.0, + 6450169.0, + 6449873.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 34, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7437471.14, + "samples": 170, + "median": 7437933.0, + "mad": 1009.0, + "iqr": 1944.75, + "q1": 7437205.75, + "q3": 7439150.5, + "min": 7434443.0, + "max": 7518775.0, + "mean": 7440945.64, + "stddev": 12543.89, + "ops_per_sec": 134.45, + "per_rep_median": [ + 7437479.5, + 7438572.5, + 7437627.5, + 7437923.5, + 7438766.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 7, + "timed_iters": 34, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 7375995.43, + "samples": 170, + "median": 7374100.0, + "mad": 953.5, + "iqr": 2190.0, + "q1": 7373335.75, + "q3": 7375525.75, + "min": 7370961.0, + "max": 7449294.0, + "mean": 7376118.02, + "stddev": 9495.8, + "ops_per_sec": 135.61, + "per_rep_median": [ + 7375035.0, + 7374016.5, + 7373701.5, + 7373942.5, + 7374414.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 21261962.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "FrodoKEM-1344-SHAKE", + "kind": "kem", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 21520, + "secret_key": 43088, + "ciphertext": 21632, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11781549.0, + "samples": 150, + "median": 11752141.5, + "mad": 1379.5, + "iqr": 2763.5, + "q1": 11750794.5, + "q3": 11753558.0, + "min": 11741271.0, + "max": 11833363.0, + "mean": 11755379.87, + "stddev": 15624.6, + "ops_per_sec": 85.09, + "per_rep_median": [ + 11753104.5, + 11752474.5, + 11752928.5, + 11746215.5, + 11751502.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13548119.67, + "samples": 150, + "median": 13546807.5, + "mad": 2101.0, + "iqr": 4754.5, + "q1": 13544928.0, + "q3": 13549682.5, + "min": 13540928.0, + "max": 13681094.0, + "mean": 13551394.15, + "stddev": 18955.24, + "ops_per_sec": 73.82, + "per_rep_median": [ + 13546798.5, + 13548705.5, + 13545946.5, + 13547437.0, + 13545122.5 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 13479113.33, + "samples": 150, + "median": 13477521.0, + "mad": 1435.0, + "iqr": 2940.5, + "q1": 13476150.25, + "q3": 13479090.75, + "min": 13473817.0, + "max": 13594316.0, + "mean": 13481772.51, + "stddev": 17813.34, + "ops_per_sec": 74.2, + "per_rep_median": [ + 13477391.5, + 13477205.5, + 13477965.5, + 13477567.0, + 13476881.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 38776470.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 920, + "timed_iters": 4601, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54330.44, + "samples": 23005, + "median": 54167.0, + "mad": 75.0, + "iqr": 536.0, + "q1": 54111.0, + "q3": 54647.0, + "min": 53870.0, + "max": 86295.0, + "mean": 54343.85, + "stddev": 471.17, + "ops_per_sec": 18461.42, + "per_rep_median": [ + 54166.0, + 54184.0, + 54167.0, + 54167.0, + 54185.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 272, + "timed_iters": 1359, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 183975.55, + "samples": 6795, + "median": 184147.0, + "mad": 56.0, + "iqr": 222.0, + "q1": 183962.0, + "q3": 184184.0, + "min": 183813.0, + "max": 213906.0, + "mean": 184211.12, + "stddev": 989.98, + "ops_per_sec": 5430.44, + "per_rep_median": [ + 184165.0, + 183962.0, + 184147.0, + 184092.0, + 184184.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 238314.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-512", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 800, + "secret_key": 1632, + "ciphertext": 768, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1210, + "timed_iters": 6052, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 41306.09, + "samples": 30260, + "median": 41296.0, + "mad": 482.0, + "iqr": 852.0, + "q1": 40759.0, + "q3": 41611.0, + "min": 39722.0, + "max": 64074.0, + "mean": 41271.16, + "stddev": 744.43, + "ops_per_sec": 24215.42, + "per_rep_median": [ + 41296.0, + 41296.0, + 41333.0, + 41296.0, + 41278.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1148, + "timed_iters": 5742, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43538.25, + "samples": 28710, + "median": 43371.0, + "mad": 94.0, + "iqr": 537.0, + "q1": 43314.0, + "q3": 43851.0, + "min": 43129.0, + "max": 68055.0, + "mean": 43559.72, + "stddev": 555.62, + "ops_per_sec": 23056.88, + "per_rep_median": [ + 43388.0, + 43388.0, + 43388.0, + 43370.0, + 43370.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 883, + "timed_iters": 4413, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56650.45, + "samples": 22065, + "median": 56648.0, + "mad": 55.0, + "iqr": 92.0, + "q1": 56611.0, + "q3": 56703.0, + "min": 56407.0, + "max": 83055.0, + "mean": 56692.14, + "stddev": 436.35, + "ops_per_sec": 17652.87, + "per_rep_median": [ + 56648.0, + 56648.0, + 56648.0, + 56666.0, + 56666.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 141315.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "secret_key": 2400, + "ciphertext": 1088, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 687, + "timed_iters": 3435, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 72780.81, + "samples": 17175, + "median": 72666.0, + "mad": 667.0, + "iqr": 1351.0, + "q1": 72000.0, + "q3": 73351.0, + "min": 70166.0, + "max": 94666.0, + "mean": 72732.02, + "stddev": 1095.75, + "ops_per_sec": 13761.59, + "per_rep_median": [ + 72574.0, + 72666.0, + 72703.0, + 72685.0, + 72648.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 652, + "timed_iters": 3259, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 76715.3, + "samples": 16295, + "median": 76629.0, + "mad": 185.0, + "iqr": 537.0, + "q1": 76500.0, + "q3": 77037.0, + "min": 76167.0, + "max": 104351.0, + "mean": 76794.88, + "stddev": 635.71, + "ops_per_sec": 13049.89, + "per_rep_median": [ + 76555.0, + 76555.0, + 76592.0, + 76666.0, + 76703.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 527, + "timed_iters": 2636, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 94825.68, + "samples": 13180, + "median": 94740.0, + "mad": 74.0, + "iqr": 166.0, + "q1": 94666.0, + "q3": 94832.0, + "min": 94333.0, + "max": 116147.0, + "mean": 94834.59, + "stddev": 701.68, + "ops_per_sec": 10555.2, + "per_rep_median": [ + 94758.0, + 94722.0, + 94740.0, + 94740.0, + 94740.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 244035.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "secret_key": 3168, + "ciphertext": 1568, + "shared_secret": 32 + }, + "sk_seed_bytes": 64, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 432, + "timed_iters": 2158, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 115829.99, + "samples": 10790, + "median": 115703.0, + "mad": 870.0, + "iqr": 1722.0, + "q1": 114870.0, + "q3": 116592.0, + "min": 111962.0, + "max": 157554.0, + "mean": 115789.1, + "stddev": 1471.18, + "ops_per_sec": 8642.82, + "per_rep_median": [ + 115759.0, + 115721.0, + 115703.0, + 115721.0, + 115619.5 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 416, + "timed_iters": 2079, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 120240.02, + "samples": 10395, + "median": 119888.0, + "mad": 241.0, + "iqr": 537.0, + "q1": 119703.0, + "q3": 120240.0, + "min": 119314.0, + "max": 159721.0, + "mean": 120053.6, + "stddev": 926.65, + "ops_per_sec": 8341.12, + "per_rep_median": [ + 119999.0, + 119870.0, + 119814.0, + 119870.0, + 119833.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 350, + "timed_iters": 1748, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 143045.83, + "samples": 8740, + "median": 142870.0, + "mad": 129.0, + "iqr": 259.0, + "q1": 142758.0, + "q3": 143017.0, + "min": 142314.0, + "max": 175591.0, + "mean": 142998.99, + "stddev": 872.04, + "ops_per_sec": 6999.37, + "per_rep_median": [ + 142943.0, + 142906.0, + 142870.0, + 142813.0, + 142833.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 378461.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "X25519", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2371, + "timed_iters": 11855, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21087.28, + "samples": 59275, + "median": 21111.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 21092.0, + "q3": 21111.0, + "min": 21018.0, + "max": 53963.0, + "mean": 21122.73, + "stddev": 299.52, + "ops_per_sec": 47368.67, + "per_rep_median": [ + 21093.0, + 21111.0, + 21111.0, + 21111.0, + 21111.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 1067, + "timed_iters": 5335, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 46860.03, + "samples": 26675, + "median": 46851.0, + "mad": 1.0, + "iqr": 19.0, + "q1": 46833.0, + "q3": 46852.0, + "min": 46814.0, + "max": 83259.0, + "mean": 46877.99, + "stddev": 430.52, + "ops_per_sec": 21344.26, + "per_rep_median": [ + 46851.0, + 46851.0, + 46851.0, + 46851.0, + 46851.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 67962.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "secp256r1", + "kind": "kem", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 65, + "ciphertext": null, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1858, + "timed_iters": 9289, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 26912.98, + "samples": 46445, + "median": 26908.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 26907.0, + "q3": 26926.0, + "min": 26815.0, + "max": 68944.0, + "mean": 26945.13, + "stddev": 434.44, + "ops_per_sec": 37163.67, + "per_rep_median": [ + 26925.0, + 26908.0, + 26908.0, + 26908.0, + 26907.0 + ] + }, + "derive": { + "unit": "ns", + "warmup_iters": 470, + "timed_iters": 2352, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 106298.98, + "samples": 11760, + "median": 106258.0, + "mad": 55.0, + "iqr": 93.0, + "q1": 106203.0, + "q3": 106296.0, + "min": 105388.0, + "max": 143999.0, + "mean": 106321.49, + "stddev": 652.6, + "ops_per_sec": 9411.06, + "per_rep_median": [ + 106258.0, + 106258.0, + 106240.0, + 106240.0, + 106258.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 133166.0, + "operations": [ + "keygen", + "derive" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-768", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1184, + "ciphertext": 1088, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1747, + "timed_iters": 8736, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 28615.61, + "samples": 43680, + "median": 28463.0, + "mad": 19.0, + "iqr": 55.0, + "q1": 28444.0, + "q3": 28499.0, + "min": 28352.0, + "max": 46185.0, + "mean": 28615.15, + "stddev": 570.21, + "ops_per_sec": 35133.33, + "per_rep_median": [ + 28463.0, + 28463.0, + 28463.0, + 28463.0, + 28463.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1483, + "timed_iters": 7417, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 33704.43, + "samples": 37085, + "median": 33722.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 33703.0, + "q3": 33722.0, + "min": 33648.0, + "max": 52778.0, + "mean": 33745.39, + "stddev": 375.34, + "ops_per_sec": 29654.23, + "per_rep_median": [ + 33704.0, + 33722.0, + 33722.0, + 33722.0, + 33704.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 1283, + "timed_iters": 6413, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 38982.96, + "samples": 32065, + "median": 38981.0, + "mad": 18.0, + "iqr": 36.0, + "q1": 38963.0, + "q3": 38999.0, + "min": 38907.0, + "max": 56536.0, + "mean": 39003.56, + "stddev": 317.22, + "ops_per_sec": 25653.52, + "per_rep_median": [ + 38981.0, + 38981.0, + 38981.0, + 38981.0, + 38981.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 101166.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-KEM-1024", + "kind": "kem", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1568, + "ciphertext": 1568, + "shared_secret": 32 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1157, + "timed_iters": 5786, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 43210.2, + "samples": 28930, + "median": 43018.0, + "mad": 37.0, + "iqr": 57.0, + "q1": 42999.0, + "q3": 43056.0, + "min": 42870.0, + "max": 62148.0, + "mean": 43309.52, + "stddev": 803.05, + "ops_per_sec": 23246.08, + "per_rep_median": [ + 42999.0, + 43019.0, + 43036.0, + 43036.0, + 43036.0 + ] + }, + "encaps": { + "unit": "ns", + "warmup_iters": 1049, + "timed_iters": 5245, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 47662.29, + "samples": 26225, + "median": 47648.0, + "mad": 18.0, + "iqr": 20.0, + "q1": 47647.0, + "q3": 47667.0, + "min": 47574.0, + "max": 137795.0, + "mean": 47699.5, + "stddev": 715.55, + "ops_per_sec": 20987.24, + "per_rep_median": [ + 47648.0, + 47666.0, + 47648.0, + 47666.0, + 47666.0 + ] + }, + "decaps": { + "unit": "ns", + "warmup_iters": 909, + "timed_iters": 4546, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54996.93, + "samples": 22730, + "median": 54851.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 54833.0, + "q3": 54870.0, + "min": 54777.0, + "max": 72592.0, + "mean": 54891.95, + "stddev": 438.45, + "ops_per_sec": 18231.21, + "per_rep_median": [ + 54851.0, + 54851.0, + 54851.0, + 54851.0, + 54851.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 145517.0, + "operations": [ + "keygen", + "encaps", + "decaps" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "sig": [ + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "openssl", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 860, + "timed_iters": 4300, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 58140.43, + "samples": 21500, + "median": 58036.0, + "mad": 20.0, + "iqr": 56.0, + "q1": 58000.0, + "q3": 58056.0, + "min": 57925.0, + "max": 80018.0, + "mean": 58103.96, + "stddev": 618.76, + "ops_per_sec": 17230.68, + "per_rep_median": [ + 58037.0, + 58037.0, + 58036.0, + 58018.0, + 58036.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 868, + "timed_iters": 4340, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 57600.67, + "samples": 21700, + "median": 57611.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 57592.0, + "q3": 57630.0, + "min": 57536.0, + "max": 99944.0, + "mean": 57681.97, + "stddev": 624.96, + "ops_per_sec": 17357.8, + "per_rep_median": [ + 57629.0, + 57611.0, + 57629.0, + 57611.0, + 57611.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 344, + "timed_iters": 1722, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 145180.56, + "samples": 8610, + "median": 144796.0, + "mad": 73.0, + "iqr": 167.0, + "q1": 144740.0, + "q3": 144907.0, + "min": 144554.0, + "max": 174129.0, + "mean": 144944.65, + "stddev": 857.77, + "ops_per_sec": 6906.27, + "per_rep_median": [ + 144962.0, + 144833.0, + 144814.0, + 144758.0, + 144740.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 260443.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "openssl-internal", + "detail": "OpenSSL's own curve25519 code (assembly on major targets)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 463, + "timed_iters": 2314, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 108032.29, + "samples": 11570, + "median": 107425.0, + "mad": 611.0, + "iqr": 1241.0, + "q1": 106833.0, + "q3": 108074.0, + "min": 104555.0, + "max": 158666.0, + "mean": 107543.14, + "stddev": 1282.73, + "ops_per_sec": 9308.82, + "per_rep_median": [ + 107462.0, + 107499.0, + 107055.0, + 108000.0, + 107240.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 100, + "timed_iters": 501, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 498901.21, + "samples": 2505, + "median": 397739.0, + "mad": 180092.0, + "iqr": 343961.0, + "q1": 296869.0, + "q3": 640830.0, + "min": 215610.0, + "max": 2922947.0, + "mean": 511228.5, + "stddev": 354414.17, + "ops_per_sec": 2514.21, + "per_rep_median": [ + 401461.0, + 398405.0, + 379942.0, + 378794.0, + 379665.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 415, + "timed_iters": 2075, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 120471.47, + "samples": 10375, + "median": 119314.0, + "mad": 111.0, + "iqr": 241.0, + "q1": 119221.0, + "q3": 119462.0, + "min": 118851.0, + "max": 149907.0, + "mean": 119543.35, + "stddev": 874.6, + "ops_per_sec": 8381.25, + "per_rep_median": [ + 120258.0, + 119352.0, + 119333.0, + 119259.0, + 119240.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 624478.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 260, + "timed_iters": 1300, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 192297.73, + "samples": 6500, + "median": 191221.0, + "mad": 592.0, + "iqr": 1778.0, + "q1": 190777.0, + "q3": 192555.0, + "min": 189314.0, + "max": 220610.0, + "mean": 191642.09, + "stddev": 1421.62, + "ops_per_sec": 5229.55, + "per_rep_median": [ + 191184.0, + 192055.0, + 191045.0, + 191813.0, + 190981.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 60, + "timed_iters": 298, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 838041.33, + "samples": 1490, + "median": 674172.5, + "mad": 276766.0, + "iqr": 628973.75, + "q1": 429900.0, + "q3": 1058873.75, + "min": 320350.0, + "max": 4681957.0, + "mean": 831758.93, + "stddev": 584745.25, + "ops_per_sec": 1483.3, + "per_rep_median": [ + 595830.0, + 677709.0, + 595561.0, + 675181.5, + 704682.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 264, + "timed_iters": 1322, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 189093.97, + "samples": 6610, + "median": 189462.0, + "mad": 481.0, + "iqr": 1833.0, + "q1": 189073.0, + "q3": 190906.0, + "min": 188517.0, + "max": 212962.0, + "mean": 189873.49, + "stddev": 1148.95, + "ops_per_sec": 5278.1, + "per_rep_median": [ + 189332.0, + 188981.0, + 189480.0, + 189832.0, + 190999.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1054855.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 173, + "timed_iters": 863, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 289842.42, + "samples": 4315, + "median": 288387.0, + "mad": 1148.0, + "iqr": 2574.0, + "q1": 287443.0, + "q3": 290017.0, + "min": 284610.0, + "max": 323091.0, + "mean": 288928.35, + "stddev": 2321.66, + "ops_per_sec": 3467.56, + "per_rep_median": [ + 288758.0, + 288350.0, + 288258.0, + 287924.0, + 288665.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 48, + "timed_iters": 241, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1035431.65, + "samples": 1205, + "median": 833810.0, + "mad": 344905.0, + "iqr": 771125.0, + "q1": 490090.0, + "q3": 1261215.0, + "min": 484831.0, + "max": 4667919.0, + "mean": 1006326.24, + "stddev": 609010.78, + "ops_per_sec": 1199.31, + "per_rep_median": [ + 833181.0, + 684940.0, + 834644.0, + 833754.0, + 836496.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 161, + "timed_iters": 807, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 309607.69, + "samples": 4035, + "median": 305295.0, + "mad": 315.0, + "iqr": 944.0, + "q1": 305054.0, + "q3": 305998.0, + "min": 304535.0, + "max": 352776.0, + "mean": 305986.99, + "stddev": 1940.34, + "ops_per_sec": 3275.52, + "per_rep_median": [ + 305851.0, + 305239.0, + 305017.0, + 306091.0, + 305128.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1427492.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential inconclusive at <=2%)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-512", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 897, + "secret_key": 1281, + "signature": 752 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 4, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 11804849.67, + "samples": 150, + "median": 9034543.5, + "mad": 1259437.0, + "iqr": 2822720.75, + "q1": 8033373.0, + "q3": 10856093.75, + "min": 7266090.0, + "max": 22314916.0, + "mean": 9840125.07, + "stddev": 2643285.5, + "ops_per_sec": 110.69, + "per_rep_median": [ + 8556815.0, + 8544444.5, + 9329144.0, + 9056238.0, + 9817289.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 171, + "timed_iters": 854, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 292616.08, + "samples": 4270, + "median": 290017.0, + "mad": 2203.0, + "iqr": 4129.0, + "q1": 288536.0, + "q3": 292665.0, + "min": 278128.0, + "max": 337258.0, + "mean": 290376.98, + "stddev": 3600.25, + "ops_per_sec": 3448.07, + "per_rep_median": [ + 290091.0, + 289906.0, + 290045.0, + 290128.0, + 290007.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 981, + "timed_iters": 4907, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 50944.4, + "samples": 24535, + "median": 50796.0, + "mad": 55.0, + "iqr": 93.0, + "q1": 50740.0, + "q3": 50833.0, + "min": 50536.0, + "max": 70018.0, + "mean": 50824.83, + "stddev": 393.95, + "ops_per_sec": 19686.59, + "per_rep_median": [ + 50852.0, + 50815.0, + 50796.0, + 50741.0, + 50722.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 9375356.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Falcon-1024", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 1793, + "secret_key": 2305, + "signature": 1462 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 24583767.67, + "samples": 150, + "median": 26750530.0, + "mad": 2177951.5, + "iqr": 4428239.25, + "q1": 24747133.75, + "q3": 29175373.0, + "min": 22852024.0, + "max": 66241806.0, + "mean": 28401906.77, + "stddev": 6346877.55, + "ops_per_sec": 37.38, + "per_rep_median": [ + 26293801.0, + 27417999.0, + 26749206.0, + 26442735.5, + 26670549.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 86, + "timed_iters": 428, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 583439.52, + "samples": 2140, + "median": 583478.0, + "mad": 3083.0, + "iqr": 6041.5, + "q1": 580307.5, + "q3": 586349.0, + "min": 568941.0, + "max": 647737.0, + "mean": 583552.73, + "stddev": 5558.85, + "ops_per_sec": 1713.86, + "per_rep_median": [ + 583265.5, + 583571.0, + 583497.0, + 582960.5, + 584006.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 498, + "timed_iters": 2490, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 100415.7, + "samples": 12450, + "median": 99741.0, + "mad": 129.0, + "iqr": 279.0, + "q1": 99647.0, + "q3": 99926.0, + "min": 99278.0, + "max": 118185.0, + "mean": 99878.92, + "stddev": 562.25, + "ops_per_sec": 10025.97, + "per_rep_median": [ + 100259.0, + 99851.0, + 99592.0, + 99666.0, + 99722.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 27433749.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aarch64-asm", + "detail": "falcon aarch64 backend" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "OQS SHA-3 layer (liboqs-internal xkcp)", + "hw_instructions": false, + "determined_by": "source-inspection (fips202 shim; differential <=2% \u2014 minor SHAKE share)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 36, + "timed_iters": 182, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1370393.35, + "samples": 910, + "median": 1369122.0, + "mad": 759.0, + "iqr": 1625.25, + "q1": 1368460.5, + "q3": 1370085.75, + "min": 1366678.0, + "max": 1436751.0, + "mean": 1369581.72, + "stddev": 3534.21, + "ops_per_sec": 730.4, + "per_rep_median": [ + 1368927.5, + 1369706.0, + 1368946.5, + 1368882.0, + 1368307.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 32103009.0, + "samples": 150, + "median": 32078555.0, + "mad": 13481.5, + "iqr": 25934.25, + "q1": 32066454.0, + "q3": 32092388.25, + "min": 32028565.0, + "max": 32168250.0, + "mean": 32078217.24, + "stddev": 26634.09, + "ops_per_sec": 31.17, + "per_rep_median": [ + 32075287.0, + 32084972.5, + 32080981.0, + 32076046.0, + 32075296.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 25, + "timed_iters": 124, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2010853.07, + "samples": 620, + "median": 2009637.5, + "mad": 907.0, + "iqr": 1837.5, + "q1": 2009021.5, + "q3": 2010859.0, + "min": 2006100.0, + "max": 2087377.0, + "mean": 2010056.29, + "stddev": 3757.43, + "ops_per_sec": 497.6, + "per_rep_median": [ + 2010238.5, + 2009961.5, + 2010238.5, + 2007952.5, + 2010026.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 35457314.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 87863867.0, + "samples": 150, + "median": 87867614.5, + "mad": 37620.0, + "iqr": 78367.75, + "q1": 87825924.25, + "q3": 87904292.0, + "min": 87778218.0, + "max": 87976104.0, + "mean": 87866673.02, + "stddev": 46291.99, + "ops_per_sec": 11.38, + "per_rep_median": [ + 87871774.5, + 87868551.0, + 87902985.0, + 87865882.5, + 87831326.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 667655133.0, + "samples": 150, + "median": 667767689.5, + "mad": 208885.0, + "iqr": 436376.75, + "q1": 667594086.25, + "q3": 668030463.0, + "min": 667079819.0, + "max": 670724605.0, + "mean": 667818260.5, + "stddev": 432529.6, + "ops_per_sec": 1.5, + "per_rep_median": [ + 667764216.0, + 667848432.5, + 667700575.5, + 667731908.5, + 667842763.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 77, + "timed_iters": 386, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 648102.86, + "samples": 1930, + "median": 647422.0, + "mad": 259.0, + "iqr": 555.75, + "q1": 647200.0, + "q3": 647755.75, + "min": 646496.0, + "max": 716644.0, + "mean": 647773.68, + "stddev": 2189.84, + "ops_per_sec": 1544.59, + "per_rep_median": [ + 647385.0, + 647607.0, + 647663.0, + 647367.0, + 647181.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 756282726.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 25, + "timed_iters": 126, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1989782.06, + "samples": 630, + "median": 1989321.0, + "mad": 851.0, + "iqr": 1684.75, + "q1": 1988507.0, + "q3": 1990191.75, + "min": 1986877.0, + "max": 2059987.0, + "mean": 1989821.48, + "stddev": 3902.49, + "ops_per_sec": 502.68, + "per_rep_median": [ + 1989627.0, + 1989173.0, + 1988914.5, + 1989673.0, + 1989637.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 52458149.0, + "samples": 150, + "median": 52427177.0, + "mad": 13537.0, + "iqr": 27352.5, + "q1": 52415903.75, + "q3": 52443256.25, + "min": 52380557.0, + "max": 52582982.0, + "mean": 52433492.11, + "stddev": 29290.73, + "ops_per_sec": 19.07, + "per_rep_median": [ + 52434891.0, + 52424076.0, + 52431705.0, + 52417510.5, + 52435231.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 18, + "timed_iters": 90, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2787779.6, + "samples": 450, + "median": 2787353.5, + "mad": 907.0, + "iqr": 2009.75, + "q1": 2785913.75, + "q3": 2787923.5, + "min": 2780279.0, + "max": 2855205.0, + "mean": 2787204.71, + "stddev": 5458.52, + "ops_per_sec": 358.76, + "per_rep_median": [ + 2787520.5, + 2787353.5, + 2787446.5, + 2787576.0, + 2785872.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 57203851.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 10, + "timed_iters": 48, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 5249598.0, + "samples": 240, + "median": 5243153.5, + "mad": 2777.5, + "iqr": 6410.75, + "q1": 5241307.0, + "q3": 5247717.75, + "min": 5239209.0, + "max": 5315542.0, + "mean": 5245783.37, + "stddev": 8797.52, + "ops_per_sec": 190.72, + "per_rep_median": [ + 5245663.0, + 5241672.0, + 5242829.5, + 5244764.5, + 5246894.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 107493780.0, + "samples": 150, + "median": 107501453.5, + "mad": 39471.5, + "iqr": 85781.25, + "q1": 107467039.75, + "q3": 107552821.0, + "min": 107410315.0, + "max": 107658612.0, + "mean": 107510429.29, + "stddev": 52252.7, + "ops_per_sec": 9.3, + "per_rep_median": [ + 107509863.0, + 107493500.5, + 107509730.5, + 107479174.0, + 107500894.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 17, + "timed_iters": 87, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2864288.8, + "samples": 435, + "median": 2862835.0, + "mad": 1167.0, + "iqr": 2435.0, + "q1": 2862084.5, + "q3": 2864519.5, + "min": 2859353.0, + "max": 2932038.0, + "mean": 2863637.85, + "stddev": 4910.74, + "ops_per_sec": 349.3, + "per_rep_median": [ + 2862390.0, + 2862853.0, + 2864964.0, + 2862501.0, + 2862779.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 115607442.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "bundled portable C inside slh_dsa_c (ignores the OQS symmetric layers)", + "hw_instructions": false, + "determined_by": "differential-build (0% on every toggle) + source-inspection" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 32, + "timed_iters": 158, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1582452.1, + "samples": 790, + "median": 1569194.0, + "mad": 6334.0, + "iqr": 12668.0, + "q1": 1562860.0, + "q3": 1575528.0, + "min": 1562620.0, + "max": 1620453.0, + "mean": 1569520.54, + "stddev": 6544.36, + "ops_per_sec": 637.27, + "per_rep_median": [ + 1577611.0, + 1573953.0, + 1568268.0, + 1562824.0, + 1562861.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 36605778.0, + "samples": 150, + "median": 36526092.5, + "mad": 23453.0, + "iqr": 133731.5, + "q1": 36516847.0, + "q3": 36650578.5, + "min": 36471408.0, + "max": 37001256.0, + "mean": 36593439.89, + "stddev": 117213.79, + "ops_per_sec": 27.38, + "per_rep_median": [ + 36526592.5, + 36550046.0, + 36519185.0, + 36518620.0, + 36720202.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 24, + "timed_iters": 118, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2124768.53, + "samples": 590, + "median": 2120191.0, + "mad": 1704.0, + "iqr": 5055.75, + "q1": 2118505.25, + "q3": 2123561.0, + "min": 2115931.0, + "max": 2154784.0, + "mean": 2122227.63, + "stddev": 6152.03, + "ops_per_sec": 471.66, + "per_rep_median": [ + 2125191.0, + 2121043.0, + 2118403.5, + 2120135.0, + 2120117.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 40215477.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-128s-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 98002976.0, + "samples": 150, + "median": 97976364.5, + "mad": 206617.5, + "iqr": 510248.75, + "q1": 97815336.75, + "q3": 98325585.5, + "min": 97535920.0, + "max": 101056989.0, + "mean": 98067878.51, + "stddev": 417222.32, + "ops_per_sec": 10.21, + "per_rep_median": [ + 97883707.5, + 97869429.0, + 97979677.0, + 98227323.5, + 97976722.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 754484787.0, + "samples": 150, + "median": 745020311.5, + "mad": 922999.5, + "iqr": 2031713.25, + "q1": 744182037.5, + "q3": 746213750.75, + "min": 742893768.0, + "max": 755768239.0, + "mean": 745565828.29, + "stddev": 2207371.6, + "ops_per_sec": 1.34, + "per_rep_median": [ + 745054793.0, + 744962115.5, + 744317108.5, + 744192869.0, + 746532264.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 75, + "timed_iters": 376, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 664743.49, + "samples": 1880, + "median": 665200.0, + "mad": 19.0, + "iqr": 1666.0, + "q1": 665181.0, + "q3": 666847.0, + "min": 664366.0, + "max": 735848.0, + "mean": 666362.78, + "stddev": 2903.61, + "ops_per_sec": 1503.31, + "per_rep_median": [ + 664440.0, + 665200.0, + 665200.0, + 665218.0, + 665200.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 843661876.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-192f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 20, + "timed_iters": 102, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 2443323.67, + "samples": 510, + "median": 2361494.0, + "mad": 1509.0, + "iqr": 2649.0, + "q1": 2360614.0, + "q3": 2363263.0, + "min": 2356744.0, + "max": 2444855.0, + "mean": 2368321.79, + "stddev": 21548.1, + "ops_per_sec": 423.46, + "per_rep_median": [ + 2365058.5, + 2361484.5, + 2363003.0, + 2362966.0, + 2360281.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 63498533.0, + "samples": 150, + "median": 63469570.0, + "mad": 39741.0, + "iqr": 76092.0, + "q1": 63448626.0, + "q3": 63524718.0, + "min": 63239997.0, + "max": 66201127.0, + "mean": 63506645.91, + "stddev": 233256.69, + "ops_per_sec": 15.76, + "per_rep_median": [ + 63496145.0, + 63520977.5, + 63467690.0, + 63463532.5, + 63457523.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 74, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3363113.93, + "samples": 370, + "median": 3360774.0, + "mad": 584.0, + "iqr": 3774.0, + "q1": 3357241.75, + "q3": 3361015.75, + "min": 3342497.0, + "max": 3403571.0, + "mean": 3358402.86, + "stddev": 6802.69, + "ops_per_sec": 297.55, + "per_rep_median": [ + 3360728.0, + 3360969.0, + 3360774.5, + 3348552.5, + 3360608.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 69191838.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "SPHINCS+-SHA2-256f-simple", + "kind": "sig", + "implementation": "liboqs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 8, + "timed_iters": 41, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 6159015.57, + "samples": 205, + "median": 6138775.0, + "mad": 6481.0, + "iqr": 12740.0, + "q1": 6132516.0, + "q3": 6145256.0, + "min": 6123645.0, + "max": 6253052.0, + "mean": 6140023.02, + "stddev": 13341.48, + "ops_per_sec": 162.9, + "per_rep_median": [ + 6146831.0, + 6139775.0, + 6140089.0, + 6130312.0, + 6131479.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 128718219.0, + "samples": 150, + "median": 128835361.5, + "mad": 173380.0, + "iqr": 363788.25, + "q1": 128692058.75, + "q3": 129055847.0, + "min": 128425643.0, + "max": 129771189.0, + "mean": 128911896.3, + "stddev": 309203.24, + "ops_per_sec": 7.76, + "per_rep_median": [ + 128869207.0, + 128888530.5, + 128956260.5, + 128702946.0, + 128709564.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 15, + "timed_iters": 76, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 3278862.53, + "samples": 380, + "median": 3278608.5, + "mad": 3259.0, + "iqr": 6944.0, + "q1": 3275386.0, + "q3": 3282330.0, + "min": 3273423.0, + "max": 3364848.0, + "mean": 3283605.09, + "stddev": 13722.78, + "ops_per_sec": 305.01, + "per_rep_median": [ + 3278664.0, + 3283719.0, + 3275478.5, + 3275321.0, + 3283784.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 138252745.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-c" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "OQS SHA-2 layer (OpenSSL EVP)", + "hw_instructions": true, + "determined_by": "differential-build (~54% slower with liboqs-internal SHA-2)" + } + ], + "determined_by": "differential-build" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "rustcrypto", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 910, + "timed_iters": 4551, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 54935.22, + "samples": 22755, + "median": 54759.0, + "mad": 92.0, + "iqr": 519.0, + "q1": 54703.0, + "q3": 55222.0, + "min": 54518.0, + "max": 79203.0, + "mean": 54927.64, + "stddev": 432.12, + "ops_per_sec": 18261.84, + "per_rep_median": [ + 54759.0, + 54740.0, + 54759.0, + 54777.0, + 54759.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 884, + "timed_iters": 4422, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 56529.52, + "samples": 22110, + "median": 56536.0, + "mad": 37.0, + "iqr": 57.0, + "q1": 56499.0, + "q3": 56556.0, + "min": 56295.0, + "max": 97352.0, + "mean": 56567.3, + "stddev": 538.76, + "ops_per_sec": 17687.84, + "per_rep_median": [ + 56536.0, + 56536.0, + 56518.0, + 56518.0, + 56537.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 275, + "timed_iters": 1376, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 181732.22, + "samples": 6880, + "median": 181647.0, + "mad": 19.0, + "iqr": 38.0, + "q1": 181628.0, + "q3": 181666.0, + "min": 181535.0, + "max": 217202.0, + "mean": 181755.78, + "stddev": 843.73, + "ops_per_sec": 5505.18, + "per_rep_median": [ + 181647.0, + 181647.0, + 181647.0, + 181629.0, + 181647.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 298, + "timed_iters": 1491, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 167657.65, + "samples": 7455, + "median": 167628.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 167610.0, + "q3": 167647.0, + "min": 167481.0, + "max": 198999.0, + "mean": 167744.57, + "stddev": 925.74, + "ops_per_sec": 5965.59, + "per_rep_median": [ + 167628.0, + 167628.0, + 167628.0, + 167628.0, + 167628.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 292942.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "curve25519-dalek (portable Rust with formally-derived field arithmetic)" + }, + "symmetric": [], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "secret_key": 2560, + "signature": 2420 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 160, + "timed_iters": 802, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 311631.37, + "samples": 4010, + "median": 310276.0, + "mad": 296.0, + "iqr": 593.0, + "q1": 310016.0, + "q3": 310609.0, + "min": 308517.0, + "max": 360386.0, + "mean": 310539.34, + "stddev": 1839.37, + "ops_per_sec": 3222.94, + "per_rep_median": [ + 310331.0, + 310313.0, + 310313.0, + 310155.5, + 310238.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 75, + "timed_iters": 377, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 663058.24, + "samples": 1885, + "median": 590551.0, + "mad": 347164.0, + "iqr": 693181.0, + "q1": 415238.0, + "q3": 1108419.0, + "min": 242332.0, + "max": 5455205.0, + "mean": 823326.81, + "stddev": 675674.59, + "ops_per_sec": 1693.33, + "per_rep_median": [ + 595571.0, + 590348.0, + 590144.0, + 590366.0, + 590551.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 270, + "timed_iters": 1350, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 185178.3, + "samples": 6750, + "median": 185092.0, + "mad": 73.0, + "iqr": 130.0, + "q1": 185036.0, + "q3": 185166.0, + "min": 184795.0, + "max": 210646.0, + "mean": 185234.25, + "stddev": 814.3, + "ops_per_sec": 5402.72, + "per_rep_median": [ + 185091.0, + 185110.0, + 185100.5, + 185092.0, + 185092.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 505, + "timed_iters": 2527, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 98928.31, + "samples": 12635, + "median": 98907.0, + "mad": 55.0, + "iqr": 94.0, + "q1": 98869.0, + "q3": 98963.0, + "min": 98592.0, + "max": 124814.0, + "mean": 98998.98, + "stddev": 756.23, + "ops_per_sec": 10110.51, + "per_rep_median": [ + 98925.0, + 98907.0, + 98907.0, + 98907.0, + 98907.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1085919.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "secret_key": 4032, + "signature": 3309 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 104, + "timed_iters": 519, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 481610.87, + "samples": 2595, + "median": 483682.0, + "mad": 907.0, + "iqr": 1888.0, + "q1": 482590.0, + "q3": 484478.0, + "min": 478960.0, + "max": 3211368.0, + "mean": 484666.38, + "stddev": 53579.81, + "ops_per_sec": 2067.47, + "per_rep_median": [ + 481497.0, + 484331.0, + 483849.0, + 482534.0, + 483849.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 34, + "timed_iters": 169, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1479883.87, + "samples": 845, + "median": 1085956.0, + "mad": 499422.0, + "iqr": 1234843.0, + "q1": 592367.0, + "q3": 1827210.0, + "min": 346424.0, + "max": 10232580.0, + "mean": 1369974.77, + "stddev": 1154680.72, + "ops_per_sec": 920.85, + "per_rep_median": [ + 1085178.0, + 1082919.0, + 1094048.0, + 844328.0, + 1088011.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 170, + "timed_iters": 850, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 294131.19, + "samples": 4250, + "median": 293924.0, + "mad": 111.0, + "iqr": 222.0, + "q1": 293813.0, + "q3": 294035.0, + "min": 293461.0, + "max": 329220.0, + "mean": 294189.76, + "stddev": 1494.73, + "ops_per_sec": 3402.24, + "per_rep_median": [ + 293980.0, + 293905.0, + 293924.0, + 293869.0, + 293887.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 348, + "timed_iters": 1738, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 143803.19, + "samples": 8690, + "median": 143647.0, + "mad": 56.0, + "iqr": 130.0, + "q1": 143573.0, + "q3": 143703.0, + "min": 143296.0, + "max": 173758.0, + "mean": 143745.49, + "stddev": 861.88, + "ops_per_sec": 6961.51, + "per_rep_median": [ + 143666.0, + 143610.0, + 143647.0, + 143647.0, + 143647.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 1863562.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "secret_key": 4896, + "signature": 4627 + }, + "sk_seed_bytes": 32, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 65, + "timed_iters": 327, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 764865.89, + "samples": 1635, + "median": 754532.0, + "mad": 2074.0, + "iqr": 4157.5, + "q1": 752467.0, + "q3": 756624.5, + "min": 749588.0, + "max": 862031.0, + "mean": 755421.49, + "stddev": 6039.06, + "ops_per_sec": 1325.32, + "per_rep_median": [ + 757569.0, + 751977.0, + 754902.0, + 752829.0, + 754717.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 34, + "timed_iters": 169, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1479016.48, + "samples": 845, + "median": 1171900.0, + "mad": 696625.0, + "iqr": 1054400.0, + "q1": 820513.0, + "q3": 1874913.0, + "min": 473053.0, + "max": 6771826.0, + "mean": 1432856.78, + "stddev": 1044399.44, + "ops_per_sec": 853.32, + "per_rep_median": [ + 1168011.0, + 1167899.0, + 1172363.0, + 1171233.0, + 1172473.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 107, + "timed_iters": 535, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 467446.89, + "samples": 2675, + "median": 465052.0, + "mad": 112.0, + "iqr": 258.0, + "q1": 464942.0, + "q3": 465200.0, + "min": 464497.0, + "max": 522330.0, + "mean": 465523.16, + "stddev": 2442.83, + "ops_per_sec": 2150.3, + "per_rep_median": [ + 465108.0, + 465016.0, + 465052.0, + 465071.0, + 465015.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 238, + "timed_iters": 1192, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 209748.14, + "samples": 5960, + "median": 209647.0, + "mad": 73.0, + "iqr": 130.0, + "q1": 209573.0, + "q3": 209703.0, + "min": 209332.0, + "max": 246979.0, + "mean": 209841.1, + "stddev": 1270.38, + "ops_per_sec": 4769.92, + "per_rep_median": [ + 209647.0, + 209628.0, + 209665.0, + 209647.0, + 209629.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 2391484.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha3-shake", + "source": "rust keccak crate (cpufeatures runtime dispatch)", + "hw_instructions": false, + "determined_by": "source-inspection", + "note": "reaches ARMv8.2 SHA3 instructions only where the CPU has them (Apple M-series yes, Cortex-A76 no)" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 17088 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 115, + "timed_iters": 573, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 436263.22, + "samples": 2865, + "median": 435275.0, + "mad": 352.0, + "iqr": 722.0, + "q1": 434960.0, + "q3": 435682.0, + "min": 433942.0, + "max": 484478.0, + "mean": 435490.57, + "stddev": 1350.05, + "ops_per_sec": 2297.4, + "per_rep_median": [ + 435275.0, + 435275.0, + 435293.0, + 435256.0, + 435275.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 5, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 10293808.0, + "samples": 150, + "median": 10285302.0, + "mad": 3009.5, + "iqr": 6004.75, + "q1": 10282352.75, + "q3": 10288357.5, + "min": 10276617.0, + "max": 10353024.0, + "mean": 10287232.97, + "stddev": 9511.33, + "ops_per_sec": 97.23, + "per_rep_median": [ + 10287237.0, + 10284107.5, + 10283357.5, + 10287802.5, + 10286256.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 81, + "timed_iters": 404, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 619564.08, + "samples": 2020, + "median": 619589.0, + "mad": 907.5, + "iqr": 1824.0, + "q1": 618750.5, + "q3": 620574.5, + "min": 616403.0, + "max": 686199.0, + "mean": 619809.18, + "stddev": 2202.38, + "ops_per_sec": 1613.97, + "per_rep_median": [ + 619542.0, + 619589.0, + 619570.0, + 619653.5, + 619635.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 81, + "timed_iters": 404, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 619439.73, + "samples": 2020, + "median": 619181.0, + "mad": 888.5, + "iqr": 1741.0, + "q1": 618422.0, + "q3": 620163.0, + "min": 616070.0, + "max": 678940.0, + "mean": 619438.03, + "stddev": 2419.72, + "ops_per_sec": 1615.04, + "per_rep_median": [ + 618949.5, + 619107.0, + 619384.5, + 619181.0, + 619264.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 11340166.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_128S", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 64, + "signature": 7856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 28318379.33, + "samples": 150, + "median": 28309246.5, + "mad": 5138.5, + "iqr": 10504.75, + "q1": 28305080.0, + "q3": 28315584.75, + "min": 28292145.0, + "max": 28380922.0, + "mean": 28312997.47, + "stddev": 14720.4, + "ops_per_sec": 35.32, + "per_rep_median": [ + 28307663.0, + 28310441.0, + 28310108.0, + 28309839.0, + 28308339.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 214178220.0, + "samples": 150, + "median": 214227974.0, + "mad": 31332.5, + "iqr": 62270.5, + "q1": 214196630.25, + "q3": 214258900.75, + "min": 214122341.0, + "max": 214322883.0, + "mean": 214226706.79, + "stddev": 42022.56, + "ops_per_sec": 4.67, + "per_rep_median": [ + 214227050.5, + 214203032.0, + 214231610.0, + 214225183.0, + 214240910.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 214, + "timed_iters": 1071, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 233452.82, + "samples": 5355, + "median": 233277.0, + "mad": 445.0, + "iqr": 944.0, + "q1": 232888.0, + "q3": 233832.0, + "min": 232054.0, + "max": 265757.0, + "mean": 233489.33, + "stddev": 1221.45, + "ops_per_sec": 4286.75, + "per_rep_median": [ + 233276.0, + 233276.0, + 233257.0, + 233350.0, + 233276.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 214, + "timed_iters": 1070, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 233623.41, + "samples": 5350, + "median": 233480.0, + "mad": 556.0, + "iqr": 1130.0, + "q1": 232980.0, + "q3": 234110.0, + "min": 231905.0, + "max": 260998.0, + "mean": 233662.34, + "stddev": 1128.45, + "ops_per_sec": 4283.02, + "per_rep_median": [ + 233443.0, + 233406.0, + 233535.0, + 233517.0, + 233554.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 242770497.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_192F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 48, + "secret_key": 96, + "signature": 35664 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 74, + "timed_iters": 371, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 673463.43, + "samples": 1855, + "median": 672755.0, + "mad": 611.0, + "iqr": 1250.0, + "q1": 672190.0, + "q3": 673440.0, + "min": 670569.0, + "max": 715125.0, + "mean": 672964.55, + "stddev": 1809.14, + "ops_per_sec": 1486.43, + "per_rep_median": [ + 672588.0, + 672514.0, + 672700.0, + 672847.0, + 673125.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21221023.33, + "samples": 150, + "median": 20283048.0, + "mad": 5139.0, + "iqr": 10318.5, + "q1": 20277988.75, + "q3": 20288307.25, + "min": 20255715.0, + "max": 20359067.0, + "mean": 20285352.73, + "stddev": 14811.96, + "ops_per_sec": 49.3, + "per_rep_median": [ + 20283650.0, + 20282030.0, + 20283817.0, + 20286881.5, + 20281196.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 46, + "timed_iters": 231, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1081337.39, + "samples": 1155, + "median": 1081437.0, + "mad": 723.0, + "iqr": 1555.0, + "q1": 1080789.0, + "q3": 1082344.0, + "min": 1079048.0, + "max": 1151937.0, + "mean": 1081842.96, + "stddev": 2933.95, + "ops_per_sec": 924.7, + "per_rep_median": [ + 1081456.0, + 1081326.0, + 1081511.0, + 1081456.0, + 1081363.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 47, + "timed_iters": 234, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1069719.77, + "samples": 1170, + "median": 1067400.0, + "mad": 722.0, + "iqr": 1555.0, + "q1": 1066771.0, + "q3": 1068326.0, + "min": 1064956.0, + "max": 1134974.0, + "mean": 1067810.81, + "stddev": 2831.77, + "ops_per_sec": 936.86, + "per_rep_median": [ + 1067262.0, + 1067428.0, + 1067326.0, + 1067446.0, + 1067446.5 + ] + } + }, + "total": { + "sum_of_medians_ns": 22037240.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "SLH_DSA_PURE_SHA2_256F", + "kind": "sig", + "implementation": "rustcrypto", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 64, + "secret_key": 128, + "signature": 49856 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 28, + "timed_iters": 142, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1761830.39, + "samples": 710, + "median": 1761960.5, + "mad": 962.5, + "iqr": 1925.75, + "q1": 1761025.25, + "q3": 1762951.0, + "min": 1757951.0, + "max": 1833043.0, + "mean": 1762363.05, + "stddev": 4212.21, + "ops_per_sec": 567.55, + "per_rep_median": [ + 1761886.5, + 1761941.5, + 1762062.0, + 1762136.5, + 1761636.5 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 1, + "timed_iters": 30, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 41216852.0, + "samples": 150, + "median": 41165092.0, + "mad": 8897.5, + "iqr": 17721.5, + "q1": 41156273.25, + "q3": 41173994.75, + "min": 41138536.0, + "max": 41289943.0, + "mean": 41169997.33, + "stddev": 23859.41, + "ops_per_sec": 24.29, + "per_rep_median": [ + 41160925.5, + 41163277.5, + 41167620.0, + 41162221.5, + 41166008.5 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 44, + "timed_iters": 221, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1129979.23, + "samples": 1105, + "median": 1127678.0, + "mad": 963.0, + "iqr": 2000.0, + "q1": 1126826.0, + "q3": 1128826.0, + "min": 1124455.0, + "max": 1197696.0, + "mean": 1128045.54, + "stddev": 2810.48, + "ops_per_sec": 886.78, + "per_rep_median": [ + 1127659.0, + 1127659.0, + 1127751.0, + 1127659.0, + 1127789.0 + ] + }, + "verify_cached_key": { + "unit": "ns", + "warmup_iters": 44, + "timed_iters": 222, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 1127874.06, + "samples": 1110, + "median": 1127807.5, + "mad": 926.0, + "iqr": 1865.75, + "q1": 1126923.25, + "q3": 1128789.0, + "min": 1124104.0, + "max": 1195066.0, + "mean": 1128131.2, + "stddev": 3173.51, + "ops_per_sec": 886.68, + "per_rep_median": [ + 1127807.0, + 1127881.0, + 1127834.5, + 1127816.0, + 1127779.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 44054730.5, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "portable-rust", + "detail": "no hand-written asm / explicit SIMD; compiler autovectorisation only" + }, + "symmetric": [ + { + "primitive": "sha2", + "source": "rust sha2 crate (cpufeatures runtime dispatch)", + "hw_instructions": true, + "determined_by": "source-inspection" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "Ed25519", + "kind": "sig", + "implementation": "aws-lc-rs", + "classical": true, + "enabled": true, + "claimed_nist_level": 1, + "sizes": { + "public_key": 32, + "secret_key": 32, + "signature": 64 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 2326, + "timed_iters": 11628, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 21499.47, + "samples": 58140, + "median": 21499.0, + "mad": 18.0, + "iqr": 19.0, + "q1": 21481.0, + "q3": 21500.0, + "min": 21407.0, + "max": 48777.0, + "mean": 21513.51, + "stddev": 328.13, + "ops_per_sec": 46513.79, + "per_rep_median": [ + 21500.0, + 21499.0, + 21500.0, + 21482.0, + 21481.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 2223, + "timed_iters": 11113, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 22495.7, + "samples": 55565, + "median": 22518.0, + "mad": 19.0, + "iqr": 37.0, + "q1": 22500.0, + "q3": 22537.0, + "min": 22389.0, + "max": 39574.0, + "mean": 22531.21, + "stddev": 210.41, + "ops_per_sec": 44408.92, + "per_rep_median": [ + 22518.0, + 22518.0, + 22518.0, + 22518.0, + 22518.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 438, + "timed_iters": 2192, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 114044.78, + "samples": 10960, + "median": 113981.0, + "mad": 37.0, + "iqr": 92.0, + "q1": 113944.0, + "q3": 114036.0, + "min": 113703.0, + "max": 137888.0, + "mean": 114078.69, + "stddev": 760.71, + "ops_per_sec": 8773.39, + "per_rep_median": [ + 113981.0, + 113981.0, + 113999.0, + 113981.0, + 113999.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 157998.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-44", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 2, + "sizes": { + "public_key": 1312, + "signature": 2420 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 725, + "timed_iters": 3625, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 68966.66, + "samples": 18125, + "median": 69110.0, + "mad": 38.0, + "iqr": 93.0, + "q1": 69055.0, + "q3": 69148.0, + "min": 65111.0, + "max": 88370.0, + "mean": 68976.81, + "stddev": 820.74, + "ops_per_sec": 14469.69, + "per_rep_median": [ + 69092.0, + 69110.0, + 69110.0, + 69110.0, + 69110.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 243, + "timed_iters": 1217, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 205423.15, + "samples": 6085, + "median": 155221.0, + "mad": 59462.0, + "iqr": 114185.0, + "q1": 120129.0, + "q3": 234314.0, + "min": 95388.0, + "max": 1117085.0, + "mean": 191055.96, + "stddev": 109110.42, + "ops_per_sec": 6442.43, + "per_rep_median": [ + 155813.0, + 153314.0, + 153925.0, + 154702.0, + 157573.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 738, + "timed_iters": 3692, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 67712.08, + "samples": 18460, + "median": 67685.0, + "mad": 18.0, + "iqr": 37.0, + "q1": 67666.0, + "q3": 67703.0, + "min": 67610.0, + "max": 93129.0, + "mean": 67735.24, + "stddev": 487.75, + "ops_per_sec": 14774.32, + "per_rep_median": [ + 67685.0, + 67685.0, + 67685.0, + 67685.0, + 67685.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 292016.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-65", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 3, + "sizes": { + "public_key": 1952, + "signature": 3309 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 421, + "timed_iters": 2105, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 118758.6, + "samples": 10525, + "median": 118666.0, + "mad": 56.0, + "iqr": 129.0, + "q1": 118611.0, + "q3": 118740.0, + "min": 118314.0, + "max": 143221.0, + "mean": 118779.45, + "stddev": 786.42, + "ops_per_sec": 8427.01, + "per_rep_median": [ + 118666.0, + 118666.0, + 118665.0, + 118684.0, + 118684.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 176, + "timed_iters": 881, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 283675.67, + "samples": 4405, + "median": 253628.0, + "mad": 77981.0, + "iqr": 183685.0, + "q1": 184424.0, + "q3": 368109.0, + "min": 148703.0, + "max": 2052819.0, + "mean": 303292.75, + "stddev": 169435.45, + "ops_per_sec": 3942.78, + "per_rep_median": [ + 258739.0, + 256776.0, + 236369.0, + 245573.0, + 254239.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 442, + "timed_iters": 2211, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 113059.97, + "samples": 11055, + "median": 112962.0, + "mad": 19.0, + "iqr": 56.0, + "q1": 112925.0, + "q3": 112981.0, + "min": 112851.0, + "max": 131666.0, + "mean": 113052.36, + "stddev": 704.49, + "ops_per_sec": 8852.53, + "per_rep_median": [ + 112962.0, + 112944.0, + 112944.0, + 112944.0, + 112962.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 485256.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + }, + { + "alg": "ML-DSA-87", + "kind": "sig", + "implementation": "aws-lc-rs", + "enabled": true, + "claimed_nist_level": 5, + "sizes": { + "public_key": 2592, + "signature": 4627 + }, + "operations": { + "keygen": { + "unit": "ns", + "warmup_iters": 248, + "timed_iters": 1238, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 201868.2, + "samples": 6190, + "median": 202036.0, + "mad": 93.0, + "iqr": 203.0, + "q1": 201925.0, + "q3": 202128.0, + "min": 196147.0, + "max": 230794.0, + "mean": 201890.16, + "stddev": 1460.51, + "ops_per_sec": 4949.61, + "per_rep_median": [ + 202072.0, + 202036.0, + 202017.0, + 202054.0, + 202018.0 + ] + }, + "sign": { + "unit": "ns", + "warmup_iters": 121, + "timed_iters": 607, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 412073.45, + "samples": 3035, + "median": 350757.0, + "mad": 103277.0, + "iqr": 222507.0, + "q1": 249480.5, + "q3": 471987.5, + "min": 246813.0, + "max": 1833154.0, + "mean": 401224.94, + "stddev": 176789.28, + "ops_per_sec": 2850.98, + "per_rep_median": [ + 353923.0, + 353498.0, + 351275.0, + 347128.0, + 346831.0 + ] + }, + "verify": { + "unit": "ns", + "warmup_iters": 258, + "timed_iters": 1288, + "repetitions": 5, + "calibrated": true, + "calib_est_ns": 194039.7, + "samples": 6440, + "median": 193943.0, + "mad": 37.0, + "iqr": 74.0, + "q1": 193906.0, + "q3": 193980.0, + "min": 193795.0, + "max": 222351.0, + "mean": 194108.73, + "stddev": 1081.41, + "ops_per_sec": 5156.15, + "per_rep_median": [ + 193943.0, + 193924.0, + 193943.0, + 193962.0, + 193962.0 + ] + } + }, + "total": { + "sum_of_medians_ns": 746736.0, + "operations": [ + "keygen", + "sign", + "verify" + ], + "note": "sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency" + }, + "acceleration": { + "arithmetic": { + "path": "aws-lc-native", + "detail": "AWS-LC C/assembly via the aws-lc-rs FFI wrapper \u2014 measured to price rustls-awslc handshakes, NOT an independent implementation" + }, + "symmetric": [ + { + "primitive": "internal", + "source": "AWS-LC internal", + "hw_instructions": null, + "determined_by": "not separately characterised" + } + ], + "determined_by": "source-inspection" + } + } + ], + "tls": { + "available": true, + "have_oqs_provider": true, + "baseline": { + "kem_group": "X25519", + "sig_alg": "ed25519", + "label": "X25519+ed25519" + }, + "matrix": [ + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1291140.0, + "p95": 1302498.9, + "min": 1283954.0, + "max": 1743618.0, + "mean": 1297169.3, + "stddev": 36835.9 + }, + "handshakes_per_sec": 774.5, + "bytes_on_wire": { + "client_to_server": 306, + "server_to_client": 1212, + "total": 1518 + }, + "client_hello_bytes": 226, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 791503.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57611.0, + "subtotal_ns": 57611.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144796.0, + "subtotal_ns": 289592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1633072.5, + "p95": 1645090.2, + "min": 1625304.0, + "max": 2175966.0, + "mean": 1637620.1, + "stddev": 31314.6 + }, + "handshakes_per_sec": 612.3, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 2300, + "total": 3782 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 890744.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57611.0, + "subtotal_ns": 57611.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144796.0, + "subtotal_ns": 289592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1671655.5, + "p95": 1683417.8, + "min": 1659693.0, + "max": 2371909.0, + "mean": 1678414.9, + "stddev": 49209.7 + }, + "handshakes_per_sec": 598.2, + "bytes_on_wire": { + "client_to_server": 1515, + "server_to_client": 2333, + "total": 3848 + }, + "client_hello_bytes": 1435, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57611.0, + "subtotal_ns": 57611.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144796.0, + "subtotal_ns": 289592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1067363.0, + "p95": 1077974.9, + "min": 1060511.0, + "max": 1569137.0, + "mean": 1071700.6, + "stddev": 29982.6 + }, + "handshakes_per_sec": 936.9, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 1948, + "total": 3014 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 409906.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57611.0, + "subtotal_ns": 57611.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144796.0, + "subtotal_ns": 289592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1150057.0, + "p95": 1160288.9, + "min": 1144382.0, + "max": 1682304.0, + "mean": 1154650.5, + "stddev": 30547.7 + }, + "handshakes_per_sec": 869.5, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 2268, + "total": 3718 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 446444.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57611.0, + "subtotal_ns": 57611.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144796.0, + "subtotal_ns": 289592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1268899.0, + "p95": 1279926.2, + "min": 1261250.0, + "max": 1774025.0, + "mean": 1274824.0, + "stddev": 38509.1 + }, + "handshakes_per_sec": 788.1, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 2748, + "total": 4582 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 494333.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "sign", + "count": 1, + "median_ns_each": 57611.0, + "subtotal_ns": 57611.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "openssl", + "operation": "verify", + "count": 2, + "median_ns_each": 144796.0, + "subtotal_ns": 289592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2642759.5, + "p95": 4326434.0, + "min": 2213559.0, + "max": 7437967.0, + "mean": 2871209.4, + "stddev": 749325.0 + }, + "handshakes_per_sec": 378.4, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 8318, + "total": 9800 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1179908.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3544197.5, + "p95": 6755980.5, + "min": 2659556.0, + "max": 11739938.0, + "mean": 3931384.7, + "stddev": 1392976.9 + }, + "handshakes_per_sec": 282.2, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 10736, + "total": 12218 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1596637.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4226656.0, + "p95": 7978326.7, + "min": 3378273.0, + "max": 15502801.0, + "mean": 4718011.8, + "stddev": 1528451.4 + }, + "handshakes_per_sec": 236.6, + "bytes_on_wire": { + "client_to_server": 1482, + "server_to_client": 14012, + "total": 15494 + }, + "client_hello_bytes": 1402, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1987941.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2062958.0, + "p95": 3938531.8, + "min": 1634230.0, + "max": 7320098.0, + "mean": 2347897.3, + "stddev": 781203.1 + }, + "handshakes_per_sec": 484.7, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 7966, + "total": 9032 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 699070.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2976961.5, + "p95": 6191028.3, + "min": 2098153.0, + "max": 12333101.0, + "mean": 3333842.1, + "stddev": 1387538.8 + }, + "handshakes_per_sec": 335.9, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 10384, + "total": 11450 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1115799.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3616151.5, + "p95": 6799857.8, + "min": 2771536.0, + "max": 11185553.0, + "mean": 3976751.6, + "stddev": 1368053.0 + }, + "handshakes_per_sec": 276.5, + "bytes_on_wire": { + "client_to_server": 1066, + "server_to_client": 13660, + "total": 14726 + }, + "client_hello_bytes": 986, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1507103.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2162263.0, + "p95": 4039417.9, + "min": 1733822.0, + "max": 7383635.0, + "mean": 2432226.2, + "stddev": 816359.1 + }, + "handshakes_per_sec": 462.5, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 8286, + "total": 9736 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 735608.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3065108.5, + "p95": 6278373.5, + "min": 2183763.0, + "max": 10079542.0, + "mean": 3402988.3, + "stddev": 1304235.1 + }, + "handshakes_per_sec": 326.3, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 10704, + "total": 12154 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1152337.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3711085.5, + "p95": 7057619.0, + "min": 2863906.0, + "max": 13313279.0, + "mean": 4100466.5, + "stddev": 1412421.8 + }, + "handshakes_per_sec": 269.5, + "bytes_on_wire": { + "client_to_server": 1450, + "server_to_client": 13980, + "total": 15430 + }, + "client_hello_bytes": 1370, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1543641.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2283179.0, + "p95": 4160141.8, + "min": 1853154.0, + "max": 7074099.0, + "mean": 2574314.9, + "stddev": 795902.0 + }, + "handshakes_per_sec": 438.0, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 8766, + "total": 10600 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 783497.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3186802.0, + "p95": 6137249.4, + "min": 2303429.0, + "max": 13405408.0, + "mean": 3533240.3, + "stddev": 1359732.7 + }, + "handshakes_per_sec": 313.8, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 11184, + "total": 13018 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1200226.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "openssl-native", + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3856140.0, + "p95": 6798758.7, + "min": 3010794.0, + "max": 12226712.0, + "mean": 4198493.1, + "stddev": 1387473.9 + }, + "handshakes_per_sec": 259.3, + "bytes_on_wire": { + "client_to_server": 1834, + "server_to_client": 14460, + "total": 16294 + }, + "client_hello_bytes": 1754, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1591530.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa44", + "group": "X25519MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2687342.5, + "p95": 4561271.5, + "min": 2255818.0, + "max": 6866193.0, + "mean": 2953080.4, + "stddev": 758674.9 + }, + "handshakes_per_sec": 372.1, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 8316, + "total": 9874 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1179908.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa65", + "group": "X25519MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3573651.5, + "p95": 6496535.5, + "min": 2690315.0, + "max": 12929522.0, + "mean": 3867926.2, + "stddev": 1284951.0 + }, + "handshakes_per_sec": 279.8, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 10734, + "total": 12292 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1596637.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+mldsa87", + "group": "X25519MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4283415.0, + "p95": 7626765.3, + "min": 3435013.0, + "max": 13463259.0, + "mean": 4716561.7, + "stddev": 1476915.3 + }, + "handshakes_per_sec": 233.5, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 14010, + "total": 15568 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1987941.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+falcon512", + "group": "X25519MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3187293.0, + "p95": 3212978.5, + "min": 3164311.0, + "max": 4142989.0, + "mean": 3197576.7, + "stddev": 79599.1 + }, + "handshakes_per_sec": 313.7, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 4369, + "total": 5927 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 935150.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290017.0, + "subtotal_ns": 290017.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50796.0, + "subtotal_ns": 101592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+sphincssha2128fsimple", + "group": "X25519MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43747185.5, + "p95": 44201788.5, + "min": 43251292.0, + "max": 46816768.0, + "mean": 43780178.4, + "stddev": 246995.6 + }, + "handshakes_per_sec": 22.9, + "bytes_on_wire": { + "client_to_server": 1558, + "server_to_client": 36417, + "total": 37975 + }, + "client_hello_bytes": 1478, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 41310015.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "keygen", + "count": 2, + "median_ns_each": 56686.0, + "subtotal_ns": 113372.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "openssl", + "operation": "derive", + "count": 2, + "median_ns_each": 165464.0, + "subtotal_ns": 330928.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 36526092.5, + "subtotal_ns": 36526092.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2120191.0, + "subtotal_ns": 4240382.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa44", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2723157.0, + "p95": 4606784.2, + "min": 2285966.0, + "max": 8357979.0, + "mean": 3017621.3, + "stddev": 800310.9 + }, + "handshakes_per_sec": 367.2, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 8349, + "total": 9940 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa65", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3617456.5, + "p95": 6831121.8, + "min": 2731406.0, + "max": 12677059.0, + "mean": 3983846.6, + "stddev": 1419010.3 + }, + "handshakes_per_sec": 276.4, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 10767, + "total": 12358 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+mldsa87", + "group": "SecP256r1MLKEM768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 4257100.0, + "p95": 7187556.8, + "min": 3412031.0, + "max": 13055205.0, + "mean": 4600610.9, + "stddev": 1392908.6 + }, + "handshakes_per_sec": 234.9, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 14043, + "total": 15634 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+falcon512", + "group": "SecP256r1MLKEM768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3210357.0, + "p95": 3240790.6, + "min": 3184534.0, + "max": 4381969.0, + "mean": 3221696.9, + "stddev": 86564.9 + }, + "handshakes_per_sec": 311.5, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 4403, + "total": 5994 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290017.0, + "subtotal_ns": 290017.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50796.0, + "subtotal_ns": 101592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+sphincssha2128fsimple", + "group": "SecP256r1MLKEM768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 44043152.5, + "p95": 44512976.5, + "min": 43540897.0, + "max": 46711320.0, + "mean": 44079293.7, + "stddev": 257932.0 + }, + "handshakes_per_sec": 22.7, + "bytes_on_wire": { + "client_to_server": 1591, + "server_to_client": 36450, + "total": 38041 + }, + "client_hello_bytes": 1511, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": null, + "complete": false, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 36526092.5, + "subtotal_ns": 36526092.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2120191.0, + "subtotal_ns": 4240382.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [ + "KEM primitive matching 'secp256r1' not measured from the liboqs/openssl implementation in this run" + ], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa44", + "group": "mlkem512", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2092994.5, + "p95": 3809937.9, + "min": 1665896.0, + "max": 7842278.0, + "mean": 2348899.9, + "stddev": 769453.5 + }, + "handshakes_per_sec": 477.8, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 7964, + "total": 9106 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 699070.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa65", + "group": "mlkem512", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2996756.0, + "p95": 6225777.6, + "min": 2117299.0, + "max": 11472252.0, + "mean": 3389593.9, + "stddev": 1402973.5 + }, + "handshakes_per_sec": 333.7, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 10382, + "total": 11524 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1115799.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+mldsa87", + "group": "mlkem512", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3657038.5, + "p95": 6601991.7, + "min": 2812091.0, + "max": 16161293.0, + "mean": 4015808.8, + "stddev": 1416778.0 + }, + "handshakes_per_sec": 273.4, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 13658, + "total": 14800 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1507103.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+falcon512", + "group": "mlkem512", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2581370.5, + "p95": 2608633.2, + "min": 2557056.0, + "max": 3549567.0, + "mean": 2591364.6, + "stddev": 80699.5 + }, + "handshakes_per_sec": 387.4, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 4011, + "total": 5153 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 454312.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290017.0, + "subtotal_ns": 290017.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50796.0, + "subtotal_ns": 101592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem512+sphincssha2128fsimple", + "group": "mlkem512", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43973196.5, + "p95": 44403373.6, + "min": 43514116.0, + "max": 46716705.0, + "mean": 44008575.1, + "stddev": 236085.4 + }, + "handshakes_per_sec": 22.7, + "bytes_on_wire": { + "client_to_server": 1142, + "server_to_client": 36065, + "total": 37207 + }, + "client_hello_bytes": 1062, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40829177.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 18203.0, + "subtotal_ns": 18203.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 20537.0, + "subtotal_ns": 20537.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-512", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 23963.0, + "subtotal_ns": 23963.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 36526092.5, + "subtotal_ns": 36526092.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2120191.0, + "subtotal_ns": 4240382.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa44", + "group": "mlkem768", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2190132.5, + "p95": 4067842.4, + "min": 1762172.0, + "max": 6986654.0, + "mean": 2457990.3, + "stddev": 771181.5 + }, + "handshakes_per_sec": 456.6, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 8284, + "total": 9810 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 735608.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa65", + "group": "mlkem768", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3150190.5, + "p95": 6366251.0, + "min": 2263057.0, + "max": 11324956.0, + "mean": 3559120.7, + "stddev": 1413137.2 + }, + "handshakes_per_sec": 317.4, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 10702, + "total": 12228 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1152337.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+mldsa87", + "group": "mlkem768", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3755676.5, + "p95": 6723186.8, + "min": 2908368.0, + "max": 13822346.0, + "mean": 4133668.7, + "stddev": 1353324.0 + }, + "handshakes_per_sec": 266.3, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 13978, + "total": 15504 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1543641.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+falcon512", + "group": "mlkem768", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2686768.5, + "p95": 2722156.4, + "min": 2658092.0, + "max": 3830140.0, + "mean": 2699611.0, + "stddev": 87099.4 + }, + "handshakes_per_sec": 372.2, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 4337, + "total": 5863 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 490850.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290017.0, + "subtotal_ns": 290017.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50796.0, + "subtotal_ns": 101592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem768+sphincssha2128fsimple", + "group": "mlkem768", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 42888498.5, + "p95": 43327551.8, + "min": 42419861.0, + "max": 46229576.0, + "mean": 42924984.9, + "stddev": 249524.2 + }, + "handshakes_per_sec": 23.3, + "bytes_on_wire": { + "client_to_server": 1526, + "server_to_client": 36385, + "total": 37911 + }, + "client_hello_bytes": 1446, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40865715.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 29889.0, + "subtotal_ns": 29889.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 31945.0, + "subtotal_ns": 31945.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 37407.0, + "subtotal_ns": 37407.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 36526092.5, + "subtotal_ns": 36526092.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2120191.0, + "subtotal_ns": 4240382.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa44", + "group": "mlkem1024", + "sig_alg": "mldsa44", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2318612.5, + "p95": 4190252.2, + "min": 1884820.0, + "max": 7954091.0, + "mean": 2633992.5, + "stddev": 826031.3 + }, + "handshakes_per_sec": 431.3, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 8764, + "total": 10674 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 783497.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 397739.0, + "subtotal_ns": 397739.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 119314.0, + "subtotal_ns": 238628.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa65", + "group": "mlkem1024", + "sig_alg": "mldsa65", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3212338.0, + "p95": 6426245.9, + "min": 2330447.0, + "max": 12863796.0, + "mean": 3511203.2, + "stddev": 1334231.8 + }, + "handshakes_per_sec": 311.3, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 11182, + "total": 13092 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1200226.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 674172.5, + "subtotal_ns": 674172.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 189462.0, + "subtotal_ns": 378924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+mldsa87", + "group": "mlkem1024", + "sig_alg": "mldsa87", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 3859898.5, + "p95": 7215199.6, + "min": 3014719.0, + "max": 13495180.0, + "mean": 4277507.1, + "stddev": 1455274.5 + }, + "handshakes_per_sec": 259.1, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 14458, + "total": 16368 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 1591530.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 833810.0, + "subtotal_ns": 833810.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 305295.0, + "subtotal_ns": 610590.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+falcon512", + "group": "mlkem1024", + "sig_alg": "falcon512", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 2801933.5, + "p95": 2831129.0, + "min": 2777758.0, + "max": 3769713.0, + "mean": 2813167.6, + "stddev": 80030.7 + }, + "handshakes_per_sec": 356.9, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 4812, + "total": 6722 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 538739.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 290017.0, + "subtotal_ns": 290017.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Falcon-512", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 50796.0, + "subtotal_ns": 101592.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "mlkem1024+sphincssha2128fsimple", + "group": "mlkem1024", + "sig_alg": "sphincssha2128fsimple", + "phase": "phase2", + "implementation": "oqs-provider", + "enabled": true, + "have_oqs_provider": true, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 43768840.5, + "p95": 44819594.5, + "min": 43279205.0, + "max": 47097548.0, + "mean": 43876936.3, + "stddev": 412609.0 + }, + "handshakes_per_sec": 22.8, + "bytes_on_wire": { + "client_to_server": 1910, + "server_to_client": 36865, + "total": 38775 + }, + "client_hello_bytes": 1830, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 40913604.5, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "keygen", + "count": 1, + "median_ns_each": 44093.0, + "subtotal_ns": 44093.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "liboqs", + "operation": "decaps", + "count": 1, + "median_ns_each": 55389.0, + "subtotal_ns": 55389.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "sign", + "count": 1, + "median_ns_each": 36526092.5, + "subtotal_ns": 36526092.5, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "SPHINCS+-SHA2-128f-simple", + "implementation": "liboqs", + "operation": "verify", + "count": 2, + "median_ns_each": 2120191.0, + "subtotal_ns": 4240382.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519+ed25519", + "group": "X25519", + "sig_alg": "ed25519", + "phase": "baseline", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 536459.5, + "p95": 543664.8, + "min": 535163.0, + "max": 695292.0, + "mean": 538853.1, + "stddev": 11557.3 + }, + "handshakes_per_sec": 1864.1, + "bytes_on_wire": { + "client_to_server": 312, + "server_to_client": 824, + "total": 1136 + }, + "client_hello_bytes": 232, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 386404.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21111.0, + "subtotal_ns": 42222.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46851.0, + "subtotal_ns": 93702.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22518.0, + "subtotal_ns": 22518.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 113981.0, + "subtotal_ns": 227962.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ed25519", + "group": "X25519MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 661273.0, + "p95": 668775.8, + "min": 659439.0, + "max": 691569.0, + "mean": 662776.1, + "stddev": 3704.9 + }, + "handshakes_per_sec": 1512.2, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 1912, + "total": 3408 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 487570.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21111.0, + "subtotal_ns": 42222.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46851.0, + "subtotal_ns": 93702.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22518.0, + "subtotal_ns": 22518.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 113981.0, + "subtotal_ns": 227962.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "SecP256r1MLKEM768+ed25519", + "group": "SecP256r1MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 797846.0, + "p95": 805405.7, + "min": 795087.0, + "max": 895624.0, + "mean": 799476.8, + "stddev": 5028.0 + }, + "handshakes_per_sec": 1253.4, + "bytes_on_wire": { + "client_to_server": 1529, + "server_to_client": 1945, + "total": 3474 + }, + "client_hello_bytes": 1449, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 617978.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 26908.0, + "subtotal_ns": 53816.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "secp256r1", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 106258.0, + "subtotal_ns": 212516.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22518.0, + "subtotal_ns": 22518.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 113981.0, + "subtotal_ns": 227962.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ed25519", + "group": "MLKEM512", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ed25519", + "group": "MLKEM768", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 516978.0, + "p95": 524979.8, + "min": 515274.0, + "max": 706902.0, + "mean": 519605.6, + "stddev": 12441.0 + }, + "handshakes_per_sec": 1934.3, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 1880, + "total": 3344 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 351646.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22518.0, + "subtotal_ns": 22518.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 113981.0, + "subtotal_ns": 227962.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ed25519", + "group": "MLKEM1024", + "sig_alg": "ed25519", + "phase": "phase0", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 571032.5, + "p95": 579913.7, + "min": 569089.0, + "max": 750346.0, + "mean": 573783.1, + "stddev": 12331.6 + }, + "handshakes_per_sec": 1751.2, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 2360, + "total": 4208 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 395997.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 43018.0, + "subtotal_ns": 43018.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54851.0, + "subtotal_ns": 54851.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 22518.0, + "subtotal_ns": 22518.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "Ed25519", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 113981.0, + "subtotal_ns": 227962.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-44", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 750003.5, + "p95": 1032728.9, + "min": 684365.0, + "max": 1475823.0, + "mean": 791045.3, + "stddev": 116916.3 + }, + "handshakes_per_sec": 1333.3, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 7930, + "total": 9426 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 527681.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21111.0, + "subtotal_ns": 42222.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46851.0, + "subtotal_ns": 93702.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 155221.0, + "subtotal_ns": 155221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 67685.0, + "subtotal_ns": 135370.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-65", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 959030.0, + "p95": 1380969.8, + "min": 846253.0, + "max": 2220780.0, + "mean": 1014630.8, + "stddev": 182202.8 + }, + "handshakes_per_sec": 1042.7, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 10348, + "total": 11844 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 716642.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21111.0, + "subtotal_ns": 42222.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46851.0, + "subtotal_ns": 93702.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 253628.0, + "subtotal_ns": 253628.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 112962.0, + "subtotal_ns": 225924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+ML-DSA-87", + "group": "X25519MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1241843.0, + "p95": 1701506.6, + "min": 1132399.0, + "max": 2211040.0, + "mean": 1300886.8, + "stddev": 188132.4 + }, + "handshakes_per_sec": 805.3, + "bytes_on_wire": { + "client_to_server": 1496, + "server_to_client": 13624, + "total": 15120 + }, + "client_hello_bytes": 1416, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 975733.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 2, + "median_ns_each": 21111.0, + "subtotal_ns": 42222.0, + "role": "client + server ECDH keyshare generation" + }, + { + "kind": "kem", + "alg": "X25519", + "implementation": "aws-lc-rs", + "operation": "derive", + "count": 2, + "median_ns_each": 46851.0, + "subtotal_ns": 93702.0, + "role": "shared-secret derivation on both sides" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 350757.0, + "subtotal_ns": 350757.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 193943.0, + "subtotal_ns": 387886.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM512+ML-DSA-44", + "group": "MLKEM512", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-65", + "group": "MLKEM512", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM512+ML-DSA-87", + "group": "MLKEM512", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": false, + "have_oqs_provider": false, + "reason": "kex group not supported by rustls 0.23 / aws-lc-rs" + }, + { + "label": "MLKEM768+ML-DSA-44", + "group": "MLKEM768", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 615597.5, + "p95": 861284.2, + "min": 542515.0, + "max": 1778043.0, + "mean": 647628.9, + "stddev": 118515.0 + }, + "handshakes_per_sec": 1624.4, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 7898, + "total": 9362 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 391757.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 155221.0, + "subtotal_ns": 155221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 67685.0, + "subtotal_ns": 135370.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-65", + "group": "MLKEM768", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 806901.5, + "p95": 1198133.1, + "min": 705329.0, + "max": 1907338.0, + "mean": 860083.0, + "stddev": 169286.0 + }, + "handshakes_per_sec": 1239.3, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 10316, + "total": 11780 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 580718.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 253628.0, + "subtotal_ns": 253628.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 112962.0, + "subtotal_ns": 225924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM768+ML-DSA-87", + "group": "MLKEM768", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1102816.0, + "p95": 1504407.2, + "min": 990548.0, + "max": 2084874.0, + "mean": 1153121.8, + "stddev": 174996.3 + }, + "handshakes_per_sec": 906.8, + "bytes_on_wire": { + "client_to_server": 1464, + "server_to_client": 13592, + "total": 15056 + }, + "client_hello_bytes": 1384, + "client_hello_fragmented": false, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 839809.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 28463.0, + "subtotal_ns": 28463.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 33722.0, + "subtotal_ns": 33722.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-768", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 38981.0, + "subtotal_ns": 38981.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 350757.0, + "subtotal_ns": 350757.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 193943.0, + "subtotal_ns": 387886.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-44", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-44", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 661254.5, + "p95": 908650.3, + "min": 596607.0, + "max": 1335028.0, + "mean": 695619.2, + "stddev": 107666.1 + }, + "handshakes_per_sec": 1512.3, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 8378, + "total": 10226 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 436108.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 43018.0, + "subtotal_ns": 43018.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54851.0, + "subtotal_ns": 54851.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 155221.0, + "subtotal_ns": 155221.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-44", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 67685.0, + "subtotal_ns": 135370.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-65", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-65", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 866401.0, + "p95": 1262011.9, + "min": 759087.0, + "max": 2217150.0, + "mean": 916436.8, + "stddev": 175749.7 + }, + "handshakes_per_sec": 1154.2, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 10796, + "total": 12644 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 625069.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 43018.0, + "subtotal_ns": 43018.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54851.0, + "subtotal_ns": 54851.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 253628.0, + "subtotal_ns": 253628.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-65", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 112962.0, + "subtotal_ns": 225924.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "MLKEM1024+ML-DSA-87", + "group": "MLKEM1024", + "sig_alg": "ML-DSA-87", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": true, + "enabled": true, + "have_oqs_provider": false, + "connections": 1000, + "succeeded": 1000, + "handshake_latency_ns": { + "median": 1151251.0, + "p95": 1543202.4, + "min": 1043992.0, + "max": 2241854.0, + "mean": 1197965.3, + "stddev": 173166.0 + }, + "handshakes_per_sec": 868.6, + "bytes_on_wire": { + "client_to_server": 1848, + "server_to_client": 14072, + "total": 15920 + }, + "client_hello_bytes": 1768, + "client_hello_fragmented": true, + "mss_assumed": 1400, + "handshake_primitive_sum": { + "sum_of_medians_ns": 884160.0, + "complete": true, + "components": [ + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "keygen", + "count": 1, + "median_ns_each": 43018.0, + "subtotal_ns": 43018.0, + "role": "client KEM keyshare generation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "encaps", + "count": 1, + "median_ns_each": 47648.0, + "subtotal_ns": 47648.0, + "role": "server encapsulation" + }, + { + "kind": "kem", + "alg": "ML-KEM-1024", + "implementation": "aws-lc-rs", + "operation": "decaps", + "count": 1, + "median_ns_each": 54851.0, + "subtotal_ns": 54851.0, + "role": "client decapsulation" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "sign", + "count": 1, + "median_ns_each": 350757.0, + "subtotal_ns": 350757.0, + "role": "server CertificateVerify signature" + }, + { + "kind": "sig", + "alg": "ML-DSA-87", + "implementation": "aws-lc-rs", + "operation": "verify", + "count": 2, + "median_ns_each": 193943.0, + "subtotal_ns": 387886.0, + "role": "client verifies CertificateVerify + the CA signature over the server certificate" + } + ], + "missing": [], + "note": "sum over the primitive operations one TLS 1.3 handshake performs with this configuration, priced at the per-operation medians from this run's KEM/sig sweep. Derived, not measured (sum of per-operation medians; a derived figure (a sum of medians is not the median of a sum), not a measured latency); excludes KDF/record-layer/X.509-parsing and all protocol overhead \u2014 the gap to handshake_latency_ns.median is exactly that overhead. verify count 2 assumes the client checks the CertificateVerify and the CA signature on the leaf certificate (OpenSSL does not verify the trust anchor's self-signature by default)." + } + }, + { + "label": "X25519MLKEM768+SLH-DSA-SHA2-128f", + "group": "X25519MLKEM768", + "sig_alg": "SLH-DSA-SHA2-128f", + "phase": "phase2", + "implementation": "rustls-awslc", + "unstable_features": false, + "enabled": false, + "have_oqs_provider": false, + "reason": "SLH-DSA is absent from rustls/aws-lc-rs entirely; native OpenSSL cannot negotiate it either (TLS codepoints still draft) - across both production stacks SLH-DSA in TLS exists only in the experimental oqs-provider" + } + ] + } +} \ No newline at end of file From a407ae82fbf09c9901900564f70e0aa4c6ba6ddd Mon Sep 17 00:00:00 2001 From: Marcin Pawlowski Date: Thu, 6 Aug 2026 18:32:03 +0200 Subject: [PATCH 03/11] pqc: publish results into reports/pqc instead of the tool directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A benchmark's output is a report, not part of the harness. Every run now writes its JSON to reports/pqc/results and figures to reports/pqc/figures, alongside a reports/pqc/README.md that records the published dataset, its provenance and the headline migration cost. One resolver decides the location — pqb_results_dir() in setup/lib_platform.sh, mirrored in merge.py and plot.py — so run.sh, the selftest, the container gate and the analysis scripts can never disagree about where results are. PQC_RESULTS_DIR / PQC_FIGURES_DIR override it, which is what a standalone copy on a measurement box needs; the Makefile exports both so `make RESULTS=… run` redirects every target at once, and `make where` prints what will actually be used. Consequences worth noting: * per-run scratch stays in the tool (.work-* moved out of the results directory): the report tree holds finished measurements only * the publish-by-whitelist rule moved with the data, to reports/pqc/results/.gitignore, so ad-hoc local runs still cannot drift into the published set by accident * `make test-fedora` mounts the results tree into the container read-only as a second volume — the hygiene checks need the published set and the schema-1.0.0 fixture * dashboard/data/merged.json deliberately stays in the tool: it is the dashboard's input, fetched by relative path, not a result * the repo-root .gitignore has a bare `lib/` rule that would have swallowed bench/lib/; the tool's .gitignore now negates it Verified on macOS/aarch64: `make test` 21/21 green, and `make merge` reproduces the committed merged.json byte-for-byte from the new location. Co-Authored-By: Claude Opus 5 (1M context) (cherry picked from commit 788bd720467fd126a4c9b9f36e13b75a8431b727) --- reports/pqc/README.md | 92 +++++++++++++++++++ reports/pqc/results/.gitignore | 34 +++++++ .../pqc/results/.gitkeep | 0 .../pqc/results/Mac-20260730T134951Z.json | 0 .../pqc/results/example-macos-smoke.json | 0 .../pqc/results/fedora-20260730T120637Z.json | 0 .../results/mehmetmac-20260624T140033Z.json | 0 .../results/mehmetmac-20260625T220618Z.json | 0 .../results/mehmetmac-20260719T224937Z.json | 0 .../results/rasberrypi5-20260608T223040Z.json | 0 .../results/rasberrypi5-20260614T205226Z.json | 0 .../results/rasberrypi5-20260625T202356Z.json | 0 .../results/rasberrypi5-20260720T143239Z.json | 0 .../results/rasberrypi5-20260730T212145Z.json | 0 .../results/thomas-pi-20260703T083302Z.json | 0 tools/benchmarks/pqc/.gitignore | 60 ++---------- tools/benchmarks/pqc/Makefile | 26 +++++- tools/benchmarks/pqc/README.md | 66 +++++++------ tools/benchmarks/pqc/analyze/merge.py | 20 ++-- tools/benchmarks/pqc/analyze/plot.py | 13 ++- .../benchmarks/pqc/analyze/published_runs.txt | 9 +- tools/benchmarks/pqc/bench/lib/assemble.py | 2 +- tools/benchmarks/pqc/run.sh | 12 ++- tools/benchmarks/pqc/scripts/selftest.sh | 20 ++-- tools/benchmarks/pqc/scripts/test-fedora.sh | 23 ++++- tools/benchmarks/pqc/setup/lib_platform.sh | 18 ++++ 26 files changed, 287 insertions(+), 108 deletions(-) create mode 100644 reports/pqc/README.md create mode 100644 reports/pqc/results/.gitignore rename {tools/benchmarks => reports}/pqc/results/.gitkeep (100%) rename {tools/benchmarks => reports}/pqc/results/Mac-20260730T134951Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/example-macos-smoke.json (100%) rename {tools/benchmarks => reports}/pqc/results/fedora-20260730T120637Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/mehmetmac-20260624T140033Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/mehmetmac-20260625T220618Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/mehmetmac-20260719T224937Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/rasberrypi5-20260608T223040Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/rasberrypi5-20260614T205226Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/rasberrypi5-20260625T202356Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/rasberrypi5-20260720T143239Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/rasberrypi5-20260730T212145Z.json (100%) rename {tools/benchmarks => reports}/pqc/results/thomas-pi-20260703T083302Z.json (100%) diff --git a/reports/pqc/README.md b/reports/pqc/README.md new file mode 100644 index 0000000..42d2eac --- /dev/null +++ b/reports/pqc/README.md @@ -0,0 +1,92 @@ +# Post-quantum cryptography — migration-cost measurements + +*Benchmark: [`pqc`](../../tools/benchmarks/pqc). Reference platform: **Raspberry Pi 5** (Broadcom BCM2712, Cortex-A76, aarch64). All latencies are medians; TLS byte counts are on-the-wire handshake totals.* + +This directory holds the measurement record for the question *what does it cost +to move Logos from the cryptography it uses today — X25519 key exchange and +Ed25519 signatures — to post-quantum candidates?* Every run measures the +classical baseline alongside the PQ candidates on the same machine in the same +pass, so the PQ "tax" is a ratio measured under identical conditions rather than +a comparison across sources. + +Everything the benchmark produces lands here: + +| what | where | produced by | +|---|---|---| +| per-run results (one self-describing JSON per run) | [`results/`](results) | `make run` | +| exported figures | `figures/` | `make figures` | +| written analysis | this directory | by hand, from the above | + +The one deliberate exception is `dashboard/data/merged.json`, which stays in the +tool: it is not a result but the dashboard's input, fetched by a relative path so +the static dashboard stays deployable on its own. `make merge` regenerates it +from the runs in [`results/`](results). + +## Published dataset + +Four runs make up the current published set. Membership is explicit — a run is +published by listing it in +[`analyze/published_runs.txt`](../../tools/benchmarks/pqc/analyze/published_runs.txt) +and un-ignoring it in [`results/.gitignore`](results/.gitignore) — so an ad-hoc +local run can never drift into the dataset by accident. + +| run | machine | OS | duration | baseline-grade | +|---|---|---|---|---| +| `rasberrypi5-20260730T212145Z` | Raspberry Pi 5 Model B Rev 1.1 | Debian 13 (trixie) | 1692 s | **yes** — the reference run | +| `mehmetmac-20260719T224937Z` | Apple M3 | macOS 26.3.1 | 2172 s | no | +| `Mac-20260730T134951Z` | Apple M4 Pro | macOS 26.6 | 1212 s | no | +| `fedora-20260730T120637Z` | Intel Core Ultra 9 285HX | Fedora 44 | 394 s | no | + +Only the Pi 5 run is **baseline-grade**: measured on the reference platform with +the CPU governor at `performance`, pinned to an isolated core, with a thermal +trace showing no throttling. The other three are cross-platform datapoints — +useful for the shape of the results, not for the reference numbers. Each file +stamps its own `is_baseline_grade` flag and the reasons it failed the gate, so +the distinction survives outside this table. + +Earlier runs remain in [`results/`](results) as history. They are retired rather +than deleted: they predate the schema-2.0.0 measurement groups and the SLH-DSA +rename, and one of them +(`rasberrypi5-20260614T205226Z`) is load-bearing as the schema-1.0.0 +compatibility fixture for `make test`. + +## Headline + +On the reference Pi 5, the honest summary is that **post-quantum is not so much +slower as bigger.** + +- **Hybrid key exchange (phase 0, hedging against harvest-now-decrypt-later) + costs ×1.26 in handshake latency and ×2.49 in handshake bytes** — + X25519 + Ed25519 at 1.291 ms / 1518 B versus X25519MLKEM768 + Ed25519 at + 1.633 ms / 3782 B, both on OpenSSL-native. The latency cost is modest; the + size cost is what pushes the handshake past a single packet. +- **The TLS stack matters more than the algorithm.** Across the 14 handshake + cells measured on both stacks, rustls + aws-lc-rs completes the same handshake + **2.1–3.8× faster** than OpenSSL-native — smallest on classical and + hybrid-KEM cells (×2.1–2.5), largest once ML-DSA signatures are in play + (×3.3–3.8). Choosing the implementation is worth more than any single + algorithm choice at this layer. + +The per-algorithm detail — KEM and signature primitives across liboqs, +RustCrypto and aws-lc-rs, and the full three-stack TLS phase matrix — is in the +result files and rendered by the tool's dashboard (`make dashboard`). + +## Reproducing + +From [`tools/benchmarks/pqc`](../../tools/benchmarks/pqc): + +```bash +make check # read-only environment check; prints what to install +make build # vendored liboqs + pinned OpenSSL + oqs-provider + Rust harnesses +make test # ~1-2 min verification gate before spending 30 min measuring +make run # the full benchmark; writes reports/pqc/results/-.json +make merge # fold the published set into the dashboard dataset +make figures # export PNGs into reports/pqc/figures +``` + +`make where` prints the exact results and figures directories the tool will use. +A reference-grade run needs the reference platform and its measurement +conditions — see +[the benchmark's README](../../tools/benchmarks/pqc/README.md#is_baseline_grade) +for what `is_baseline_grade` requires and why a run that misses it is still +worth keeping. diff --git a/reports/pqc/results/.gitignore b/reports/pqc/results/.gitignore new file mode 100644 index 0000000..6b7c7ba --- /dev/null +++ b/reports/pqc/results/.gitignore @@ -0,0 +1,34 @@ +# Results produced by tools/benchmarks/pqc (`make run` writes here). +# +# Local runs are the contributor's own business and are NOT committed by +# default: everything is ignored unless it is explicitly listed below. +# Publishing a run is therefore a deliberate two-line act — un-ignore it here, +# and add it to tools/benchmarks/pqc/analyze/published_runs.txt, which is the +# manifest `make merge` reads. Ad-hoc runs sitting in this directory can never +# leak into the published dashboard dataset by accident. +# +# Full provenance for every file below: ../README.md and published_runs.txt. + +*.json + +# Tiny macOS smoke output shipped as a schema example, not measurement data. +!example-*.json + +# ---- current published set (schema 2.0.0) ---------------------------------- +# Baseline-grade RPi5 reference run (narrowed-sudo runner). +!rasberrypi5-20260730T212145Z.json +# Cross-platform runs: Apple M3, Apple M4 Pro, Fedora 44 x86_64. +!mehmetmac-20260719T224937Z.json +!Mac-20260730T134951Z.json +!fedora-20260730T120637Z.json + +# ---- retired, kept as history ---------------------------------------------- +# rasberrypi5-20260614T205226Z is additionally the schema-1.0.0 COMPATIBILITY +# FIXTURE for `make test` (hygiene check 5) — do not delete it when tidying. +!rasberrypi5-20260608T223040Z.json +!rasberrypi5-20260614T205226Z.json +!rasberrypi5-20260625T202356Z.json +!rasberrypi5-20260720T143239Z.json +!mehmetmac-20260624T140033Z.json +!mehmetmac-20260625T220618Z.json +!thomas-pi-20260703T083302Z.json diff --git a/tools/benchmarks/pqc/results/.gitkeep b/reports/pqc/results/.gitkeep similarity index 100% rename from tools/benchmarks/pqc/results/.gitkeep rename to reports/pqc/results/.gitkeep diff --git a/tools/benchmarks/pqc/results/Mac-20260730T134951Z.json b/reports/pqc/results/Mac-20260730T134951Z.json similarity index 100% rename from tools/benchmarks/pqc/results/Mac-20260730T134951Z.json rename to reports/pqc/results/Mac-20260730T134951Z.json diff --git a/tools/benchmarks/pqc/results/example-macos-smoke.json b/reports/pqc/results/example-macos-smoke.json similarity index 100% rename from tools/benchmarks/pqc/results/example-macos-smoke.json rename to reports/pqc/results/example-macos-smoke.json diff --git a/tools/benchmarks/pqc/results/fedora-20260730T120637Z.json b/reports/pqc/results/fedora-20260730T120637Z.json similarity index 100% rename from tools/benchmarks/pqc/results/fedora-20260730T120637Z.json rename to reports/pqc/results/fedora-20260730T120637Z.json diff --git a/tools/benchmarks/pqc/results/mehmetmac-20260624T140033Z.json b/reports/pqc/results/mehmetmac-20260624T140033Z.json similarity index 100% rename from tools/benchmarks/pqc/results/mehmetmac-20260624T140033Z.json rename to reports/pqc/results/mehmetmac-20260624T140033Z.json diff --git a/tools/benchmarks/pqc/results/mehmetmac-20260625T220618Z.json b/reports/pqc/results/mehmetmac-20260625T220618Z.json similarity index 100% rename from tools/benchmarks/pqc/results/mehmetmac-20260625T220618Z.json rename to reports/pqc/results/mehmetmac-20260625T220618Z.json diff --git a/tools/benchmarks/pqc/results/mehmetmac-20260719T224937Z.json b/reports/pqc/results/mehmetmac-20260719T224937Z.json similarity index 100% rename from tools/benchmarks/pqc/results/mehmetmac-20260719T224937Z.json rename to reports/pqc/results/mehmetmac-20260719T224937Z.json diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260608T223040Z.json b/reports/pqc/results/rasberrypi5-20260608T223040Z.json similarity index 100% rename from tools/benchmarks/pqc/results/rasberrypi5-20260608T223040Z.json rename to reports/pqc/results/rasberrypi5-20260608T223040Z.json diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260614T205226Z.json b/reports/pqc/results/rasberrypi5-20260614T205226Z.json similarity index 100% rename from tools/benchmarks/pqc/results/rasberrypi5-20260614T205226Z.json rename to reports/pqc/results/rasberrypi5-20260614T205226Z.json diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260625T202356Z.json b/reports/pqc/results/rasberrypi5-20260625T202356Z.json similarity index 100% rename from tools/benchmarks/pqc/results/rasberrypi5-20260625T202356Z.json rename to reports/pqc/results/rasberrypi5-20260625T202356Z.json diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260720T143239Z.json b/reports/pqc/results/rasberrypi5-20260720T143239Z.json similarity index 100% rename from tools/benchmarks/pqc/results/rasberrypi5-20260720T143239Z.json rename to reports/pqc/results/rasberrypi5-20260720T143239Z.json diff --git a/tools/benchmarks/pqc/results/rasberrypi5-20260730T212145Z.json b/reports/pqc/results/rasberrypi5-20260730T212145Z.json similarity index 100% rename from tools/benchmarks/pqc/results/rasberrypi5-20260730T212145Z.json rename to reports/pqc/results/rasberrypi5-20260730T212145Z.json diff --git a/tools/benchmarks/pqc/results/thomas-pi-20260703T083302Z.json b/reports/pqc/results/thomas-pi-20260703T083302Z.json similarity index 100% rename from tools/benchmarks/pqc/results/thomas-pi-20260703T083302Z.json rename to reports/pqc/results/thomas-pi-20260703T083302Z.json diff --git a/tools/benchmarks/pqc/.gitignore b/tools/benchmarks/pqc/.gitignore index a0c6d6c..40e16b5 100644 --- a/tools/benchmarks/pqc/.gitignore +++ b/tools/benchmarks/pqc/.gitignore @@ -11,31 +11,18 @@ bench/tls/bench_tls # Generated TLS material bench/tls/pki/ -# Per-run scratch dirs (intermediate artifacts; never committed) -results/.work-*/ +# Per-run scratch dirs (intermediate artifacts; never committed). Results +# themselves are NOT here — they land in reports/pqc/results/, which carries +# its own ignore rules for the published set. +/.work-*/ -# Local results are kept by users, not committed by default. -# Comment the next line out if you DO want to commit your machine's results. -results/*.json -!results/example-*.json -# Published baseline-grade RPi5 run (auto-calibrated full run) -!results/rasberrypi5-20260608T223040Z.json -# Baseline-grade RPi5 run adding the code-based + conservative-LWE KEMs -# (Classic McEliece + FrodoKEM); kept as its own file, baseline above untouched. -!results/rasberrypi5-20260614T205226Z.json -# Mac (Apple M3) cross-platform run: apple-m3-optimized from-source liboqs, -# KEM/sig reps=5 (same auto-calibrate regime as the Pi). NOT baseline-grade -# (unpinned, no governor) by design; provenance self-stamped in the JSON. Kept -# as its own file for the tuned-vs-portable comparison; Pi baselines untouched. -!results/mehmetmac-20260624T140033Z.json -# Consolidated baseline-grade RPi5 run (KEM + sig + TLS in one pass); supersedes -# the two older split files (0614 KEM/sig + 0608 TLS) as the single Pi baseline. -!results/rasberrypi5-20260625T202356Z.json +# The repo-root .gitignore has a bare `lib/` rule (Python packaging boilerplate) +# that would otherwise swallow the harness's own bench/lib/ package. +!/bench/lib/ -# Merged dataset consumed by the dashboard. Tracked: ships the published RPi5 -# baseline so a fresh clone renders charts out-of-the-box. Contributors who -# re-merge overwrite it locally (modified file they can commit or discard). -analyze/png/ +# Rust harness build trees (Cargo.lock IS committed) +bench/rust/target/ +bench/rust-tls/target/ # Python venv (matplotlib lives here; system python stays clean) analyze/.venv/ @@ -47,30 +34,3 @@ analyze/.venv/ __pycache__/ *.pyc .DS_Store -# Consolidated Mac (Apple M3) run in the published Logos snapshot; cited by the -# companion document's provenance section (supersedes 20260624T140033Z, which -# was KEM/sig only — no TLS cells). -!results/mehmetmac-20260625T220618Z.json -# Community RPi5 run cited by the companion document (file to be added). -!results/thomas-pi-20260703T083302Z.json - -# Rust harness build tree (bench/rust — Cargo.lock IS committed) -bench/rust/target/ - -# rustls TLS harness build tree (bench/rust-tls — Cargo.lock IS committed) -bench/rust-tls/target/ -# Consolidated schema-2.0.0 Mac (Apple M3) run: all four measurement groups -# (liboqs, rustcrypto+dalek, aws-lc-rs pricing rows, three-stack TLS phase -# matrix), apple-m3 tuned build. Not yet in published_runs.txt — the published -# set flips wholesale once the Pi companion run exists. -!results/mehmetmac-20260719T224937Z.json -# Consolidated schema-2.0.0 RPi5 baseline run (whitelisted here so snapshot -# copies of this .gitignore don't silently exclude the published baseline; -# the file was originally force-added on the Pi). -!results/rasberrypi5-20260720T143239Z.json -!results/rasberrypi5-20260730T212145Z.json - -# Published 2026-07-30: Apple M4 Pro + Fedora 44 x86_64 cross-platform runs -# (see analyze/published_runs.txt for provenance) -!results/Mac-20260730T134951Z.json -!results/fedora-20260730T120637Z.json diff --git a/tools/benchmarks/pqc/Makefile b/tools/benchmarks/pqc/Makefile index 0aba2fa..ac2e43e 100644 --- a/tools/benchmarks/pqc/Makefile +++ b/tools/benchmarks/pqc/Makefile @@ -1,5 +1,7 @@ # ============================================================================= -# pqc-bench — executable documentation. `make help` lists everything. +# pqc — post-quantum cryptography benchmark. Executable documentation: +# `make help` lists everything, and these targets are the ONLY supported way to +# check, build, test and run it on any platform (including a Raspberry Pi 5). # # Design rules (docs/history behind them: the cold-read round): # * `check` is READ-ONLY; `deps` is the only target that installs anything. @@ -7,16 +9,31 @@ # (an upgraded OpenSSL or deleted toolchain always triggers a rebuild). # * `smoke`/`run` depend on `build` only: `test`'s hygiene checks must never # block a 30-minute measurement. Run `make test` before trusting results. -# * All test artifacts live in /tmp — never results/ or bench/tls/pki/. +# * All test artifacts live in /tmp — never in the results tree or +# bench/tls/pki/. +# * Results are NOT kept next to the tool: every run writes its JSON to +# $(RESULTS) and figures to $(FIGURES), so measurements live with the rest +# of the reports. PQC_RESULTS_DIR / PQC_FIGURES_DIR override both. # ============================================================================= SHELL := /bin/bash .DEFAULT_GOAL := help -.PHONY: help check deps build test test-fedora smoke run merge dashboard clean distclean +RESULTS ?= $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../../../reports/pqc/results) +FIGURES ?= $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../../../reports/pqc/figures) +# Exported so run.sh, the selftest and the container gate all resolve the same +# directories — `make RESULTS=/somewhere run` redirects every target at once. +export PQC_RESULTS_DIR := $(RESULTS) +export PQC_FIGURES_DIR := $(FIGURES) + +.PHONY: help check deps build test test-fedora smoke run merge figures dashboard where clean distclean help: ## list targets @grep -E '^[a-z-]+:.*##' $(MAKEFILE_LIST) | awk -F':.*## ' '{printf " make %-10s %s\n", $$1, $$2}' +where: ## print where this tool reads and writes results and figures + @echo "results: $(RESULTS)" + @echo "figures: $(FIGURES)" + check: ## verify the environment (read-only; prints per-platform install hints) @scripts/check-env.sh @@ -41,6 +58,9 @@ run: build ## full benchmark run (~30 min Pi / ~36 min M3); sudo handled per-pla merge: ## regenerate dashboard/data/merged.json from the published_runs manifest python3 analyze/merge.py +figures: ## export PNG figures from the merged dataset into reports/pqc/figures + python3 analyze/plot.py dashboard/data/merged.json + dashboard: ## serve the dashboard over HTTP (does NOT touch merged.json; see 'merge') @echo "serving http://localhost:8000 (Ctrl-C to stop)" @cd dashboard && python3 -m http.server 8000 diff --git a/tools/benchmarks/pqc/README.md b/tools/benchmarks/pqc/README.md index 2536bef..3b60f5e 100644 --- a/tools/benchmarks/pqc/README.md +++ b/tools/benchmarks/pqc/README.md @@ -129,7 +129,7 @@ measured handshake latency is the protocol overhead. ## Project layout ``` -pqc-bench/ +tools/benchmarks/pqc/ setup/ build + pin liboqs, OpenSSL 3.5+, oqs-provider (versions.env / versions.lock) bench/kem_sig/ bench_pq.c primitive KEM/sig harness (liboqs + OpenSSL EVP baselines) bench/tls/ bench_tls.c in-process TLS 1.3 handshake harness (OpenSSL API; @@ -138,14 +138,25 @@ pqc-bench/ bench/rust/ pqb-rust pure-Rust (RustCrypto) primitive harness + dalek anchors bench/rust-tls/ pqb-rust-tls rustls + aws-lc-rs TLS harness + aws-lc-rs pricing rows bench/lib/ assemble.py / merge helpers / miniyaml.py (zero-dep YAML) - results/ results/-.json (one per run, full metadata) analyze/ merge.py (combine machines) + plot.py (matplotlib PNGs, optional venv) dashboard/ static HTML/JS (Chart.js) — no backend, GitHub-Pages deployable run.sh governor + taskset + thermal wrapper + orchestrator config.yaml candidate lists (extend here) Dockerfile reproducible Debian-aarch64 build + +reports/pqc/ + results/ -.json (one per run, full metadata) + figures/ exported PNGs (make figures) + README.md the measurement record: published dataset, provenance, headline ``` +**Results do not live next to the tool.** Every run writes its JSON to +`reports/pqc/results/` and figures to `reports/pqc/figures/`, so measurements sit +with the rest of the reports instead of inside the harness that produced them. +`make where` prints both paths; `PQC_RESULTS_DIR` / `PQC_FIGURES_DIR` (or +`make RESULTS=… run`) override them, which is what you want when running from a +standalone copy of this directory rather than a checkout of the research repo. + --- ## Quick start @@ -216,7 +227,7 @@ root for exactly one step — writing `performance` into the sysfs CPU-governor files — so on Linux they cache sudo credentials once up front (`sudo -v`) and only that step escalates (`sudo -n`); the measurement itself, including the cargo builds and all result files, runs as your user. (The old whole-run sudo -design left root-owned `results/.work-*` and `target/` artifacts behind and +design left root-owned `.work-*` and `target/` artifacts behind and needed a fragile `sudo env RUSTUP_HOME=…` workaround for cargo — all gone.) On macOS no escalation of any kind is used. `NOSUDO=1 make run` skips the sudo attempt and honestly records the governor demerit. `build`'s skip logic uses live checks (artifacts + `openssl version` @@ -523,15 +534,19 @@ anything your liboqs build doesn't enable (and says so). ## Output & analysis -- `results/-.json` — one self-describing file per run. -- `analyze/merge.py` — with **no arguments**, merges the **published set** - pinned in `analyze/published_runs.txt` into `dashboard/data/merged.json` - (explicit manifest, so ad-hoc dev runs in `results/` never leak into the - published dataset); pass explicit files/globs for an ad-hoc merge. Keeps - each run distinct; never mixes baseline with smoke. -- `analyze/plot.py` — matplotlib PNGs for papers (optional; install into - `analyze/.venv` via `analyze/requirements.txt` to keep system python clean — - it gracefully skips if matplotlib is absent). +- `reports/pqc/results/-.json` — one self-describing file + per run. `make where` prints the directory. +- `analyze/merge.py` (`make merge`) — with **no arguments**, merges the + **published set** pinned in `analyze/published_runs.txt` into + `dashboard/data/merged.json` (explicit manifest, so ad-hoc dev runs in the + results directory never leak into the published dataset); pass explicit + files/globs for an ad-hoc merge. Keeps each run distinct; never mixes baseline + with smoke. `merged.json` is the dashboard's input, not a result, which is why + it stays in the tool. +- `analyze/plot.py` (`make figures`) — matplotlib PNGs for papers, written to + `reports/pqc/figures/` (optional; install into `analyze/.venv` via + `analyze/requirements.txt` to keep system python clean — it gracefully skips + if matplotlib is absent). - `dashboard/` — static, no-backend dashboard (see `dashboard/README.md`): the TLS migration-phase view (Pi and Mac side by side, latency + bytes with ×multipliers), the full three-stack handshake matrix, cross-implementation @@ -565,9 +580,9 @@ For your numbers to count as baseline-grade, the run must satisfy the extra algorithms simply add columns.) ```bash -git clone && cd pqc-bench +cd tools/benchmarks/pqc make check && make build && make test -make run # sudo (with the required rustup env) is handled for you +make run # privilege for the governor step is handled for you ``` A full run takes ~30 min on a Pi 5 (hash-based signing dominates). To check the @@ -580,7 +595,7 @@ When the run finishes, the summary prints `baseline-grade (RPi5): True`. Verify in the JSON too: ```bash -f=$(ls -t results/*.json | head -1) +f=$(ls -t "$(make -s where | awk '/^results:/{print $2}')"/*.json | head -1) python3 -c "import json;d=json.load(open('$f'));print('baseline_grade:',d['is_baseline_grade']);\ print('reasons:',d['baseline_grade_reasons']);\ print('throttled:',d['thermal_trace']['throttling_detected']);\ @@ -593,21 +608,20 @@ you what to fix (usually cooling/PSU/governor) — fix and re-run. ### 3. Submit it -Your `results/-.json` is fully self-describing (host model, +Your `reports/pqc/results/-.json` is fully self-describing (host model, kernel, OS, governor, clock/temp trace, compiler + liboqs/oqs-provider/OpenSSL commits, build flags). It contains your **hostname** and Pi model and nothing else identifying — if you'd rather not share the hostname, prepend `HOSTNAME=mypi5` to the sudo run line, or just rename the file before submitting. -`results/*.json` is git-ignored by default (so you never accidentally commit -local experiments), so add yours explicitly: +Result files are git-ignored by default (so you never accidentally commit local +experiments), so add yours explicitly: ```bash git checkout -b results/-pi5 -git add -f results/-.json -git commit -m "results: RPi5 baseline from " -# push to your fork and open a PR +git add -f reports/pqc/results/-.json +git commit -m "reports/pqc: RPi5 baseline from " ``` **PR checklist** (maintainers will look for these): @@ -624,13 +638,13 @@ git commit -m "results: RPi5 baseline from " groups are missing, revisit the sudo env line above - [ ] unmodified candidate list (or extensions noted in the PR description) -Once merged, your file joins `results/` and gets a line in -`analyze/published_runs.txt` (the explicit manifest of published runs); anyone -can then regenerate the aggregated dataset and dashboard with -`python3 analyze/merge.py`. The dashboard's run selector will then include +Once merged, your file joins `reports/pqc/results/` and gets a line in +`analyze/published_runs.txt` (the explicit manifest of published runs) and in +that directory's `.gitignore`; anyone can then regenerate the aggregated dataset +and dashboard with `make merge`. The dashboard's run selector will then include your Pi alongside everyone else's. -> Prefer not to use GitHub? Open an issue and attach the JSON file instead — a +> Prefer not to open a PR? Open an issue and attach the JSON file instead — a > maintainer will add it. --- diff --git a/tools/benchmarks/pqc/analyze/merge.py b/tools/benchmarks/pqc/analyze/merge.py index ff70a0a..5cb9acd 100644 --- a/tools/benchmarks/pqc/analyze/merge.py +++ b/tools/benchmarks/pqc/analyze/merge.py @@ -1,15 +1,20 @@ #!/usr/bin/env python3 -"""merge.py — merge many results/-.json files into one dataset the +"""merge.py — merge many -.json result files into one dataset the dashboard (and PNG export) consume. python3 analyze/merge.py # merge the PUBLISHED set (see below) - python3 analyze/merge.py results/*.json ... # merge an explicit ad-hoc set + python3 analyze/merge.py ... # merge an explicit ad-hoc set + +Results live in the report tree, reports/pqc/results/, not next to the tool; +manifest entries are resolved relative to it. PQC_RESULTS_DIR overrides the +location (it must match what run.sh used — see pqb_results_dir in +setup/lib_platform.sh). With no inputs, the file list comes from analyze/published_runs.txt — the explicit, reviewed manifest of which results files feed the published dashboard -dataset. That keeps ad-hoc dev runs sitting in results/ from silently leaking -into dashboard/data/merged.json: getting a run published is an edit to the -manifest, not an accident of globbing. +dataset. That keeps ad-hoc dev runs sitting in the results directory from +silently leaking into dashboard/data/merged.json: getting a run published is an +edit to the manifest, not an accident of globbing. The merged file keeps every run as a separate record (so multiple machines / repetitions can be compared) plus a flat index for quick charting. It never @@ -36,6 +41,9 @@ HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(HERE) MANIFEST = os.path.join(HERE, "published_runs.txt") +# Keep in sync with pqb_results_dir() in setup/lib_platform.sh. +RESULTS = os.environ.get("PQC_RESULTS_DIR") or os.path.normpath( + os.path.join(ROOT, "..", "..", "..", "reports", "pqc", "results")) PQ_KEM_TOKENS = ("mlkem", "kyber", "frodo", "hqc", "bike", "ntru", "mceliece") CLASSICAL_SIG_PREFIXES = ("ed25519", "ed448", "ecdsa", "rsa") @@ -77,7 +85,7 @@ def manifest_paths(): line = line.strip() if not line or line.startswith("#"): continue - p = line if os.path.isabs(line) else os.path.join(ROOT, "results", line) + p = line if os.path.isabs(line) else os.path.join(RESULTS, line) if os.path.isfile(p): paths.append(p) else: diff --git a/tools/benchmarks/pqc/analyze/plot.py b/tools/benchmarks/pqc/analyze/plot.py index a1f7715..99490c9 100644 --- a/tools/benchmarks/pqc/analyze/plot.py +++ b/tools/benchmarks/pqc/analyze/plot.py @@ -1,7 +1,10 @@ #!/usr/bin/env python3 """plot.py — export publication-ready PNGs from a merged dataset. - python3 analyze/plot.py dashboard/data/merged.json -o analyze/png + python3 analyze/plot.py dashboard/data/merged.json + +Figures land next to the results they summarise, in reports/pqc/figures (-o +overrides). matplotlib is an OPTIONAL dependency. If it is not installed this prints a clear hint and exits 0 (the HTML dashboard remains the primary, dependency-free view). @@ -29,6 +32,12 @@ " (the HTML dashboard works without it)", file=sys.stderr) sys.exit(0) +# Figures belong with the results, in the report tree — not in the tool. +# Keep the relative hop in sync with pqb_results_dir() in setup/lib_platform.sh. +DEFAULT_OUTDIR = os.environ.get("PQC_FIGURES_DIR") or os.path.normpath( + os.path.join(os.path.dirname(os.path.abspath(__file__)), + "..", "..", "..", "..", "reports", "pqc", "figures")) + def median_ms(ns): return (ns or 0) / 1e6 @@ -126,7 +135,7 @@ def tls_bar(tls_rows, outpath): def main(): ap = argparse.ArgumentParser() ap.add_argument("merged") - ap.add_argument("-o", "--outdir", default="analyze/png") + ap.add_argument("-o", "--outdir", default=DEFAULT_OUTDIR) ap.add_argument("--include-smoke", action="store_true") args = ap.parse_args() diff --git a/tools/benchmarks/pqc/analyze/published_runs.txt b/tools/benchmarks/pqc/analyze/published_runs.txt index aee216b..53eeb9d 100644 --- a/tools/benchmarks/pqc/analyze/published_runs.txt +++ b/tools/benchmarks/pqc/analyze/published_runs.txt @@ -2,10 +2,11 @@ # dashboard/data/merged.json when analyze/merge.py runs without arguments. # # Membership criterion: the file is in the published Logos snapshot and cited -# by the companion document's provenance section — NOT merely git-tracked here. -# Paths are relative to results/. Publishing a new run = adding a line here -# (and un-ignoring the file in .gitignore); dev/smoke runs sitting in results/ -# never leak into the published dataset by accident. +# by the companion document's provenance section — NOT merely git-tracked. +# Paths are relative to the results directory, reports/pqc/results. Publishing +# a new run = adding a line here AND un-ignoring the file in that directory's +# .gitignore; dev/smoke runs sitting next to it never leak into the published +# dataset by accident. # # ---- current generation (schema 2.0.0: four measurement groups, three-stack # ---- TLS phase matrix, SLH-DSA + SPHINCS+ side by side, Frodo AES+SHAKE) ---- diff --git a/tools/benchmarks/pqc/bench/lib/assemble.py b/tools/benchmarks/pqc/bench/lib/assemble.py index e368bb6..81439bd 100644 --- a/tools/benchmarks/pqc/bench/lib/assemble.py +++ b/tools/benchmarks/pqc/bench/lib/assemble.py @@ -9,7 +9,7 @@ --kemsig kemsig.jsonl one JSON object per algorithm from bench_pq --tls tls.json output of the TLS harness (optional) --thermal thermal.csv epoch_s,arm_clock_hz,temp_c,throttled_hex samples - --out results/-.json + --out reports/pqc/results/-.json The single most important output field is `is_baseline_grade`: true ONLY on a real RPi5 with performance governor, core pinning, A76-targeted flags, and no diff --git a/tools/benchmarks/pqc/run.sh b/tools/benchmarks/pqc/run.sh index c8fe6a9..12c097f 100755 --- a/tools/benchmarks/pqc/run.sh +++ b/tools/benchmarks/pqc/run.sh @@ -97,11 +97,15 @@ fi BENCH_CORE="${BENCH_CORE:-3}" export PQB_BENCH_CORE="$BENCH_CORE" -# ---- work directory -------------------------------------------------------- +# ---- work + results directories -------------------------------------------- +# Scratch stays inside the tool; only the finished JSON is published, into +# reports/pqc/results (see pqb_results_dir — PQC_RESULTS_DIR overrides). HOST="$(pqb_resolve_hostname)" TS="$(date -u +%Y%m%dT%H%M%SZ)" -WORK="$ROOT/results/.work-$HOST-$TS" -mkdir -p "$WORK" "$ROOT/results" +WORK="$ROOT/.work-$HOST-$TS" +RESULTS="$(pqb_results_dir "$ROOT")" +mkdir -p "$WORK" "$RESULTS" +RESULTS="$(cd "$RESULTS" && pwd)" KEMSIG_OUT="$WORK/kemsig.jsonl"; : > "$KEMSIG_OUT" TLS_OUT="$WORK/tls.json" RUST_TLS_PROV="" # set when the TLS layer runs (rustls provenance path) @@ -346,7 +350,7 @@ collect_host_facts() { collect_host_facts # ---- assemble final results JSON ------------------------------------------- -OUT="$ROOT/results/${HOST}-${TS}.json" +OUT="$RESULTS/${HOST}-${TS}.json" python3 "$ROOT/bench/lib/assemble.py" \ --meta "$META" --lock "$LOCK" --features "$FEATURES" \ --kemsig "$KEMSIG_OUT" ${TLS_OUT:+--tls "$TLS_OUT"} \ diff --git a/tools/benchmarks/pqc/scripts/selftest.sh b/tools/benchmarks/pqc/scripts/selftest.sh index 87612a2..82a3c92 100755 --- a/tools/benchmarks/pqc/scripts/selftest.sh +++ b/tools/benchmarks/pqc/scripts/selftest.sh @@ -12,16 +12,21 @@ # hygiene failure must never block a 30-minute measurement run. # # EVERYTHING this script produces lives under one mktemp dir: it never writes -# into results/ or bench/tls/pki/ (a test must not be able to leak into the -# published set or clobber certs a real run depends on). +# into the results directory or bench/tls/pki/ (a test must not be able to leak +# into the published set or clobber certs a real run depends on). # -# Fixture note: hygiene test 5 reads results/rasberrypi5-20260614T205226Z.json -# as the schema-1.0.0 COMPATIBILITY FIXTURE (see analyze/published_runs.txt) — -# retired from the published set, but load-bearing here; do not delete it. +# Fixture note: hygiene test 5 reads rasberrypi5-20260614T205226Z.json from the +# results directory as the schema-1.0.0 COMPATIBILITY FIXTURE (see +# analyze/published_runs.txt) — retired from the published set, but +# load-bearing here; do not delete it. # ============================================================================= set -uo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$HERE" +# shellcheck source=setup/lib_platform.sh +source "$HERE/setup/lib_platform.sh" +RESULTS="$(pqb_results_dir "$HERE")" +export PQC_RESULTS_DIR="$RESULTS" # merge.py must resolve the same directory LOCK="$HERE/setup/versions.lock" # shellcheck disable=SC1090 [ -f "$LOCK" ] && source "$LOCK" @@ -199,7 +204,7 @@ for c in cells: # covered cells must have complete, per-stack-priced sums PY echo "== hygiene 5: schema-1.0.0 compatibility fixture through merge.py ==" -FIX=results/rasberrypi5-20260614T205226Z.json +FIX="$RESULTS/rasberrypi5-20260614T205226Z.json" if [ -f "$FIX" ]; then python3 analyze/merge.py "$FIX" -o "$T/merged_v1.json" >/dev/null 2>&1 python3 - "$FIX" "$T/merged_v1.json" <<'PY' && pass "v1 fixture: rows preserved, implementation/phase/totals injected" || warnf "v1 compatibility regressed" @@ -219,9 +224,10 @@ fi echo "== hygiene 6: published_runs manifest vs disk vs committed merged.json ==" python3 - <<'PY' && pass "manifest entries exist; merged.json matches the published set" || warnf "manifest/merged.json drift — re-run 'make merge'" import json,os +results=os.environ["PQC_RESULTS_DIR"] entries=[l.strip() for l in open("analyze/published_runs.txt") if l.strip() and not l.startswith("#")] -missing=[e for e in entries if not os.path.isfile("results/"+e)] +missing=[e for e in entries if not os.path.isfile(os.path.join(results,e))] assert not missing, f"missing on disk: {missing}" m=json.load(open("dashboard/data/merged.json")) assert sorted(r["source_file"] for r in m["runs"])==sorted(entries), "merged.json != manifest" diff --git a/tools/benchmarks/pqc/scripts/test-fedora.sh b/tools/benchmarks/pqc/scripts/test-fedora.sh index d5cc958..b957960 100755 --- a/tools/benchmarks/pqc/scripts/test-fedora.sh +++ b/tools/benchmarks/pqc/scripts/test-fedora.sh @@ -10,8 +10,9 @@ # is exactly the machine shape that has broken in the field). # # WHAT THIS DOES NOT COVER: measurements. Timings inside a container/VM are -# meaningless and nothing produced here is a benchmark result; runs are -# NOSUDO and land in the container's copy, never in this tree. On Apple +# meaningless and nothing produced here is a benchmark result; runs are NOSUDO +# and land in the container's own copy of the results tree, never in this +# checkout (both host mounts are read-only). On Apple # Silicon the container is aarch64 Fedora (lib64 reproduces natively); # ARCH=amd64 forces x86_64 under emulation for compile-and-run checks. # @@ -34,20 +35,32 @@ if [ "${SMOKE:-0}" = "1" ]; then SMOKE_CMD='echo "===== make smoke (NOSUDO, container) =====" && NOSUDO=1 make smoke' fi -echo "[test-fedora] engine=$ENGINE image=fedora:42 ${ARCH:+arch=$ARCH }(source tree mounted read-only)" +# The results tree lives outside the tool (reports/pqc/results), so it is +# mounted separately: the hygiene checks read the published set and the v1 +# compatibility fixture from it. Both mounts are read-only and the container +# copies both, so nothing it runs can write into this checkout. +# shellcheck source=setup/lib_platform.sh +source "$HERE/setup/lib_platform.sh" +RESULTS_HOST="$(pqb_results_dir "$HERE")" +[ -d "$RESULTS_HOST" ] || { echo "results tree not found at $RESULTS_HOST — set PQC_RESULTS_DIR" >&2; exit 1; } +RESULTS_HOST="$(cd "$RESULTS_HOST" && pwd)" + +echo "[test-fedora] engine=$ENGINE image=fedora:42 ${ARCH:+arch=$ARCH }(source + results trees mounted read-only)" # shellcheck disable=SC2086 -"$ENGINE" run --rm $PLATFORM_ARG -v "$HERE":/src:ro fedora:42 bash -c ' +"$ENGINE" run --rm $PLATFORM_ARG -v "$HERE":/src:ro -v "$RESULTS_HOST":/src-results:ro fedora:42 bash -c ' set -euo pipefail echo "== $(grep PRETTY /etc/os-release | cut -d= -f2 | tr -d \") $(uname -m) ==" dnf install -y -q gcc gcc-c++ make cmake ninja-build git python3 perl \ openssl openssl-devel pkgconf-pkg-config util-linux rsync # pristine copy: never build into the mounted host tree rsync -a --exclude vendor/ --exclude "bench/rust/target/" \ - --exclude "bench/rust-tls/target/" --exclude "results/.work-*" \ + --exclude "bench/rust-tls/target/" --exclude ".work-*" \ --exclude "setup/versions.lock" \ --exclude "bench/kem_sig/bench_pq" --exclude "bench/tls/bench_tls" \ --exclude "bench/tls/pki/" --exclude "*.o" \ /src/ /work/ + rsync -a --exclude ".work-*" /src-results/ /work-results/ + export PQC_RESULTS_DIR=/work-results cd /work make check make build diff --git a/tools/benchmarks/pqc/setup/lib_platform.sh b/tools/benchmarks/pqc/setup/lib_platform.sh index f4a8a5f..c77bc7f 100644 --- a/tools/benchmarks/pqc/setup/lib_platform.sh +++ b/tools/benchmarks/pqc/setup/lib_platform.sh @@ -11,6 +11,24 @@ # pretends the action happened. # ============================================================================= +# ---- results location ------------------------------------------------------ +# Every run's JSON lands in the research repo's report tree, not next to the +# tool: tools/benchmarks/pqc/ -> reports/pqc/results/. One resolver, so run.sh, +# the selftest, merge.py and plot.py can never disagree about where results are. +# +# PQC_RESULTS_DIR overrides it — needed wherever the tool is used outside a +# checkout of this repo (the Fedora container copy, a standalone clone on a +# measurement box). Set it and the tool never looks at the default. +# +# $1: the tool root (the directory holding run.sh). +pqb_results_dir() { + if [ -n "${PQC_RESULTS_DIR:-}" ]; then + printf '%s\n' "$PQC_RESULTS_DIR" + return 0 + fi + printf '%s\n' "$1/../../../reports/pqc/results" +} + # ---- platform detection ---------------------------------------------------- # Sets: PQB_OS (macos|linux), PQB_ARCH, PQB_IS_RPI (1|0), PQB_RPI_MODEL pqb_detect_platform() { From 6bdaf90fdd841cf2d3cdc6b4f035450d6cd69397 Mon Sep 17 00:00:00 2001 From: Marcin Pawlowski Date: Thu, 6 Aug 2026 18:35:33 +0200 Subject: [PATCH 04/11] pqc: drop the Raspberry Pi how-to; the Makefile is the how-to MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RUNNING-ON-YOUR-RPI5.md walked through clone/check/build/run as prose, which is exactly what `make check|build|test|run` already do — so it could only ever drift out of date, and it had: it still named the repo pq-bench-rpi5 and described the pre-narrowed-sudo run. Deleted rather than repaired. What it carried that the targets genuinely cannot — the physical measurement conditions the baseline-grade gate checks (active cooling, the 27 W PSU), the Debian 13 / OpenSSL 3.5 note that spares a source build, and the advice to build inside tmux — is folded into the README's Raspberry Pi section, which now points at the contribution gate instead of a parallel walkthrough. Also completes the rename to `pqc`: the tool is a benchmark, not a proof-of-concept implementation, and it no longer carries a name that pins it to one board. The remaining pq-bench-rpi5 strings in the config, dashboard and Cargo manifests are gone. Internal `pqb_` shell helpers and the `pqb-rust*` binary names are left alone deliberately — they are private to the harness, and renaming them would churn the build and test paths without changing anything a reader sees. Verified: `make test` 21/21 green after the rename. Co-Authored-By: Claude Opus 5 (1M context) (cherry picked from commit bb259ff6e9389deca419e7aaad8dd8ed8dd05868) --- tools/benchmarks/pqc/Dockerfile | 6 +- tools/benchmarks/pqc/README.md | 39 ++-- tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md | 184 ------------------ .../benchmarks/pqc/bench/rust-tls/Cargo.toml | 2 +- tools/benchmarks/pqc/bench/rust/Cargo.toml | 2 +- tools/benchmarks/pqc/config.yaml | 2 +- tools/benchmarks/pqc/dashboard/app.js | 2 +- tools/benchmarks/pqc/dashboard/index.html | 2 +- 8 files changed, 36 insertions(+), 203 deletions(-) delete mode 100644 tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md diff --git a/tools/benchmarks/pqc/Dockerfile b/tools/benchmarks/pqc/Dockerfile index a7b99d8..c6216f6 100644 --- a/tools/benchmarks/pqc/Dockerfile +++ b/tools/benchmarks/pqc/Dockerfile @@ -5,12 +5,12 @@ # COVERAGE NOTE: C toolchain ONLY (liboqs / OpenSSL / oqs-provider). This image # installs no Rust, so the RustCrypto (bench/rust) and rustls (bench/rust-tls) # measurement groups are not built here, and the image has not been re-verified -# since those groups were added. The verified setup paths are the bare-metal -# ones in README.md / RUNNING-ON-YOUR-RPI5.md. +# since those groups were added. The verified setup path is the bare-metal one: +# `make check && make build` on the host, as README.md describes. # # This image is for BUILDING ONLY — it is NOT for running the benchmark. # -# docker build -t pq-bench-rpi5 . # build + pin the toolchain +# docker build -t pqc . # build + pin the toolchain # # Run the MEASUREMENT bare-metal on the host, never in the container. A # container cannot reliably control the CPU governor, pin to an isolated core, diff --git a/tools/benchmarks/pqc/README.md b/tools/benchmarks/pqc/README.md index 3b60f5e..bf4dae6 100644 --- a/tools/benchmarks/pqc/README.md +++ b/tools/benchmarks/pqc/README.md @@ -1,10 +1,12 @@ -# pqc-bench +# pqc — post-quantum cryptography benchmark -A reproducible, general-purpose **post-quantum cryptography benchmark** -(formerly `pq-bench-rpi5`) whose baseline **reference platform** is the -**Raspberry Pi 5** (Broadcom BCM2712, Cortex-A76, -aarch64). Anyone can run it on their own Pi 5 and the results aggregate and -compare apples-to-apples. +A reproducible, general-purpose **post-quantum cryptography benchmark** whose +baseline **reference platform** is the **Raspberry Pi 5** (Broadcom BCM2712, +Cortex-A76, aarch64). It runs on any Linux or macOS box; results from the +reference platform aggregate and compare apples-to-apples. + +Results and figures land in [`reports/pqc`](../../../reports/pqc) — see that +directory for the published dataset and what it shows. **Framing — migration cost.** How much does moving from the cryptography Logos uses *today* (X25519 key exchange + Ed25519 signatures) to PQ candidates cost on @@ -195,7 +197,7 @@ The setup and run steps live in the **Makefile**, so they can't drift from reality the way prose does; `make help` lists everything. The flow: ```bash -git clone && cd pqc-bench +cd tools/benchmarks/pqc make check # read-only: verifies the environment — including that the # OpenSSL the build will use has its DEVELOPMENT files # (compile-and-link probe) — and prints per-platform install @@ -236,9 +238,24 @@ instead of being silently masked. ### On a Raspberry Pi 5 (the real measurement target) -Follow **[RUNNING-ON-YOUR-RPI5.md](RUNNING-ON-YOUR-RPI5.md)** for the -Pi-specific context (cooling, PSU, governor, baseline-grade); the commands are -the same targets: `make check && make build && make test && make run`. +Nothing is Pi-specific about the commands — they are the same targets as +everywhere else: `make check && make build && make test && make run`. What is +Pi-specific is the *measurement conditions* the baseline-grade gate checks, and +they are physical, not procedural: + +- **Active cooling** (the official Active Cooler or a fan). PQ signing — + SLH-DSA especially — holds the core at load long enough to throttle an + uncooled Pi, and a throttled run is flagged non-baseline. +- **The official 27 W USB-C PSU.** Under-voltage trips the same throttle flag. +- **Raspberry Pi OS / Debian 13 (trixie) or newer**, whose system OpenSSL is + already on the pinned 3.5.x line with ML-KEM/ML-DSA/SLH-DSA compiled in, so no + OpenSSL source build is needed. `make check` verifies this; on an older OS the + build falls back to compiling the pinned OpenSSL from source (+15–30 min). +- Run `make build` inside **tmux** so a dropped SSH session doesn't kill it + (5–15 min, dominated by liboqs and the first AWS-LC build). + +See [Contributing your RPi5 results](#contributing-your-rpi5-results) for the +full gate and the submission checklist. **On `sudo`:** it is **optional, not a prerequisite.** The only thing it does is set the CPU governor to `performance` — none of the crypto needs root. `./run.sh` @@ -283,7 +300,7 @@ Docker is for reproducibly **building** the pinned C toolchain (liboqs / OpenSSL / oqs-provider), not for running the benchmark: ```bash -docker build -t pqc-bench . # builds + pins the C toolchain inside the image +docker build -t pqc . # builds + pins the C toolchain inside the image ``` > **Coverage note:** the image covers the **C toolchain only** — it installs no diff --git a/tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md b/tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md deleted file mode 100644 index a647480..0000000 --- a/tools/benchmarks/pqc/RUNNING-ON-YOUR-RPI5.md +++ /dev/null @@ -1,184 +0,0 @@ -# Running pq-bench-rpi5 on Your Own Raspberry Pi 5 - -This benchmark measures post-quantum KEMs, signatures, and TLS 1.3 handshakes -against the classical baseline Logos uses today (X25519 / Ed25519), so every -chart shows the **migration cost** of moving to PQ on validator-grade hardware. - -There's no manual tuning: the benchmark **auto-calibrates the iteration count -per operation** to your Pi's speed, so results stay comparable across machines. - -## Prerequisites - -- **Raspberry Pi 5** (Cortex-A76, aarch64), ideally the 8GB model, with - **active cooling** so it doesn't thermal-throttle mid-run. -- **Raspberry Pi OS / Debian 13 (trixie) or newer** — the benchmark pins - OpenSSL to the **3.5.x LTS line** on every platform, and Debian 13's system - `openssl` package is already 3.5.x with the PQC algorithms (ML-KEM / ML-DSA / - SLH-DSA) compiled in, so **no OpenSSL source build is needed**. *(Verified on - a Pi 5 running trixie's `3.5.6`: the full native surface is present — - MLKEM512/768/1024, X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 and - mldsa44/65/87 — and the complete native phase matrix ran without - degradation.)* Confirm on your box with: - - ```sh - openssl version # want 3.5.x - openssl list -kem-algorithms | grep -i mlkem # want ML-KEM entries - openssl list -tls-groups | tr ':' '\n' | grep -i mlkem # MLKEM512/768/1024 + hybrids - openssl list -tls-signature-algorithms | tr ':' '\n' | grep -i mldsa # mldsa44/65/87 - ``` - - If the native MLKEM TLS groups are missing, `run.sh` skips the - `openssl-native` TLS matrix with a warning and the oqs-provider matrix still - runs. - - If your OS ships an older OpenSSL, `./setup/setup.sh` falls back to building - the pinned `openssl-3.5.7` from source automatically (adds ~15–30 min). -- **Rust toolchain** — needed for the `rustcrypto` measurement group (pure-Rust - ML-KEM/ML-DSA/SLH-DSA plus X25519/Ed25519 anchors). Install stable Rust via - rustup: - - ```sh - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - . "$HOME/.cargo/env" - cargo --version # any recent stable is fine - ``` - - (Debian 13 also packages `rustup` — `sudo apt install rustup && rustup default - stable` should be equivalent, but that path has not been verified by this - project.) The Rust toolchain covers TWO measurement groups: the - `rustcrypto` primitives (`bench/rust`) and the `rustls-awslc` TLS matrix - (`bench/rust-tls`). The latter compiles the AWS-LC C library on first build - (needs `cmake`, which `setup.sh deps` installs; verified working on a Pi 5). - Build both harnesses as your normal user (the run also does this - automatically — it runs cargo as you, never as root): - - ```sh - (cd bench/rust && cargo build --release --locked) - (cd bench/rust-tls && cargo build --release --locked) # AWS-LC C build: several minutes, once - ``` - - **Optional:** if cargo is absent, `./run.sh` skips both Rust groups - gracefully and records the reasons in the results JSON — the rest of the - benchmark is unaffected. -- **Internet access** and **sudo**. - -## Step 1 — Clone (public repo, no auth) - -```sh -git clone -cd pq-bench-rpi5 -``` - -## Step 2 — Check, then build - -```sh -make check # read-only: verifies OpenSSL incl. its DEV FILES (libssl-dev — - # the binary alone is not enough), rust, cmake etc., and prints - # apt commands for anything missing ('make deps' installs them) -make build # C toolchain + bench binaries + both Rust harnesses; refuses to - # link a system liboqs — only the vendored pinned build is - # comparable with the published baselines -make test # ~1-2 min verification gate (21 checks, incl. ldd-verifying the - # binaries link the vendored liboqs) before you spend 30 min - # measuring -``` - -The build takes 5–15 min (liboqs dominates; the first Rust-TLS build compiles -AWS-LC, several more minutes once). Run inside `tmux` so it survives an SSH -disconnect. `make build` refuses to run cargo as root — build as your normal -user; the run also stays your user, only the governor step escalates. - -## Step 3 — Run - -```sh -make run -``` - -Root is needed for exactly one step: writing `performance` into the sysfs -CPU-governor files. `make run` asks for your sudo password once, up front -(`sudo -v`), and only the governor write escalates (`sudo -n`) — the -measurement itself, the in-run cargo builds and every result file stay owned -by your user. (Core pinning via `taskset` and the `vcgencmd` thermal trace -need no root — vcgencmd only needs the `video` group, which the default Pi -user has.) `NOSUDO=1 make run` skips the sudo attempt; the run completes and -the governor demerit is recorded honestly. - -A full run covers **all four measurement groups** (liboqs primitives, -RustCrypto primitives, aws-lc-rs pricing rows, and the three-stack TLS phase -matrix: openssl-native / oqs-provider / rustls-awslc, ~60 cells at 1000 -handshakes each). **Measured: 36 min on an Apple M3, 29 min (1716 s) on a -Pi 5** — the Pi is not slower end-to-end because per-op auto-calibration -targets a fixed measurement budget per operation. There are no iteration -counts to set. - -To exercise the whole pipeline end-to-end first without a publishable-length -run, use smoke mode — same coverage (all four groups, every TLS stack), one -repetition per op and 50 handshakes per TLS cell: - -```sh -make smoke -``` - -Output lands in `results/-.json`, stamped with full -provenance (Pi model, RAM, kernel, governor, thermal trace, library versions) -and an `is_baseline_grade` flag. - -## Step 4 — View results - -The dashboard must be served over **HTTP** (opening `index.html` as a `file://` -URL blocks its JSON fetch — see `dashboard/README.md`): - -```sh -cd dashboard -python3 -m http.server 8765 -# then open http://:8765 -``` - -The charts show KEM, signature, and TLS results with the classical X25519 / -Ed25519 baseline drawn as a reference line. - -## Step 5 — Contribute (optional) - -Share your `results/*.json` (open a PR or send it over). The published -dashboard dataset is pinned by `analyze/published_runs.txt` (run -`python3 analyze/merge.py` with no arguments to rebuild exactly that set); -for an ad-hoc local comparison pass explicit files: - -```sh -python3 analyze/merge.py results/.json results/.json \ - -o dashboard/data/merged.json -``` - -The dashboard then shows every selected machine side by side. - -## What the results tell you - -PQ is not so much *slower* as *bigger*. Lattice schemes (ML-KEM, ML-DSA) run -close to classical in speed but have much larger keys and signatures, while the -hash-based SLH-DSA (SPHINCS+) is an outlier in both signing time and signature -size. On TLS, the classical baseline fits in a single packet, while PQ and -hybrid handshakes grow past it and fragment. - -## Notes and limitations - -- Hash-based signatures are measured in **both generations**: the standardised - FIPS 205 SLH-DSA sets (`SLH_DSA_PURE_SHA2_*`, new rows) **and** the round-3 - `SPHINCS+-SHA2-*-simple` sets (the rows comparable to the earlier published - baselines). They are different algorithms — compare like with like. -- Measures **liboqs** (C / assembly) implementations, the **RustCrypto - pure-Rust second source** (`implementation: rustcrypto` rows — same - methodology, hedged signing like liboqs; Falcon/McEliece/FrodoKEM have no - mature pure-Rust implementation and stay absent there), the **aws-lc-rs - pricing rows**, and the **three-stack TLS phase matrix** (`openssl-native`, - `oqs-provider`, `rustls-awslc`) — see README for what each covers and the - caveats that apply. -- Rust-vs-C gaps are partly **optimisation-path artefacts**, not pure - implementation quality: liboqs has hand-written aarch64 assembly for ML-KEM, - the Rust crates are portable Rust. The results JSON records both sides' - compiled code paths (`toolchain.liboqs_opt_defines` / `toolchain.rust`). -- Userspace PMU cycle counts are usually unavailable, so the primary metric is - **wall-clock time + ops/sec**. -- SNARK / STARK benchmarking is **out of scope** for this phase (`config.yaml` - reserves a hook for it). -- The candidate list lives in `config.yaml` — use the exact liboqs algorithm - names. diff --git a/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml b/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml index 74fdec7..633df32 100644 --- a/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml +++ b/tools/benchmarks/pqc/bench/rust-tls/Cargo.toml @@ -2,7 +2,7 @@ name = "pqb-rust-tls" version = "0.1.0" edition = "2021" -description = "pq-bench-rpi5 rustls + aws-lc-rs TLS 1.3 handshake harness — mirrors bench/tls/bench_tls.c, emitting the same schema-2.0.0 rows with implementation:\"rustls-awslc\"" +description = "pqc rustls + aws-lc-rs TLS 1.3 handshake harness — mirrors bench/tls/bench_tls.c, emitting the same schema-2.0.0 rows with implementation:\"rustls-awslc\"" publish = false [dependencies] diff --git a/tools/benchmarks/pqc/bench/rust/Cargo.toml b/tools/benchmarks/pqc/bench/rust/Cargo.toml index e64c40d..6ed4a37 100644 --- a/tools/benchmarks/pqc/bench/rust/Cargo.toml +++ b/tools/benchmarks/pqc/bench/rust/Cargo.toml @@ -2,7 +2,7 @@ name = "pqb-rust" version = "0.1.0" edition = "2021" -description = "pq-bench-rpi5 pure-Rust (RustCrypto) KEM/signature harness — same methodology as bench/kem_sig/bench_pq.c, emitting the same schema-2.0.0 JSONL rows with implementation:\"rustcrypto\"" +description = "pqc pure-Rust (RustCrypto) KEM/signature harness — same methodology as bench/kem_sig/bench_pq.c, emitting the same schema-2.0.0 JSONL rows with implementation:\"rustcrypto\"" publish = false [dependencies] diff --git a/tools/benchmarks/pqc/config.yaml b/tools/benchmarks/pqc/config.yaml index 3f58a43..79e01b0 100644 --- a/tools/benchmarks/pqc/config.yaml +++ b/tools/benchmarks/pqc/config.yaml @@ -1,5 +1,5 @@ # ============================================================================= -# pqc-bench candidate configuration +# pqc benchmark — candidate configuration # # This file is the single place users edit to extend the benchmark. The harness # reads it with a dependency-free YAML subset parser (bench/lib/miniyaml.py), so diff --git a/tools/benchmarks/pqc/dashboard/app.js b/tools/benchmarks/pqc/dashboard/app.js index d4f319a..6302e03 100644 --- a/tools/benchmarks/pqc/dashboard/app.js +++ b/tools/benchmarks/pqc/dashboard/app.js @@ -1,4 +1,4 @@ -/* pq-bench-rpi5 dashboard — pure client-side, reads a merged.json produced by +/* pqc benchmark dashboard — pure client-side, reads a merged.json produced by * analyze/merge.py. No backend. * * Views (stage-6): TLS migration phases (Pi + Mac side by side), the full diff --git a/tools/benchmarks/pqc/dashboard/index.html b/tools/benchmarks/pqc/dashboard/index.html index 7fe347a..adcf82b 100644 --- a/tools/benchmarks/pqc/dashboard/index.html +++ b/tools/benchmarks/pqc/dashboard/index.html @@ -95,7 +95,7 @@

    Findings: deliberate absences disabled rows are results, n