Performance measurements › arm_1 › kex-04 · system: x86_1 · arm_1

kex-04 DKEX (Ding Key Exchange) — performance on AArch64 (system arm_1)

Independent measurement following the structure of the NICCS ARM self-assessment guide, §3.5 (1)–(7). Not a submitter self-assessment.

1. Basic information

2. Assessment environment

item value
processor Qualcomm Oryon (CPU 2, one core)
machine ASUS Vivobook S 15
clock fixed 2.71 GHz (governor performance, minimum = maximum), boost off, SMT none
memory 30562 MiB
OS / kernel Ubuntu 26.04.1 LTS / 7.0.0-34-generic
compiler / build tool gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0 / cmake version 4.2.3
campaign start / end (UTC) 2026-09-28T15:05:46 / 2026-09-29T08:43:52

3. Functional testing (KAT)

Each library was checked against the submitted KAT vectors (SHA-256 manifest kex-04/kat.sha256 in the harness) before timing.

instance build flags KAT
DKEX-128 guide PASS
DKEX-256 guide PASS
DKEX-512 guide PASS

4. Performance

instance operation mean cycles mean time ops/s median trial n (trials × iters)
DKEX-128 exchange 3.17 M 1.18 ms 849 1.18 ms 3040 (5 × 608)
DKEX-128 init_a 215.5 k 79.9 µs 1.25e+04 80 µs 3040 (5 × 608)
DKEX-128 init_b 216.1 k 80.1 µs 1.25e+04 80 µs 3040 (5 × 608)
DKEX-128 pass1 173.4 k 64.3 µs 1.56e+04 64.1 µs 3040 (5 × 608)
DKEX-128 pass2 1.13 M 420 µs 2.38e+03 419 µs 3040 (5 × 608)
DKEX-128 pass3 1.20 M 447 µs 2.24e+03 447 µs 3040 (5 × 608)
DKEX-128 derive_a 2854 1.01 µs 9.91e+05 1.01 µs 3040 (5 × 608)
DKEX-128 derive_b 234.6 k 87 µs 1.15e+04 87 µs 3040 (5 × 608)
DKEX-256 exchange 7.27 M 2.7 ms 371 2.7 ms 1015 (5 × 203)
DKEX-256 init_a 600.4 k 223 µs 4.49e+03 223 µs 1015 (5 × 203)
DKEX-256 init_b 599.8 k 223 µs 4.49e+03 223 µs 1015 (5 × 203)
DKEX-256 pass1 532.4 k 197 µs 5.06e+03 197 µs 1015 (5 × 203)
DKEX-256 pass2 2.40 M 892 µs 1.12e+03 891 µs 1015 (5 × 203)
DKEX-256 pass3 2.51 M 930 µs 1.07e+03 930 µs 1015 (5 × 203)
DKEX-256 derive_a 2856 1.01 µs 9.92e+05 1.01 µs 1015 (5 × 203)
DKEX-256 derive_b 625.3 k 232 µs 4.31e+03 232 µs 1015 (5 × 203)
DKEX-512 exchange 10.57 M 3.92 ms 255 3.92 ms 840 (5 × 168)
DKEX-512 init_a 600.9 k 223 µs 4.49e+03 223 µs 840 (5 × 168)
DKEX-512 init_b 600.4 k 223 µs 4.49e+03 223 µs 840 (5 × 168)
DKEX-512 pass1 1.86 M 691 µs 1.45e+03 691 µs 840 (5 × 168)
DKEX-512 pass2 4.09 M 1.52 ms 659 1.52 ms 840 (5 × 168)
DKEX-512 pass3 2.77 M 1.03 ms 972 1.03 ms 840 (5 × 168)
DKEX-512 derive_a 8226 3.02 µs 3.31e+05 3.02 µs 840 (5 × 168)
DKEX-512 derive_b 630.8 k 234 µs 4.27e+03 234 µs 840 (5 × 168)

5. Resource consumption

Static memory is approximated by the library's loadable ELF segments; peak memory is the process high-water mark (VmHWM) including the benchmark driver and libc, so both are upper-bound proxies rather than isolated algorithm memory.

instance operation static: ELF image (bytes) baseline RSS peak RSS
DKEX-128 exchange 51892 3620 KiB 3684 KiB
DKEX-128 init_a 51892 1604 KiB 1668 KiB
DKEX-128 init_b 51892 1604 KiB 1668 KiB
DKEX-128 pass1 51892 1604 KiB 1668 KiB
DKEX-128 pass2 51892 3544 KiB 3608 KiB
DKEX-128 pass3 51892 1604 KiB 1668 KiB
DKEX-128 derive_a 51892 3620 KiB 3684 KiB
DKEX-128 derive_b 51892 1604 KiB 1668 KiB
DKEX-256 exchange 52748 1780 KiB 1844 KiB
DKEX-256 init_a 52748 1780 KiB 1844 KiB
DKEX-256 init_b 52748 1776 KiB 1840 KiB
DKEX-256 pass1 52748 1780 KiB 1844 KiB
DKEX-256 pass2 52748 1776 KiB 1840 KiB
DKEX-256 pass3 52748 3692 KiB 3756 KiB
DKEX-256 derive_a 52748 1780 KiB 1844 KiB
DKEX-256 derive_b 52748 1780 KiB 1844 KiB
DKEX-512 exchange 53740 3864 KiB 3928 KiB
DKEX-512 init_a 53740 3616 KiB 3680 KiB
DKEX-512 init_b 53740 1836 KiB 1912 KiB
DKEX-512 pass1 53740 1840 KiB 1916 KiB
DKEX-512 pass2 53740 1840 KiB 1916 KiB
DKEX-512 pass3 53740 3712 KiB 3776 KiB
DKEX-512 derive_a 53740 1840 KiB 1916 KiB
DKEX-512 derive_b 53740 3716 KiB 3780 KiB

