Skip to content

v1.0.0-alpha.1

Pre-release
Pre-release

Choose a tag to compare

@wangxiao1254 wangxiao1254 released this 19 Jul 20:25

First tagged alpha of the 1.0 development line, pairing with emp-tool
v1.0.0-alpha.1. The 0.3.x line (tag 0.3.0 / branch v0.3.x) is
maintained separately and receives backported fixes.

Stability

  • Pre-1.0 API: headers and names may change between alpha tags and
    before the final 1.0.0. Pin to a specific tag, and pin the paired
    emp-tool tag.
  • CMake package metadata is numeric 1.0.0 (project(VERSION) cannot
    carry a prerelease suffix); the alpha status lives in the git tag.

Added

  • Base OTs: CO (semi-honest), CSW / PVW / BMM (malicious-secure);
    BMM is post-quantum over ML-KEM-512 (Kyber) internals.
  • OT extensions (RCOT): IKNP, SoftSpoken<k>, Ferret, and the
    wire-free SilentFerret.
  • Subfield-VOLE generators F2kVOLE / FpVOLE over Ferret.
  • One streaming API (begin / next / end, next_n, run) across
    every extension, with always-on expecting lifecycle / argument /
    role contracts that survive NDEBUG.
  • Per-build-directory auto-tuning of local scheduling knobs
    (output- and wire-invariant; see docs/performance-tuning.md).
  • Wire-trace framework: trace_hash + the trace_hash_baseline CI gate
    diff per-protocol digests against a checked-in baseline, so wire-format
    changes cannot slip through silently.

Requirements

  • emp-tool v1.0.0-alpha.1 (CMake floor 1.0); OpenSSL ≥ 3.0;
    CMake ≥ 3.21 (emp-tool needs ≥ 3.25).

Security

See the README's Security section. In particular: FpVOLE malicious
mode is not 128-bit sound (field p = 2⁶¹ − 1); the malicious OT
extensions realize selective-abort functionalities with streaming
outputs provisional until end(); and BMM is a custom construction
over ML-KEM-512 internals (not standardized FIPS-203). Research
software; no independent audit.

Known limitations

  • FpVOLE malicious soundness is field-bounded (see Security above),
    not 128-bit.
  • Auto-tuning covers local scheduling only; it never changes wire bytes
    or outputs, and is per-build-directory — re-run tune after cloning a
    build tree to a different machine (see docs/performance-tuning.md).