6. Transmission and storage overhead

Bandwidth counts all specified protocol messages and each required public key once. Public keys are transmitted bytes too. Certificates and transport framing are excluded. The published raw timing records are unchanged.

instance passes messages (bytes; raw API) protocol-message bytes public key A / B bandwidth (bytes) long-term sk (API cap) shared secret
DKEX-128 3 800 / 3188 / 2420 6408 1312 / 1312 9032 2560 32
DKEX-256 3 1568 / 6195 / 4627 12390 2592 / 2592 17574 4896 32
DKEX-512 3 3392 / 7699 / 4627 15718 2592 / 2592 20902 4896 64

Symmetric primitives

Survey verdict: mixed — KEX core via ICCS; embedded ML-DSA uses its own SHAKE

Share of each operation spent in the ICCS placeholder hash functions and in the ICCS DRNG (reference build, measured in the same run with link-time wrappers):

instance operation pseudohash/XOF/sm3 DRNG calls per operation
DKEX-128 exchange 14% 0.6% drng 4, pseudoXOF 1, sm3hash 186
DKEX-256 exchange 16% 0.3% drng 4, pseudoXOF 1, sm3hash 585
DKEX-512 exchange 40% 0.2% drng 4, pseudoXOF 5, sm3hash 1.23e+03

7. Raw evidence index

Paths are relative to performance/data/arm_1/ in the harness; each JSON file records its commands, environment and trials.

instance item file
DKEX-128 KAT log (sha256 6de87a5477330449…) kat/kex-04/DKEX-128.log
DKEX-128 timing derive_a records/kex-04/DKEX-128__derive_a.json
DKEX-128 timing derive_b records/kex-04/DKEX-128__derive_b.json
DKEX-128 timing exchange records/kex-04/DKEX-128__exchange.json
DKEX-128 timing init_a records/kex-04/DKEX-128__init_a.json
DKEX-128 timing init_b records/kex-04/DKEX-128__init_b.json
DKEX-128 timing pass1 records/kex-04/DKEX-128__pass1.json
DKEX-128 timing pass2 records/kex-04/DKEX-128__pass2.json
DKEX-128 timing pass3 records/kex-04/DKEX-128__pass3.json
DKEX-128 hash profile exchange profile/kex-04/DKEX-128__exchange.json
DKEX-256 KAT log (sha256 46c525733f5ec01c…) kat/kex-04/DKEX-256.log
DKEX-256 timing derive_a records/kex-04/DKEX-256__derive_a.json
DKEX-256 timing derive_b records/kex-04/DKEX-256__derive_b.json
DKEX-256 timing exchange records/kex-04/DKEX-256__exchange.json
DKEX-256 timing init_a records/kex-04/DKEX-256__init_a.json
DKEX-256 timing init_b records/kex-04/DKEX-256__init_b.json
DKEX-256 timing pass1 records/kex-04/DKEX-256__pass1.json
DKEX-256 timing pass2 records/kex-04/DKEX-256__pass2.json
DKEX-256 timing pass3 records/kex-04/DKEX-256__pass3.json
DKEX-256 hash profile exchange profile/kex-04/DKEX-256__exchange.json
DKEX-512 KAT log (sha256 b1fcb3f7d7440d71…) kat/kex-04/DKEX-512.log
DKEX-512 timing derive_a records/kex-04/DKEX-512__derive_a.json
DKEX-512 timing derive_b records/kex-04/DKEX-512__derive_b.json
DKEX-512 timing exchange records/kex-04/DKEX-512__exchange.json
DKEX-512 timing init_a records/kex-04/DKEX-512__init_a.json
DKEX-512 timing init_b records/kex-04/DKEX-512__init_b.json
DKEX-512 timing pass1 records/kex-04/DKEX-512__pass1.json
DKEX-512 timing pass2 records/kex-04/DKEX-512__pass2.json
DKEX-512 timing pass3 records/kex-04/DKEX-512__pass3.json
DKEX-512 hash profile exchange profile/kex-04/DKEX-512__exchange.json

Scripts: performance/campaign.py, performance/ngcc_perf.c, performance/hashprof/ in the harness.